Package Products :: Package ZenReports :: Module ReportRunner |
[hide private]
[frames] | no frames]

# Source Code for Module Products.ZenReports.ReportRunner

      1  #!/usr/bin/env python
      2  ###########################################################################
      3  #
      4  # This program is part of Zenoss Core, an open source monitoring platform.
      5  # Copyright (C) 2007, 2011 Zenoss Inc.
      6  #
      7  # This program is free software; you can redistribute it and/or modify it
      8  # under the terms of the GNU General Public License version 2 or (at your
      9  # option) any later version as published by the Free Software Foundation.
     10  #
     11  # For complete information please visit: http://www.zenoss.com/oss/
     12  #
     13  ###########################################################################
     14
     15  __doc__ = """ReportRunner
     16  Run a report plugin and display the output
     17  """
     18
     19  from pprint import pprint
     20  import csv
     21  from sys import stdout
     22
     23  import Globals
     24  from Products.ZenUtils.ZCmdBase import ZCmdBase
     25
     26 -class ReportRunner(ZCmdBase):
     27
     28 -    def main(self):
     29          if self.options.list:
     30              plugins = self.dmd.ReportServer.listPlugins()
     31              pprint(sorted(plugins))
     32              return
     33
     34          plugin =  self.args[0]
     35          args = {}
     36          for a in self.args[1:]:
     37              if a.find('=') > -1:
     38                  key, value = a.split('=', 1)
     39                  args[key] = value
     40
     41          self.log.debug("Running '%s' with %r", plugin, args)
     42          result = self.dmd.ReportServer.plugin(plugin, args)
     43          if not result:
     44              self.log.warn("No results returned from plugin.")
     45              return
     46
     47          if self.options.export == 'csv':
     48              self.writeCsv(result)
     49          else:
     50              if self.options.export_file:
     51                  fh = open(self.options.export_file, 'w')
     52              else:
     53                  fh = stdout
     54              pprint(result, stream=fh)
     55              if fh is not stdout:
     56                  fh.close()
     57
     58 -    def writeCsv(self, results):
     59          """
     60          Write the CSV output to standard output.
     61          """
     62          if self.options.export_file:
     63              fh = open(self.options.export_file, 'w')
     64          else:
     65              fh = stdout
     66
     67          sampleRow = results[0]
     68          fieldnames = sorted(sampleRow.values.keys())
     69
     70          # Write a header line that DictReader can import
     71          fh.write(','.join(fieldnames) + '\n')
     72          writer = csv.DictWriter(fh, fieldnames,
     73                                  quoting=csv.QUOTE_NONNUMERIC,
     74                                  lineterminator='\n')
     75          for line in results:
     76              writer.writerow(line.values)
     77
     78          if fh is not stdout:
     79              fh.close()
     80
     81 -    def buildOptions(self):
     82          ZCmdBase.buildOptions(self)
     83          self.parser.usage = "%prog [options] report_plugin [report_paramater=value]*"
     84          self.parser.remove_option('--daemon')
     85          self.parser.remove_option('--cycle')
     86          self.parser.remove_option('--watchdog')
     87          self.parser.remove_option('--watchdogPath')
     88          self.parser.remove_option('--socketOption')
     89          self.parser.add_option("--list",
     90                                 action="store_true",
     91                                 default=False,
     92                                 help="Show full names of all plugins to run. If the plugin" \
     93                                      " name is unique, just the name may be used." )
     94          self.parser.add_option("--export",
     95                                 default='python',
     96                                 help="Export the values as 'python' (default) or 'csv'")
     97          self.parser.add_option("--export_file",
     98                                 default='',
     99                                 help="Optional filename to store the output")
    100
    101
    102  if __name__ == '__main__':
    103      rr = ReportRunner()
    104      rr.main()
    105