X-Git-Url: http://git.onelab.eu/?p=monitor.git;a=blobdiff_plain;f=nagios%2Fplugins%2Fcheckrt.py;h=54383b146cc74c11b1178564a2229dc3cf8e27c8;hp=befb1e3a7dd9043b74694fa197df38cf09d3819a;hb=976e2654ef6da1dff75c0216338d4c9863e42a73;hpb=9fc85e489ba906d8535348a69b0ad124041f6890 diff --git a/nagios/plugins/checkrt.py b/nagios/plugins/checkrt.py index befb1e3..54383b1 100755 --- a/nagios/plugins/checkrt.py +++ b/nagios/plugins/checkrt.py @@ -20,18 +20,50 @@ def argv_to_dict(argv): d[prev] = a return d +def get_next_pattern(argv, last): + """ This is worse than the function above. """ + i = 0 + if last is not None: + for a in argv: + if argv[i] == last: + break + i += 1 + for offset,a in enumerate(argv[i+1:]): + if a == "-p": + return argv[i+2+offset] + return None + + def main(): - d = argv_to_dict(sys.argv[1:]) + #d = argv_to_dict(sys.argv[1:]) + r = -1 + o = -1 + last = None - if 'pattern' in d or 'p' in d: - try: - pattern = d['pattern'] - except: - pattern = d['p'] - else: - print "UNKNOWN: Argument error" + while True: + pattern = get_next_pattern(sys.argv, last) + if pattern == None: + break + last = pattern + + (r_ret,o_ret) = look_for_pattern(pattern) + r = max(r, r_ret) + o = max(o, o_ret) + + if r == 3: + print "UNKNOWN: failed to convert %s to open ticket count" % o sys.exit(3) + elif r == 0: + print "OK: no open tickets for site" + sys.exit(0) + elif r == 1: + print "WARNING: %s open tickets" % o + sys.exit(1) + else: + print "FAKE-CRITICAL: RT check failed" + sys.exit(2) +def look_for_pattern(pattern): # TODO: check that RT is configured correctly os.environ["RTSERVER"] = auth.RTSERVER @@ -45,28 +77,26 @@ def main(): cmd = """rt ls -s -t ticket "%s" 2>&1 """ % query cmd = cmd + """| grep -vi "no match" | wc -l """ + # print >>sys.stderr, cmd + # print >>sys.stderr, os.environ out = os.popen(cmd, 'r') open_tickets = out.read() try: open_tickets_i = int(open_tickets) except: - print "UNKNOWN: failed to convert %s to open ticket count" % open_tickets - sys.exit(3) + return (3,None) if open_tickets_i == 0: - print "OK: no open tickets for site" - sys.exit(0) + return (0,0) elif open_tickets_i != 0: - print "WARNING: %s open tickets" % open_tickets_i - sys.exit(1) + return (1,open_tickets_i) else: - print "FAKE-CRITICAL: RT check failed" - sys.exit(2) + return (2,open_tickets_i) if __name__ == '__main__': - f = open("/tmp/checkpcu", 'a') - f.write("checkpcu %s %s\n" % (time.time(), " ".join(sys.argv[1:]))) + f = open("/tmp/checkrt", 'a') + f.write("checkrt %s %s\n" % (time.time(), " ".join(sys.argv[1:]))) f.close() main()