diff --git a/lib/config/periods.py b/lib/config/periods.py index 35ac29a..76ddd55 100644 --- a/lib/config/periods.py +++ b/lib/config/periods.py @@ -71,23 +71,24 @@ class DatePeriod(Period): def parsePeriodList(periodlist, log): periods = [] - log.i(periodlist) + #log.d("values of periodslist: " + str(periodlist.items())) for name, values in periodlist.items(): + if "date" in values: periods.append(DatePeriod(name, **values)) continue - 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)) + comp = ["weeks", "days", "hours", "minutes", "seconds", "start_date"] + if len([i for i in comp if i in values]) > 0 : + periods.append(IntervalPeriod(name, **values)) + break + + comp = ["year", "month", "day", "week", "day_of_week", "hour", "minute", "second"] + if len([i for i in comp if i in values]) > 0 : + periods.append(CronPeriod(name, **values)) + break + else: + log.w("ignoring Period: " + str(name)) + log.w("reason: could not determine PeriodType: " + str(values)) - return periods \ No newline at end of file + return periods diff --git a/lib/core/command.py b/lib/core/command.py index 315af10..74c1b09 100644 --- a/lib/core/command.py +++ b/lib/core/command.py @@ -1,28 +1,40 @@ -import subprocess - +import subprocess as sp +from subprocess import CalledProcessError +from datetime import datetime as dt class Command: def __init__(self, command): self.command = command self.output = "" self.error = "" + self.retcode = 0 + self.commandStart=0 def __str__(self): return self.command - def hasProcessed(self): - return self.output != "" and self.error != "" - - def doProcess(self): - process = subprocess.Popen([self.command], stdout=subprocess.PIPE) + def call(self): + ''' + self.commandStart = dt.now() + "called at: " + process = sp.Popen(stdout=PIPE, *popenargs, **kwargs) self.output, self.error = process.communicate() - + self.retcode = process.poll() + ''' + try: + print self.command + self.output=sp.check_output(self.command.split(),stderr=sp.STDOUT) + + except CalledProcessError: + self.error=CalledProcessError.output + self.retcode = CalledProcessError.returncode + def getOutput(self): - if not self.hasProcessed(): - self.doProcess() return self.output def getError(self): - if not self.hasProcessed(): - self.doProcess() - return self.error \ No newline at end of file + return self.error + + def getReturnCode(self): + return self.retcode + diff --git a/lib/core/job.py b/lib/core/job.py index c09628d..4c5d446 100644 --- a/lib/core/job.py +++ b/lib/core/job.py @@ -3,7 +3,7 @@ This is what job_function needs as parameter for each job to successfully execute. """ -import subprocess +from command import Command class JobInfo: @@ -14,6 +14,7 @@ class JobInfo: self.threshold = threshold self.parent = parent self.name = hostgroupname + "_" + service.name + self.jobs = [] def __str__(self): return self.name @@ -21,8 +22,21 @@ class JobInfo: def setLogger(self, log): self.log = log + def appendJob(self, job): + self.jobs.append(job) + + def getNextExecutionTime(self): + nextExecution = None + for job in self.jobs: + jobExec = job.trigger.get_next_fire_time() + if nextExecution is None or nextExecution > jobExec: + nextExecution = jobExec + return nextExecution + def handleCall(self): - #p = subprocess.Popen("df -h", stdout=subprocess.PIPE, shell=True) - #(output, err) = p.communicate() - #print output - pass \ No newline at end of file + print "calling command " + str(service.command) + cmd = Command(service.command) + self.log.d("executing command: " + str(command)) + cmd.call() + return cmd + diff --git a/linspector b/linspector index 85edd29..44a79dd 100755 --- a/linspector +++ b/linspector @@ -42,8 +42,11 @@ def parseArgs(): def handleJob(jobInfo): - jobInfo.handleCall() + print "handlejobInfo" print str(jobInfo) + print "executing: " + str(jobInfo.service.command) + jobInfo.handleCall() + def main(): @@ -90,4 +93,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/linspector.json b/linspector.json index 8b59d5b..f8525da 100644 --- a/linspector.json +++ b/linspector.json @@ -213,9 +213,7 @@ "threshold": 10, "services": { - "load": ["twentyfourseven"], - "discusage":["twentyfourseven"], - "ping": ["do_every_x_times"] + "ping": ["do_every_x_times"] } } },