1
2
3
4
5
6
7
8
9
10
11 import re
12
13 CacParser = re.compile(r"""([^ :']+|'(.*)'+)\s*:\s*([-+]?[-0-9.]+(?:[Ee][-+]?\d+)?)""")
14
15 from Products.ZenUtils.Utils import getExitMessage
16 from Products.ZenRRD.CommandParser import CommandParser
17
18 -class Cacti(CommandParser):
19
21 output = cmd.result.output
22 output = output.split('\n')[0].strip()
23 exitCode = cmd.result.exitCode
24 severity = cmd.severity
25 if output.find('|') >= 0:
26 msg, values = output.split('|', 1)
27 msg, values = output, ''
28
29 elif CacParser.search(output):
30 msg, values = '', output
31
32 elif len(cmd.points) == 1:
33
34 try:
35 number = float(output)
36 result.values.append( (cmd.points[0], number) )
37 msg, values = '', output
38 except:
39 msg, values = output, ''
40
41 else:
42 msg, values = output, ''
43
44 msg = msg.strip() or 'Datasource: %s - Code: %s - Msg: %s' % (
45 cmd.name, exitCode, getExitMessage(exitCode))
46 if exitCode != 0:
47 if exitCode == 2:
48 severity = min(severity + 1, 5)
49 result.events.append(dict(device=cmd.deviceConfig.device,
50 summary=msg,
51 severity=severity,
52 message=msg,
53 performanceData=values,
54 eventKey=cmd.eventKey,
55 eventClass=cmd.eventClass,
56 component=cmd.component))
57
58 for parts in CacParser.findall(values):
59 label = parts[0].replace("''", "'")
60 try:
61 value = float(parts[2])
62 except Exception:
63 value = 'U'
64 for dp in cmd.points:
65 if dp.id == label:
66 result.values.append( (dp, value) )
67 break
68