added job handling
This commit is contained in:
parent
a6fa48f87c
commit
da13073648
4 changed files with 115 additions and 12 deletions
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
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(periods):
|
|
||||||
return [Period(name, **values) for name, values in periods.items()]
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
20
linspector
20
linspector
|
|
@ -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":
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue