added yaml support

This commit is contained in:
Rafael.Timmerberg 2013-10-19 00:55:24 +02:00
commit 16a5a09bf5
4 changed files with 28 additions and 19 deletions

2
.gitignore vendored
View file

@ -17,3 +17,5 @@ plugins
.metadata .metadata
examples/private.json examples/private.json
examples/private.yaml
examples/private.yml

View file

@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from os.path import isfile from os.path import isfile
from os.path import join from os.path import join
import json
import imp import imp
from layouts import Layout from layouts import Layout
@ -92,7 +91,16 @@ class ConfigParser:
config = cfgFile.read() config = cfgFile.read()
self.log.info("reading Config: " + configFilename) self.log.info("reading Config: " + configFilename)
if self.configFilename.endswith(".yaml") or configFilename.endswith("yml"):
import yaml
return yaml.load(config)
elif configFilename.endswith(".json"):
import json
return json.loads(config) return json.loads(config)
else:
print "could not determine config format. Only json and yaml are supported for now"
exit(2)
def _create_raw_Object(self, jsonDict, msgName, creator): def _create_raw_Object(self, jsonDict, msgName, creator):
""" """
@ -220,21 +228,23 @@ class FullConfigParser(ConfigParser):
:param configFilename: the configuration file to parse :param configFilename: the configuration file to parse
""" """
self.jsonDict = self._read_json_config(configFilename)
self.dict = self._read_json_config(configFilename)
# first step # first step
creator = lambda name, values: Layout(name,**values) creator = lambda name, values: Layout(name, **values)
layouts = self._create_raw_Object(self.jsonDict[KEY_LAYOUTS], "Layout", creator) layouts = self._create_raw_Object(self.dict[KEY_LAYOUTS], "Layout", creator)
creator = lambda name, values: Member(name, **values) creator = lambda name, values: Member(name, **values)
members = self._create_raw_Object(self.jsonDict[KEY_MEMBERS], "Member", creator) members = self._create_raw_Object(self.dict[KEY_MEMBERS], "Member", creator)
creator = lambda name, values: HostGroup(name, **values) creator = lambda name, values: HostGroup(name, **values)
self.hostgroups = self._create_raw_Object(self.jsonDict[KEY_HOSTGROUPS], "Hostgroup", creator) self.hostgroups = self._create_raw_Object(self.dict[KEY_HOSTGROUPS], "Hostgroup", creator)
creator = parsePeriodList creator = parsePeriodList
periods = self._create_raw_Object(self.jsonDict[KEY_PERIODS], "Period", creator) periods = self._create_raw_Object(self.dict[KEY_PERIODS], "Period", creator)
#2. import and replace #2. import and replace
items_func = lambda hostgroup: hostgroup.get_services() items_func = lambda hostgroup: hostgroup.get_services()
@ -280,7 +290,7 @@ class FullConfigParser(ConfigParser):
for service in hg.get_services(): for service in hg.get_services():
service.set_hostgroup(hg) service.set_hostgroup(hg)
core = None core = None
if "core" in self.jsonDict: if "core" in self.dict:
core = self.jsonDict["core"] core = self.dict["core"]
return linConf, core return linConf, core

View file

@ -71,6 +71,10 @@ class Job:
def set_job(self, job): def set_job(self, job):
self.job = job self.job = job
def set_enabled(self, enabled=True):
self._enabled = enabled
def handle_threshold(self, jobInfo, serviceThreshold, executionSucessful): def handle_threshold(self, jobInfo, serviceThreshold, executionSucessful):
if executionSucessful: if executionSucessful:
if self.jobThreshold > 0: if self.jobThreshold > 0:
@ -91,7 +95,7 @@ class Job:
self.handle_alarm(jobInfo, self.jobThreshold - serviceThreshold) self.handle_alarm(jobInfo, self.jobThreshold - serviceThreshold)
def handle_alarm(self, jobInfo, thresholdOffset): def handle_alarm(self, jobInfo, thresholdOffset):
for member in self.service.get_hostgroup().get_members(): for member in self.members:
#TODO: Put Tasks in a run queue and execute them in a background thread. FIFO! Reduces delay in core. #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(): for task in member.get_tasks():
task.execute(jobInfo.get_message(), self.core) task.execute(jobInfo.get_message(), self.core)
@ -116,11 +120,7 @@ class Job:
else: else:
self.log.debug("Job " + self.hex_string() + " disabled") self.log.debug("Job " + self.hex_string() + " disabled")
def enable(self):
self._enabled = True
def disable(self):
self._enabled = False
class JobInfo(object): class JobInfo(object):

View file

@ -200,10 +200,7 @@ class LishCommander(Exit, ShellCommander, LogCommander):
cmd = text[1] cmd = text[1]
if cmd in ["enable", "disable"]: if cmd in ["enable", "disable"]:
if "n" in cmd: job.set_enabled("n" in cmd)
job.enable()
else:
job.disable()
else: else:
print "invalid or missing parameter\n" print "invalid or missing parameter\n"
self.help_job() self.help_job()