cleaned linspector ,refactored command-line parsing, and fixed the Logger

This commit is contained in:
Rafael.Timmerberg 2013-05-24 02:50:10 +02:00
commit 5b09f02d68
8 changed files with 445 additions and 213 deletions

View file

@ -9,7 +9,7 @@ from hostgroups import parseHostGroupList
class Config:
def __init__(self, configFile):
def __init__(self, configFile, log):
self.configfile = configFile
f = open(configFile)
self.config = f.read()
@ -21,16 +21,16 @@ class Config:
self.filters = parseFilterList(self.dict['filters'])
self.members = parseMemberList(self.dict['members'], self.filters)
self.members = parseMemberList(self.dict['members'], self.filters, log)
self.periods = parsePeriodList(self.dict['periods'])
self.hosts = parseHostList(self.dict['hosts'], self.services)
self.hosts = parseHostList(self.dict['hosts'], self.services, log)
self.hostgroups = parseHostGroupList(self.dict['hostgroups'],
self.hosts,
self.members,
self.periods,
self.services)
self.services, log)
#self.layouts = LayoutList(self.dict['layouts'], self.hostgroups)

View file

@ -35,7 +35,7 @@ class HostGroupService:
return "HostgroupService { " + str(self.service) + ", " + str(self.periods) + "}"
def parseHostGroupList(hostgroups, hosts, members, periods, services):
def parseHostGroupList(hostgroups, hosts, members, periods, services, log):
parsedHostGroups = []
for hgname, hgValues in hostgroups.items():
hostGroup = HostGroup(hgname)
@ -47,8 +47,8 @@ def parseHostGroupList(hostgroups, hosts, members, periods, services):
hostGroup.services = []
for serviceName, servicePeriods in hgValues['services'].items():
service = filter(lambda s: s.name in serviceName, services)
if not service:
print "warning: Service " + serviceName + " is not defined for Hostgroup " + hgname
if len(service) == 0:
log.w("Service " + serviceName + " is not defined for Hostgroup " + hgname)
continue
service = service[0]
hostGroupPeriods = filter(lambda p: p.name in servicePeriods, periods)

View file

@ -41,7 +41,7 @@ class HostService:
return ret;
def parseHostList(hosts, services):
def parseHostList(hosts, services, log):
'''parse the HostList and replace any command as nessesary '''
#precompiled regexPattern which finds replacements in service strings
pattern = re.compile("@(\w+)")
@ -79,7 +79,7 @@ def parseHostList(hosts, services):
#any remainig parm should be a replacement
for parm in params:
if parm not in replacements:
print "warning: undefined parameter: " + parm + " in host " + host.name + " from service " + service.name
log.w("undefined parameter: " + parm + " in host " + host.name + " from service " + service.name)
continue
#replace our ServiceCommand with the parameter_value (search, replacement, string)
hostService.setCommand(re.sub('@' + parm, params[parm], hostService.getCommand()))
@ -91,14 +91,14 @@ def parseHostList(hosts, services):
#replacements should be empty now.
#If not we cannot use this command as some values are missing
if replacements:
print "warning: Hostservice " + servicename + " from host " + host.name + " is ignored because of missing replacements: " + str(
replacements)
log.w("Hostservice " + servicename + " from host " + host.name + " is ignored because of missing replacements: " + str(
replacements))
else:
#anything ok! add to our valid hostServices
hostServices.append(hostService)
#we could't find the service defined in this host. Service ignored!
if not found:
print "warning: Service " + servicename + " not defined in host " + host.name
log.w("Service " + servicename + " not defined in host " + host.name)
#replace host.service member by parsed HostService Objects
host.services = hostServices
return parsedHosts

View file

@ -26,7 +26,7 @@ class MemberFilter:
return "Filter:" + str(self.filter) + " Value:" + self.value
def parseMemberList(members, filters):
def parseMemberList(members, filters, log):
parsedMembers = [Member(nameid, **values) for nameid, values in members.items()]
for member in parsedMembers:
mFilter = []
@ -39,6 +39,6 @@ def parseMemberList(members, filters):
memberFilter.command = re.sub('@member', replacement, filt.command)
mFilter.append(memberFilter)
if not found:
print "warning: filter: " + filtername + " is not defined in member " + member.name
log.w("filter: " + filtername + " is not defined in member " + member.name)
member.filters = mFilter
return parsedMembers

View file

@ -1,40 +1,62 @@
from datetime import datetime
DEBUG = "[debug]"
NOTICE = "[notice]"
WARNING = "[warning]"
import logging
import logging.handlers
import os
import os.path as path
def logVerbose(message, verbose=True):
if verbose:
print DEBUG + " " + str(message)
class Logger():
"""Logger class that prints its messages and keeps them also inside a logfile"""
def __init__(self, logfile="./linspector.log", logLevel=logging.DEBUG, logfileLevel=logging.DEBUG):
"""
initializes a new Logger object.
params:
logLevel the LoggingLevel from the console output (DEBUG default)
logfile the file where to log. Logs are rotated by default.
logfileLevel the LoggingLevel for the file Logger. (DEBUG default)
"""
logfile = path.expanduser(logfile)
if not path.exists(path.dirname(logfile)):
os.makedirs(path.dirname(logfile))
self.log = logging.getLogger("LinspectorLogger")
self.log.setLevel(logging.DEBUG)
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logLevel)
fileHandler = logging.handlers.RotatingFileHandler(logfile, maxBytes=1024000, backupCount=4)
fileHandler.setLevel(logfileLevel)
consoleFormatter = logging.Formatter('[%(levelname)s]: %(message)s')
fileFormatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s')
consoleHandler.setFormatter(consoleFormatter)
fileHandler.setFormatter(fileFormatter)
self.log.addHandler(consoleHandler)
self.log.addHandler(fileHandler)
def d(self, message):
self.log.debug(message)
def i(self, message):
self.log.info(message)
def w(self, message):
self.log.warn(message)
def e(self, message):
self.log.error(message)
def c(self, message):
self.log.critical(message)
self.log.critical(message)
def close(self):
logging.shutdown()
def logNotice(message, verbose=True):
if verbose:
print NOTICE + " " + str(message)
def logWarning(message):
print WARNING + " " + message
def logWarningConfig(thefile="file", missing="missing"):
logWarning("in " + thefile + ": The " + missing + " is not defined")
def writeLogToFile(logfile, message):
f = open(logfile, 'a')
f.write("[" + str(datetime.now()) + "] " + message + '\n')
f.close()
class Logger:
def __init__(self, logfile="/dev/null"):
self.logfile = logfile
def logSomething(self, message, verbose=False):
f = open(self.logfile, 'a')
f.write("[" + str(datetime.now()) + "] " + message + '\n')
f.close()