changed task parsing and handling
This commit is contained in:
parent
4be1a6ecb9
commit
a670770dde
7 changed files with 82 additions and 73 deletions
|
|
@ -30,6 +30,7 @@ class LinspectorConfig(object):
|
|||
self._hostgroups = None
|
||||
self._members = None
|
||||
self._periods = None
|
||||
self._tasks = None
|
||||
|
||||
def set_hostgroups(self, hostgroups):
|
||||
self._hostgroups = hostgroups
|
||||
|
|
@ -74,4 +75,10 @@ class LinspectorConfig(object):
|
|||
return self._get_by_name(self.get_members(), name)
|
||||
|
||||
def get_period_by_name(self, name):
|
||||
return self._get_by_name(self.get_periods(), name)
|
||||
return self._get_by_name(self.get_periods(), name)
|
||||
|
||||
def set_task_list(self, taskList):
|
||||
self.taskList = taskList
|
||||
|
||||
def get_task_list(self):
|
||||
return self.taskList
|
||||
|
|
@ -32,7 +32,7 @@ from periods import CronPeriod, DatePeriod, IntervalPeriod
|
|||
from linspector.services.service import Service
|
||||
from linspector.processors.processor import Processor
|
||||
from linspector.parsers.parser import Parser
|
||||
from linspector.tasks.task import Task
|
||||
from linspector.tasks.TaskList import TaskList
|
||||
|
||||
MOD_SERVICES = "services"
|
||||
MOD_PROCESSORS = "processors"
|
||||
|
|
@ -44,6 +44,7 @@ KEY_HOSTGROUPS = "hostgroups"
|
|||
KEY_MEMBERS = "members"
|
||||
KEY_PERIODS = "periods"
|
||||
KEY_CORE = "core"
|
||||
KEY_TASKS = "tasks"
|
||||
|
||||
logger = getLogger(__name__)
|
||||
|
||||
|
|
@ -69,7 +70,7 @@ class ConfigParser:
|
|||
self._loadedMods = {MOD_SERVICES: {}, MOD_PROCESSORS: {}, MOD_TASKS: {}, MOD_PARSERS: {}}
|
||||
|
||||
def _create_new_config_dict(self):
|
||||
return {"members": {}, "periods": {}, "hostgroups": {}, "layouts": {}, "core": {}}
|
||||
return {"members": {}, "periods": {}, "hostgroups": {}, "layouts": {}, "core": {}, "tasks": {}}
|
||||
|
||||
def create_config(self, config):
|
||||
configDict = self._create_new_config_dict()
|
||||
|
|
@ -217,6 +218,9 @@ def parsePeriodList(name, values):
|
|||
|
||||
|
||||
class FullConfigParser(ConfigParser):
|
||||
|
||||
|
||||
|
||||
def parse_config(self, configFilename):
|
||||
"""
|
||||
parses the json configuration and returns a list of layouts,
|
||||
|
|
@ -232,7 +236,7 @@ class FullConfigParser(ConfigParser):
|
|||
|
||||
self.dict = self._read_config_file(configFilename)
|
||||
|
||||
# first step
|
||||
#1.
|
||||
creator = lambda name, values: Layout(name, **values)
|
||||
layouts = self._create_raw_Object(self.dict[KEY_LAYOUTS], "Layout", creator)
|
||||
|
||||
|
|
@ -245,6 +249,12 @@ class FullConfigParser(ConfigParser):
|
|||
creator = parsePeriodList
|
||||
periods = self._create_raw_Object(self.dict[KEY_PERIODS], "Period", creator)
|
||||
|
||||
#1.1 get Tasks
|
||||
creator = lambda name, values: self._load_module(name, MOD_TASKS).create(values).set_task_type(name)
|
||||
tasks = self._create_raw_Object(self.dict[KEY_TASKS], "Task", creator)
|
||||
taskList = TaskList(tasks)
|
||||
|
||||
|
||||
#2. import and replace
|
||||
items_func = lambda hostgroup: hostgroup.get_services()
|
||||
class_check = lambda service: isinstance(service, Service)
|
||||
|
|
@ -254,9 +264,9 @@ class FullConfigParser(ConfigParser):
|
|||
class_check = lambda processor: isinstance(processor, Processor)
|
||||
self.replace_with_import(self.hostgroups, MOD_PROCESSORS, items_func, class_check)
|
||||
|
||||
items_func = lambda member: member.get_tasks()
|
||||
class_check = lambda task: isinstance(task, Task)
|
||||
self.replace_with_import(members, MOD_TASKS, items_func, class_check)
|
||||
#items_func = lambda member: member.get_tasks()
|
||||
#class_check = lambda task: isinstance(task, Task)
|
||||
#self.replace_with_import(members, MOD_TASKS, items_func, class_check)
|
||||
|
||||
services = []
|
||||
for hg in self.hostgroups:
|
||||
|
|
@ -284,6 +294,8 @@ class FullConfigParser(ConfigParser):
|
|||
linConf.set_hostgroups(self.hostgroups)
|
||||
linConf.set_members(members)
|
||||
linConf.set_periods(periods)
|
||||
linConf.set_task_list(taskList)
|
||||
|
||||
|
||||
for hg in self.hostgroups:
|
||||
for service in hg.get_services():
|
||||
|
|
|
|||
|
|
@ -35,12 +35,13 @@ def generateId():
|
|||
|
||||
|
||||
class Job:
|
||||
def __init__(self, service, host, members, processors, core, hostgroup):
|
||||
def __init__(self, service, host, members, processors, core, taskList, hostgroup):
|
||||
self.service = service
|
||||
self.host = host
|
||||
self.members = members
|
||||
self.processors = processors
|
||||
self.core = core
|
||||
self.taskList = taskList
|
||||
self.hostgroup = hostgroup
|
||||
#TODO: limit the size of this list; else it is a memory leak
|
||||
self.jobInfos = []
|
||||
|
|
@ -90,9 +91,8 @@ class Job:
|
|||
|
||||
def handle_alarm(self, jobInfo, thresholdOffset):
|
||||
for member in self.members:
|
||||
#TODO: Put Tasks in a run queue and execute them in a background thread. FIFO! Reduces delay in core.
|
||||
for task in member.get_tasks():
|
||||
task.execute(jobInfo.get_message(), self.core)
|
||||
self.taskList.execute_task_infos(jobInfo.get_message(), member.get_tasks())
|
||||
|
||||
|
||||
def handle_call(self):
|
||||
logger.debug("handle call")
|
||||
|
|
|
|||
|
|
@ -51,17 +51,20 @@ class MailTask(Task):
|
|||
#self.set_task_type(kwargs["type"])
|
||||
#self.recipient = kwargs["args"]["rcpt"]
|
||||
|
||||
def execute(self, msg, core):
|
||||
def execute(self, msg, taskArgs):
|
||||
if "recipient" not in taskArgs:
|
||||
raise "could not execute Mail Task! No recipient given!"
|
||||
|
||||
message = MIMEText(msg)
|
||||
message['Subject'] = msg
|
||||
now = datetime.datetime.now()
|
||||
message['Date'] = now.strftime("%a, %d %b %Y %H:%M:%S")
|
||||
#TODO: totally unstable just to use values from core. make checks before...!
|
||||
message['From'] = self.fromName
|
||||
message['To'] = self.recipient
|
||||
message['To'] = taskArgs["recipient"]
|
||||
s = smtplib.SMTP(self.host, self.port)
|
||||
s.login(self.userName, self.password)
|
||||
s.sendmail(self.fromName, self.recipient, message.as_string())
|
||||
s.sendmail(self.fromName, taskArgs["recipient"], message.as_string())
|
||||
s.quit()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -30,9 +30,10 @@ class Task:
|
|||
|
||||
def set_task_type(self, taskType):
|
||||
self._taskType = taskType
|
||||
return self
|
||||
|
||||
def get_task_type(self):
|
||||
return self._taskType
|
||||
|
||||
def execute(self, msg):
|
||||
def execute(self, msg, args):
|
||||
pass
|
||||
Loading…
Add table
Add a link
Reference in a new issue