1
2
3
4
5
6
7
8
9
10
11
12 __doc__ = """ReportRunner
13 Run a report plugin and display the output
14 """
15
16 from pprint import pprint
17 import csv
18 from sys import stdout
19
20 import Globals
21 from Products.ZenUtils.ZCmdBase import ZCmdBase
22
24
26 if self.options.list:
27 plugins = self.dmd.ReportServer.listPlugins()
28 pprint(sorted(plugins))
29 return
30
31 plugin = self.args[0]
32 args = {}
33 for a in self.args[1:]:
34 if a.find('=') > -1:
35 key, value = a.split('=', 1)
36 args[key] = value
37
38 self.log.debug("Running '%s' with %r", plugin, args)
39 result = self.dmd.ReportServer.plugin(plugin, args)
40 if not result:
41 self.log.warn("No results returned from plugin.")
42 return
43
44 if self.options.export == 'csv':
45 self.writeCsv(result)
46 else:
47 if self.options.export_file:
48 fh = open(self.options.export_file, 'w')
49 else:
50 fh = stdout
51 pprint(result, stream=fh)
52 if fh is not stdout:
53 fh.close()
54
56 """
57 Write the CSV output to standard output.
58 """
59 if self.options.export_file:
60 fh = open(self.options.export_file, 'w')
61 else:
62 fh = stdout
63
64 sampleRow = results[0]
65 fieldnames = sorted(sampleRow.values.keys())
66
67
68 fh.write(','.join(fieldnames) + '\n')
69 writer = csv.DictWriter(fh, fieldnames,
70 quoting=csv.QUOTE_NONNUMERIC,
71 lineterminator='\n')
72 for line in results:
73 writer.writerow(line.values)
74
75 if fh is not stdout:
76 fh.close()
77
79 ZCmdBase.buildOptions(self)
80 self.parser.usage = "%prog [options] report_plugin [report_paramater=value]*"
81 self.parser.remove_option('--daemon')
82 self.parser.remove_option('--cycle')
83 self.parser.remove_option('--watchdog')
84 self.parser.remove_option('--watchdogPath')
85 self.parser.remove_option('--socketOption')
86 self.parser.add_option("--list",
87 action="store_true",
88 default=False,
89 help="Show full names of all plugins to run. If the plugin" \
90 " name is unique, just the name may be used." )
91 self.parser.add_option("--export",
92 default='python',
93 help="Export the values as 'python' (default) or 'csv'")
94 self.parser.add_option("--export_file",
95 default='',
96 help="Optional filename to store the output")
97
98
99 if __name__ == '__main__':
100 rr = ReportRunner()
101 rr.main()
102