1 import re
2
3
5 - def __init__(self, name="", host="", parent="", services=None, comment=""):
6 self.name = name
7 self.host = host
8 self.parent = parent
9 self.services = services
10 self.comment = comment
11
13 ret = "Host('Name: " + self.name + "', 'access: " + self.host + "', "
14 if self.parent != "":
15 ret += "'parent: " + self.parent + "', "
16 ret += "'HostServices: {"
17 for s in self.services:
18 ret += str(s) + "\n"
19 ret += "}"
20 return ret
21
22
24 - def __init__(self, service, warning="", critical=""):
25 self.service = service
26 self.warning = warning
27 self.critical = critical
28
31
34
36 ret = str(self.service)
37 if self.warning:
38 ret += "warning: " + str(self.warning)
39 if self.critical:
40 ret += "critical: " + str(self.critical)
41 return ret;
42
43
45 """
46 parse the HostList and replace any command as nessesary
47 """
48
49 pattern = re.compile("@(\w+)")
50
51 parsedHosts = [Host(name, **values) for name, values in hosts.items()]
52
53 serviceReplacements = {}
54 for host in parsedHosts:
55
56 hostServices = []
57
58 for servicename, serviceParams in host.services.items():
59
60 found = False
61
62 for service in services:
63 if service.name != servicename:
64 continue
65
66 found = True
67
68 if service.name not in serviceReplacements:
69 serviceReplacements[service.name] = pattern.findall(service.command)
70 for params in serviceParams:
71
72 replacements = serviceReplacements[service.name][:]
73
74 hostService = HostService(service.clone())
75
76 if 'warning' in params:
77 hostService.warning = params['warning']
78 del params['warning']
79 if 'critical' in params:
80 hostService.critical = params['critical']
81 del params['critical']
82
83 for parm in params:
84 if parm not in replacements:
85 log.w("undefined parameter: " + parm + " in host " + host.name + " from service " + service.name)
86 continue
87
88 hostService.setCommand(re.sub('@' + parm, params[parm], hostService.getCommand()))
89 replacements.remove(parm)
90
91 if 'host' in replacements:
92 hostService.setCommand(re.sub('@host', host.host, hostService.getCommand()))
93 replacements.remove('host')
94
95
96 if replacements:
97 log.w("Hostservice " + servicename + " from host " + host.name + " is ignored because of missing replacements: " + str(
98 replacements))
99 else:
100
101 hostServices.append(hostService)
102
103 if not found:
104 log.w("Service " + servicename + " not defined in host " + host.name)
105
106 host.services = hostServices
107 return parsedHosts
108