add a directory for running nagios scale/performance tests
[monitor.git] / nagios / plugins / checkrt.py
1 #!/usr/bin/python
2
3 import os
4 import time
5 import sys
6 import auth
7
8 def argv_to_dict(argv):
9     """
10         NOTE: very bare-bones, no error checking, will fail easily.
11     """
12     d = {}
13     prev=None
14     for a in argv:
15         if "--" == a[0:2]:
16             prev = a[2:]
17         elif "-" == a[0:1]:
18             prev = a[1:]
19         else:
20             d[prev] = a
21     return d
22
23 def get_next_pattern(argv, last):
24     """ This is worse than the function above. """
25     i = 0
26     if last is not None:
27         for a in argv:
28             if argv[i] == last:
29                 break
30             i += 1
31     for offset,a in enumerate(argv[i+1:]):
32         if a == "-p":
33             return argv[i+2+offset]
34     return None
35
36
37 def main():
38     #d = argv_to_dict(sys.argv[1:])
39     r = -1
40     o = -1
41     last = None
42
43     while True:
44         pattern = get_next_pattern(sys.argv, last)
45         if pattern == None:
46             break
47         last = pattern
48
49         (r_ret,o_ret) = look_for_pattern(pattern)
50         r = max(r, r_ret)
51         o = max(o, o_ret)
52
53     if r == 3:
54         print "UNKNOWN: failed to convert %s to open ticket count" % o
55         sys.exit(3)
56     elif r == 0:
57         print "OK: no open tickets for site"
58         sys.exit(0)
59     elif r == 1:
60         print "WARNING: %s open tickets" % o
61         sys.exit(1)
62     else:
63         print "FAKE-CRITICAL: RT check failed"
64         sys.exit(2)
65
66 def look_for_pattern(pattern):
67
68     # TODO: check that RT is configured correctly
69     os.environ["RTSERVER"] = auth.RTSERVER
70     os.environ["RTUSER"] = auth.RTUSER
71     os.environ["RTPASSWD"] = auth.RTPASSWD
72     os.environ["RTDEBUG"] = auth.RTDEBUG
73
74     # TODO: may need to add a timeout
75     # NOTE: RT3.8
76     query = "Subject like '%%%s%%' and Queue='Monitor' and ( Status='new' or Status='open' )" % pattern
77     cmd = """rt ls -s -t ticket "%s" 2>&1 """ % query
78     cmd = cmd + """| grep -vi "no match" | wc -l """
79
80    # print >>sys.stderr, cmd
81    # print >>sys.stderr, os.environ
82     out = os.popen(cmd, 'r')
83     open_tickets = out.read()
84
85     try:
86         open_tickets_i = int(open_tickets)
87     except:
88         return (3,None)
89
90     if open_tickets_i == 0:
91         return (0,0)
92     elif open_tickets_i != 0:
93         return (1,open_tickets_i)
94     else:
95         return (2,open_tickets_i)
96
97
98 if __name__ == '__main__':
99     f = open("/tmp/checkrt", 'a')
100     f.write("checkrt %s %s\n" % (time.time(), " ".join(sys.argv[1:])))
101     f.close()
102     main()