#!/usr/bin/python import os, sys, datetime, stat, time from stat import * version = "16th April 2007" ######################################################################################### # Author: Craig Rayner # 28th February 2007 ######################################################################################### def getopts(argv): global version opts = {} while argv: x = len(argv) - 1 if argv[0] == '-f': opts[argv[0]] = argv[1] argv = argv[2:] elif argv[0] == '--file': opts['-f'] = argv[1] argv = argv[2:] elif argv[0] == '-w': opts[argv[0]] = argv[1] argv = argv[2:] elif argv[0] == '--warning': opts['-w'] = argv[1] argv = argv[2:] elif argv[0] == '-c': opts[argv[0]] = argv[1] argv = argv[2:] elif argv[0] == '--critical': opts['-c'] = argv[1] argv = argv[2:] elif argv[0] == '-d': opts[argv[0]] = argv[1] argv = argv[2:] elif argv[0] == '--datetype': opts['-d'] = argv[1] argv = argv[2:] elif argv[0] == '-h': PrintHelp() argv = argv[1:] elif argv[0] == '--help': PrintHelp() argv = argv[1:] elif argv[0] == '-V': print 'Version: ' + str(version) argv = argv[1:] elif argv[0] == '--version': print 'Version: ' + str(version) argv = argv[1:] else: argv = argv[1:] return opts def PrintHelp(): global version print "Version: " + version print """ Usage: check_fileage -f /mount/path/file.ext -w nnnn -c nnnn [-d A|C|M] [-V] [-h] Options: -h, --help Print detailed help screen -d, --datetype Date Type: Return the date as defined: A: (time of most recent access), M: (time of most recent content modification), C: (platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows). The default is M. -f, --file The absolute path and file name. -w, --warning The age of the file in minutes to generate a warning notification. -c, --critical The age of the file in minutes to generate a critical notification. -V, --version State the Version Examples: check_fileage -f /path/to/file -w 1440 -C 2880 Returns OK if the file is less than the warning time in age. """ if __name__ == '__main__': from sys import argv myargs = getopts(argv) if myargs.has_key('-V'): print 'Version: ' + str(version) datetype = 'M' if myargs.has_key('-d'): datetype = myargs['-d'] if datetype not in 'ACM': datetype = 'M' if myargs.has_key('-w'): warning = int(myargs['-w']) * 60 else: print 'The warning time is not set. See check_fileage.py --help' PrintHelp() sys.exit(3) if myargs.has_key('-c'): critical = int(myargs['-c']) * 60 if critical <= warning: print 'The critical time must be older than the warning time. See check_fileage.py --help' sys.exit(3) else: print 'The critical time is not set. See check_fileage.py --help' PrintHelp() sys.exit(3) if myargs.has_key('-f'): try: filestat = os.stat(myargs['-f']) if datetype == 'A': filedate = filestat.st_atime descriptive = 'last access' elif datetype == 'C': filedate = filestat.st_ctime descriptive = 'created (NOT *NIX)' else: filedate = filestat.st_mtime descriptive = 'modified' today = time.mktime(time.localtime()) exitstate = 0 fileage = time.strftime('%a %d %b/%Y %H:%M', time.localtime(filedate)) filename = myargs['-f'] if filename[1] == ":": filename = filename[2:] filename = filename.replace("\\", "/") filename = os.path.basename(filename) exitmessage = 'OK: ' + filename + ' has a ' + descriptive + ' date of ' + fileage + '\n' if today > filedate + warning: exitstate = 1 exitmessage = 'Warning: ' + exitmessage[4:] if today > filedate + critical: exitstate = 2 exitmessage = 'Critical: ' + exitmessage[9:] print exitmessage sys.exit(exitstate) except OSError: filename = myargs['-f'] if filename[1] == ":": filename = filename[2:] filename = filename.replace("\\", "/") filename = os.path.basename(filename) print 'Unknown: System Error - Unable to access the file ' + filename sys.exit(3) else: print 'The file name was not set. See check_fileage.py --help' PrintHelp() sys.exit(3)