将值标记为警告或严重

Tag values as warning or critical

我有一个字典如下(字典名为channel_info):

{'flume02': u'98.94420000000001', 'flume03': u'32.562999999999995', 'flume01': u'2.15'}

我正在尝试遍历字典并报告警告或严重的值。我必须对程序进行论证

parser.add_argument('-w', '--warning', type=int, help='Warning threshold', default=85)
parser.add_argument('-c', '--critical', type=int, help='Critical threshold', default=95)

所以基本上当我 运行 像 myprog.py -w 80 -c 90 这样的程序时,我想要 flume02 为关键(在这种情况下,这将是唯一的输出)。如果任何其他键的值大于 80 或 90,它们将分别报告为警告或严重。

然而事实并非如此,我得到的所有值都处于临界状态。

相关代码:

    if args.warning and not args.critical:
        for each in channel_info.items():
            if float(each[1]) > float(args.warning):
                print 'WARNING | {} is {} percent full'.format(*each)
        exit(1)

    if args.critical and not args.warning:
        for each in channel_info.items():
            if float(each[1]) > float(args.critical):
                print 'CRITICAL | {} is {} percent full'.format(*each)
        exit(2)

    if args.warning and args.critical:
        for each in channel_info.items():
            if float(args.warning) < each[1] < float(args.critical):
                print 'WARNING | {} is {} percent full'.format(*each)
            elif each[1] > float(args.critical):
                print 'CRITICAL | {} is {} percent full'.format(*each)

输出:

CRITICAL | flume02 is 99.9892 percent full
CRITICAL | flume03 is 51.4497 percent full
CRITICAL | flume01 is 7.95 percent full

我将 if 最后一个 if 条件 (if args.warning and args.critical) 放入,以确保程序能够 运行 与 1(-w-c)或两个参数。对我做错的任何帮助将不胜感激

我想你忘记了分支 #3 上的 float(each[1])。即比较字符串和浮点数。

更有理由只格式化一次比较值,而不是每次都执行 float(xyz)。

threshold_crit = 90.0
threshold_warn = 80.0

for each in channel_info.items():
    # value = float(each[1])
    value = each[1]

    if threshold_crit < value < threshold_warn:
        print 'WARNING | {} is {} percent full'.format(*each)
    elif value > threshold_crit:
        print 'CRITICAL | {} is {} percent full'.format(*each)

输出:

 CRITICAL | flume02 is 98.94420000000001 percent full
 CRITICAL | flume03 is 32.562999999999995 percent full
 CRITICAL | flume01 is 2.15 percent full

将代码更改为:

    value = float(each[1])
    #value = each[1]

输出:

 CRITICAL | flume02 is 98.94420000000001 percent full

解决了。原来有两个问题

  1. 正如 指出的那样,我错过了浮动。
  2. 然而 -c 不能独立工作的主要问题是两个参数都有默认值,当我只使用 -c 时,第一个 if 语句正在执行(因为有一个值,它等于 true)并且所有值都被标记为警告