added job handling

This commit is contained in:
Rafael.Timmerberg 2013-05-27 01:44:28 +02:00
commit b8d2a3535a
4 changed files with 115 additions and 12 deletions

View file

@ -23,7 +23,7 @@ class Config:
self.members = parseMemberList(self.dict['members'], self.filters, log) self.members = parseMemberList(self.dict['members'], self.filters, log)
self.periods = parsePeriodList(self.dict['periods']) self.periods = parsePeriodList(self.dict['periods'],log)
self.hosts = parseHostList(self.dict['hosts'], self.services, log) self.hosts = parseHostList(self.dict['hosts'], self.services, log)

View file

@ -1,8 +1,44 @@
class Period: from apscheduler.scheduler import Scheduler
def __init__(self, name="", year="*", month="*", day="*", week="*",
day_of_week=None, hour="*", minute="*", second="0", date=None,
comment=None): class Period(object):
def __init__(self, name):
self.name = name self.name = name
def getName(self):
return self.name
def createJob(self, scheduler, jobInfo, func):
pass
class IntervalPeriod(Period):
def __init__(self, name="", weeks=0,days=0, hours=0, minutes=0, seconds=0, start_date=None,
comment=None):
super(IntervalPeriod, self).__init__(name)
self.days = days # number of days to wait
self.weeks = weeks # number of weeks to wait
self.hours = hours # number of hours to wait
self.minutes = minutes # number of minutes to wait
self.seconds = seconds # number of seconds to wait
self.start_date = start_date # when to first execute
self.comment = comment # comment
def createJob(self, scheduler, jobInfo, func):
return scheduler.add_interval_job(func, self.weeks, self.hours, self.minutes, self.seconds, self.start_date, jobInfo)
def __str__(self):
ret = "IntervalPeriod(Name: " + self.name + ")"
return ret
class CronPeriod(Period):
def __init__(self, name="", year="*", month="*", day="*", week="*",
day_of_week="*", hour="*", minute="*", second="0",
comment=None):
super(CronPeriod, self).__init__(name)
self.year = year # 4-digit year number self.year = year # 4-digit year number
self.month = month # month number (1-12) self.month = month # month number (1-12)
self.day = day # day of the month (1-31) self.day = day # day of the month (1-31)
@ -15,10 +51,50 @@ class Period:
self.date = date self.date = date
def __str__(self): def __str__(self):
ret = "Period(Name: " + self.name + " Year: " + self.year + " Month: " + self.month + ")" ret = "CronPeriod(Name: " + self.name + ")"
return ret return ret
def createJob(self, scheduler, jobInfo, func):
return scheduler.add_cron_job(func, self.year, self.month, self.day, self.week, self.day_of_week, self.hour, self.minute, self.second, jobInfo)
def parsePeriodList(periods):
return [Period(name, **values) for name, values in periods.items()] class DatePeriod(Period):
def __init__(self, name, date, comment=None):
super(DatePeriod, self).__init__(name)
self.date = date
self.comment = comment
def __str__(self):
ret = "DatePeriod(Name: " + self.name + ","+ str(self.date) + ")"
return ret
def createJob(self, scheduler, jobInfo, func):
return scheduler.add_date_job(func, self.date, jobInfo)
def parsePeriodList(periodlist,log):
periods=[]
for name, values in periodlist.items():
if "date" in values:
periods.append(DatePeriod(name, **values))
break
for i in [ "weeks","days", "hours", "minutes", "seconds", "start_date"]:
if i in values:
periods.append(IntervalPeriod(name, **values))
break
for i in ["year", "month", "day", "week", "day_of_week", "hour", "minute", "second"]:
if i in values:
periods.append(CronPeriod(name, **values))
break
log.w("ignoring Period: " +str(name))
log.w("reason: could not determine PeriodType: " + str(values))
return periods

View file

@ -4,9 +4,18 @@ execute.
""" """
class Job: class JobInfo:
def __init__(self, command=None, members=None, host=None, service=None): def __init__(self, hostgroupname, members, hosts, service, threshold, parent=None):
self.command = command
self.members = members self.members = members
self.host = host self.hosts = hosts
self.service = service self.service = service
self.threshold = threshold
self.parent = parent
self.name = hostgroupname + service.name
def __str__(self):
return self.name

View file

@ -2,8 +2,10 @@
VERSION = "0.1.1/TETRIS" VERSION = "0.1.1/TETRIS"
import argparse import argparse
from lib.core.job import JobInfo
from lib.core.logger import Logger from lib.core.logger import Logger
from lib.config.config import Config from lib.config.config import Config
from lib.config.periods import Period
from apscheduler.scheduler import Scheduler from apscheduler.scheduler import Scheduler
import logging import logging
import subprocess as sp import subprocess as sp
@ -38,6 +40,9 @@ def parseArgs():
return parser.parse_args() return parser.parse_args()
def handleJob(jobInfo):
print str(jobInfo)
def main(): def main():
args = parseArgs() args = parseArgs()
log = Logger(args.logfile, args.loglevel) log = Logger(args.logfile, args.loglevel)
@ -45,11 +50,24 @@ def main():
log.i("parsed arguments") log.i("parsed arguments")
if args.action == "start": if args.action == "start":
jobs = []
scheduler = Scheduler()
scheduler.start()
log.i("starting linspector: reading config... (" + args.config + ")") log.i("starting linspector: reading config... (" + args.config + ")")
config = Config(args.config, log) config = Config(args.config, log)
log.d("parsed config: " + str(config)) log.d("parsed config: " + str(config))
for hg in config.hostgroups: for hg in config.hostgroups:
log.i(str(hg)) for hostGroupService in hg.services:
job=JobInfo(hg.name, hg.members, hg.hosts, hostGroupService.service, hg.threshold, hg.parent)
for period in hostGroupService.periods:
jobs.append(period.createJob(scheduler, jobInfo, handleJob))
for job in jobs:
log.i(str(job))
elif args.action == "stop": elif args.action == "stop":
log.i("stopping linspector is currently unsupported") log.i("stopping linspector is currently unsupported")
elif args.action == "restart": elif args.action == "restart":