cleaned linspector ,refactored command-line parsing, and fixed the Logger

This commit is contained in:
Rafael.Timmerberg 2013-05-24 02:50:10 +02:00
commit 5b09f02d68
8 changed files with 445 additions and 213 deletions

View file

@ -1,183 +1,74 @@
#!/usr/bin/python2.7 -tt
import sys
import time
import getopt
from lib.core.daemon import Daemon
VERSION = "0.1.1/TETRIS"
import argparse
from lib.core.logger import Logger
from lib.config.config import Config
from lib.core import logger
from apscheduler.scheduler import Scheduler
import pprint
NAME = "linspector"
VERSION = "0.1/TETRIS"
_configfile = str(sys.path[0]) + "/linspector.json"
_logfile = str(sys.path[0]) + "/linspector.log"
_pidfile = "/tmp/linspector.pid"
import logging
import subprocess as sp
class LinspectorDaemon(Daemon):
def run(self):
"""
parse the joblist here and add each job to cron.
"""
sched = Scheduler()
sched.start()
x = sched.add_cron_job(job_function, second='*/1', args=['1!'])
if x is not None:
logger.writeLogToFile(_logfile, str(x.__dict__))
else:
logger.writeLogToFile(_logfile, "sdfasdfsdf")
sched.add_cron_job(job_function, second='*/2', args=['2!'])
sched.add_cron_job(job_function, second='*/4', args=['4!'])
sched.add_cron_job(job_function, second='*/5', args=['5!'])
sched.add_cron_job(job_function, second='*/8', args=['8!'])
sched.add_cron_job(job_function, second='*/10', args=['10!'])
sched.add_cron_job(job_function, second='*/20', args=['20!'])
sched.add_cron_job(job_function, second='*/40', args=['40!'])
sched.add_cron_job(job_function, second='*', args=['0!'])
while True:
try:
logger.writeLogToFile(_logfile, "Running!")
except Exception as err:
logger.writeLogToFile(_logfile, str(err))
sys.exit(1)
time.sleep(1)
def job_function(mes):
logger.writeLogToFile(_logfile, "Function: job_function says " + str(mes) + ", from cron.")
def usage():
print "usage: linspector [-cdhlprsSvV]"
print "-c, --config=FILE select configfile to use"
print "-d, --daemonize daemonize process"
print "-h, --help this help"
print "-l, --logfile=FILE set logfile to use"
print "-p, --pidfile=FILE set the pidfile to use (default: /tmp/linspector.pid)"
print "-r, --restart restart the daemon"
print "-s, --start start the daemon"
print "-S, --stop stop the daemon"
print "-v, --verbose verbose mode"
print "-V, --version show version information"
def version():
print NAME + " " + VERSION
print "copyright (c) 2011-2013 by Johannes Findeisen and Rafael Timmerberg"
def parseArgs():
parser = argparse.ArgumentParser(
description="Linspector is for monitoring the vital information of hosts, services and devices in a network.",
epilog="linspector is not some program expecting computers to run!",
prog="linspector")
parser.add_argument("action", choices=["start", "stop", "restart", "attach"],
help="defines if linspector should beeing attached, started, stopped or restarted.")
parser.add_argument("--version", action="version", version="%(prog)s "+str(VERSION))
parser.add_argument("-c", "--config", default="./linspector.json",
help="select configfile to use")
parser.add_argument("-l", "--logfile", default="./log/linspector.log", metavar="FILE",
help="set logfile to use")
parser.add_argument("-p", "--pidfile", default="./tmp/linspector.pid", metavar="FILE",
help="set the pidfile to use (default: /tmp/linspector.pid)")
output=parser.add_mutually_exclusive_group()
output.add_argument("-q","--quiet", action="store_const", dest="loglevel", const=logging.ERROR,
help="output only errors")
output.add_argument("-w", "--warning", action="store_const", dest="loglevel", const=logging.WARNING,
help="output warnings")
output.add_argument("-v","--verbose", action="store_const", dest="loglevel", const=logging.INFO,
help="output infos")
output.add_argument("-d", "--debug", action="store_const", dest="loglevel", const=logging.DEBUG,
help="output debug infos")
output.set_defaults(loglevel=logging.INFO)
return parser.parse_args()
def main():
try:
opts, args = getopt.getopt(sys.argv[1:],
"hl:c:p:vVrsS",
["help", "logfile=",
"config=", "pidfile=",
"verbose", "version",
"restart", "start", "stop"])
except getopt.GetoptError, err:
print str(err)
usage()
sys.exit(2)
verbose = False
restart = False
start = False
stop = False
for o, a in opts:
if o in ("-v", "--verbose"):
verbose = True
elif o in ("-V", "--version"):
version()
sys.exit()
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-c", "--config"):
configfile = a
global _configfile
_configfile = a
elif o in ("-l", "--logfile"):
logfile = a
global _logfile
_logfile = a
elif o in ("-p", "--pidfile"):
pidfile = a
global _pidfile
_pidfile = a
elif o in ("-r", "--restart"):
restart = True
elif o in ("-s", "--start"):
start = True
elif o in ("-S", "--stop"):
stop = True
args=parseArgs()
log=Logger(args.logfile , args.loglevel)
log.i("parsed arguments")
if args.action=="start":
log.i("starting linspector: reading config...")
config=Config(args.config, log)
log.d("parsed config: " + str(config))
for hg in config.hostgroups:
log.i(str(hg))
elif args.action=="stop":
log.i("stopping linspector is currently unsupported")
elif args.action=="restart":
sp.call("./linspector stop")
sp.call("./linspector start --config " + args.config + " --logfile " + args.logfile + " --pidfile " + args.pidfile)
elif args.action=="attach":
log.i("attaching linspector is currently unsupported")
log.close()
if start is True or restart is True:
config = Config(_configfile)
#pprint.pprint(str(config.layouts))
#pprint.pprint(str(config.dict["hostgroups"]))
#pprint.pprint(str(config.filters.))
"""
for service in config.services:
pprint.pprint(str(service))
for filter in config.filters:
pprint.pprint(str(filter))
for member in config.members:
pprint.pprint(str(member))
for period in config.periods:
pprint.pprint(str(period))
for host in config.hosts:
pprint.pprint(str(host))
"""
for hostgroup in config.hostgroups:
pprint.pprint(str(hostgroup))
#for layout in config.layouts.layouts:
# pprint.pprint(str(layout
#logger.writeLogToFile(_logfile, "config.layouts.lyouts: " + str([str(i) for i in config.layouts.layouts]))
#logger.writeLogToFile(_logfile, "config.hostgroups: " + config.hostgroups)
#logger.writeLogToFile(_logfile, "config.hosts: " + str([str(i) for i in config.hosts]))
#logger.writeLogToFile(_logfile, "config.services: " + str([str(i) for i in config.services]))
#logger.writeLogToFile(_logfile, "config.members: " + str([str(i) for i in config.members]))
#logger.writeLogToFile(_logfile, "config.periods: " + str([str(i) for i in config.periods]))
#logger.writeLogToFile(_logfile, "config.filters: " + str([str(i) for i in config.filters]))
#logger.writeLogToFile(_logfile, "X:" + config.periods[0])
"""
linspector = LinspectorDaemon(_pidfile)
if start is True:
logger.writeLogToFile(_logfile, "Starting Linspector...")
logger.writeLogToFile(_logfile, "Path: " + str(sys.path[0]))
logger.writeLogToFile(_logfile, "Configfile: " + _configfile)
logger.writeLogToFile(_logfile, "Logfile: " + _logfile)
logger.writeLogToFile(_logfile, "Pidfile: " + _pidfile)
linspector.start()
elif stop is True:
logger.writeLogToFile(_logfile, "Stopping Linspector...")
logger.writeLogToFile(_logfile, "Pidfile: " + _pidfile)
linspector.stop()
logger.writeLogToFile(_logfile, "Terminated!")
elif restart is True:
logger.writeLogToFile(_logfile, "Restarting Linspector...")
logger.writeLogToFile(_logfile, "Path: " + str(sys.path[0]))
logger.writeLogToFile(_logfile, "Configfile: " + _configfile)
logger.writeLogToFile(_logfile, "Logfile: " + _logfile)
logger.writeLogToFile(_logfile, "Pidfile: " + _pidfile)
linspector.restart()
sys.exit(0)
"""
if __name__ == "__main__":
main()