add a directory for running nagios scale/performance tests
[monitor.git] / nagios / plugins / checkrt.py
index befb1e3..54383b1 100755 (executable)
@@ -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()