Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198845
  • 博文数量: 75
  • 博客积分: 2049
  • 博客等级: 大尉
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-08 12:37
文章分类

全部博文(75)

文章存档

2011年(1)

2010年(9)

2009年(65)

我的朋友

分类:

2010-09-02 16:55:43

#!/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)


阅读(766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~