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

# Source Code for Module Products.ZenReports.ReportServer

     1  ###########################################################################
     2  #
     3  # This program is part of Zenoss Core, an open source monitoring platform.
     4  # Copyright (C) 2007, Zenoss Inc.
     5  #
     6  # This program is free software; you can redistribute it and/or modify it
     7  # under the terms of the GNU General Public License version 2 as published by
     8  # the Free Software Foundation.
     9  #
    10  # For complete information please visit: http://www.zenoss.com/oss/
    11  #
    12  ###########################################################################
    13  __doc__="""ReportServer
    14
    15  A front end to all the report plugins.
    16
    17  $Id: $"""
    18
    19  __version__ = "$Revision: $"[11:-2]
    20
    21  from Globals import InitializeClass
    22
    23  from AccessControl import ClassSecurityInfo
    24
    25  from Products.ZenModel.ZenModelRM import ZenModelRM
    26  from Products.ZenUtils.Utils import importClass, zenPath
    27  from Products.ZenModel.ZenossSecurity import *
    28
    29  import os
    30  import sys
    31
    32 -class ReportServer(ZenModelRM):
    33      security = ClassSecurityInfo()
    34      security.setDefaultAccess('allow')
    35
    36      security.declareProtected(ZEN_COMMON, 'plugin')
    37 -    def plugin(self, name, REQUEST, templateArgs = None):
    38          "Run a plugin to generate the report object"
    39          dmd = self.dmd
    40          args = dict(zip(REQUEST.keys(), REQUEST.values()))
    41
    42          # We don't want the response object getting passed to the plugin
    43          # because if it is stringified, it can modify the return code
    44          # and cause problems upstream.
    45          if 'RESPONSE' in args:
    46              del args['RESPONSE']
    47
    48          m = zenPath('Products/ZenReports/plugins')
    49          directories = [
    50              p.path('reports', 'plugins') for p in self.ZenPackManager.packs()
    51              ] + [m]
    52
    53          klass = None
    54          for d in directories:
    55              if os.path.exists('%s/%s.py' % (d, name)):
    56                  try:
    57                      sys.path.insert(0, d)
    58                      klass = importClass(name)
    59                      break
    60                  finally:
    61                      sys.path.remove(d)
    62          if not klass:
    63              raise IOError('Unable to find plugin named "%s"' % name)
    64          instance = klass()
    65          if templateArgs == None:
    66              return instance.run(dmd, args)
    67          else:
    68              return instance.run(dmd, args, templateArgs)
    69
    70 -def manage_addReportServer(context, id, REQUEST = None):
    71      """make a ReportServer"""
    72      rs = ReportServer(id)
    73      context._setObject(id, rs)
    74      if REQUEST is not None:
    75          REQUEST['RESPONSE'].redirect(context.absolute_url()+'/manage_main')
    76
    77
    78  InitializeClass(ReportServer)
    79