| Trees | Indices | Help |
|
|---|
|
|
1 ###########################################################################
2 #
3 # This program is part of Zenoss Core, an open source monitoring platform.
4 # Copyright (C) 2007, 2011 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 or (at your
8 # option) any later version as published by 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 """
18
19
20 import os
21 import sys
22 from glob import glob
23 import logging
24 log = logging.getLogger('zen.reportserver')
25
26 from Globals import InitializeClass
27 from AccessControl import ClassSecurityInfo
28
29 from Products.ZenModel.ZenModelRM import ZenModelRM
30 from Products.ZenUtils.Utils import importClass, zenPath
31 from Products.ZenModel.ZenossSecurity import *
32
33
35 security = ClassSecurityInfo()
36 security.setDefaultAccess('allow')
37
39 directories = []
40 for p in self.ZenPackManager.packs():
41 if p.id == 'broken':
42 continue
43 try:
44 pluginpath = p.path('reports', 'plugins')
45 directories.append(pluginpath)
46 except AttributeError:
47 log.warn("Unable to load report plugins for ZenPack %s",
48 p.id)
49 directories.append(zenPath('Products/ZenReports/plugins'))
50 return directories
51
53 allPlugins = []
54 for dir in self._getPluginDirectories():
55 plugins = [fn.replace('.py','') for fn in glob('%s/*.py' % dir) \
56 if not fn.endswith('__init__.py')]
57 allPlugins.extend(plugins)
58 return allPlugins
59
61 """
62 Find the named plugin and import it.
63 """
64 klass = None
65 if name.startswith('/'):
66 if name.endswith('.py'):
67 name = name.replace('.py', '')
68 if os.path.exists(name + '.py'):
69 try:
70 d, name = name.rsplit('/', 1)
71 sys.path.insert(0, d)
72 klass = importClass(name)
73 finally:
74 sys.path.remove(d)
75
76 else:
77 for d in self._getPluginDirectories():
78 if os.path.exists('%s/%s.py' % (d, name)):
79 try:
80 sys.path.insert(0, d)
81 klass = importClass(name)
82 break
83 finally:
84 sys.path.remove(d)
85 return klass
86
87 security.declareProtected(ZEN_COMMON, 'plugin')
89 "Run a plugin to generate the report object"
90 dmd = self.dmd
91 args = dict(zip(REQUEST.keys(), REQUEST.values()))
92
93 # We don't want the response object getting passed to the plugin
94 # because if it is stringified, it can modify the return code
95 # and cause problems upstream.
96 if 'RESPONSE' in args:
97 del args['RESPONSE']
98
99 klass = self._importPluginClass(name)
100 if not klass:
101 raise IOError('Unable to find plugin named "%s"' % name)
102 instance = klass()
103 log.debug("Running plugin %s", name)
104 if templateArgs == None:
105 return instance.run(dmd, args)
106 else:
107 return instance.run(dmd, args, templateArgs)
108
110 """make a ReportServer"""
111 rs = ReportServer(id)
112 context._setObject(id, rs)
113 if REQUEST is not None:
114 REQUEST['RESPONSE'].redirect(context.absolute_url()+'/manage_main')
115
116
117 InitializeClass(ReportServer)
118
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1.1812 on Tue Oct 11 12:51:39 2011 | http://epydoc.sourceforge.net |