blob: 374fa083e42cf9055e8765d0c5dff7c40791c31e [file] [log] [blame]
#!/usr/bin/python
"""%prog -w <warn_new> -c <crit_new> -t <max_age> queuedir [queuedir...]
nagios plugin to monitor a queuedir"""
import os
import sys
import traceback
import time
OK, WARNING, CRITICAL, UNKNOWN = range(4)
def check_queuedir(d, options):
status = OK
msgs = []
# Check 'dead'
num_dead = len([f for f in os.listdir(
os.path.join(d, 'dead')) if not f.endswith(".log")])
if num_dead > 0:
status = CRITICAL
if num_dead == 1:
msgs.append("%i dead item" % num_dead)
else:
msgs.append("%i dead items" % num_dead)
# Check 'new'
new_files = os.listdir(os.path.join(d, 'new'))
num_new = len(new_files)
if num_new > 0:
oldest_new = min(
os.path.getmtime(os.path.join(d, 'new', f)) for f in new_files)
if num_new >= options.crit_new:
status = CRITICAL
msgs.append("%i new items" % num_new)
elif num_new >= options.warn_new:
status = max(status, WARNING)
msgs.append("%i new items" % num_new)
age = int(time.time() - oldest_new)
if age > options.max_age:
status = max(status, WARNING)
msgs.append("oldest item is %is old" % age)
return status, msgs
def main():
from optparse import OptionParser
parser = OptionParser(__doc__)
parser.set_defaults(
warn_new=50,
crit_new=100,
max_age=900,
)
parser.add_option("-w", dest="warn_new", type="int",
help="warn when there are more than this number of items in new")
parser.add_option("-c", dest="crit_new", type="int",
help="critical when there are more than this number of items in new")
parser.add_option("-t", dest="max_age", type="int",
help="warn when oldest item in new is more than this many seconds old")
options, args = parser.parse_args()
if len(args) == 0:
print "You must specify at least one queuedir"
sys.exit(UNKNOWN)
try:
status = OK
msgs = []
for d in args:
d_status, d_msgs = check_queuedir(d, options)
status = max(status, d_status)
msgs.extend(d_msgs)
if not msgs:
print "Ok"
else:
print ";".join(msgs)
sys.exit(status)
except SystemExit:
raise
except:
print "Unhandled exception"
traceback.print_exc()
sys.exit(UNKNOWN)
if __name__ == '__main__':
main()