cleaned linspector ,refactored command-line parsing, and fixed the Logger
This commit is contained in:
parent
c608131174
commit
5b09f02d68
8 changed files with 445 additions and 213 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue