1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 DEFAULT_HTTP_PORT = 8091
16
17 import Globals
18
19 from Products.ZenHub.PBDaemon import PBDaemon
20 from RenderServer import RenderServer as OrigRenderServer
21 from Products.ZenUtils.ObjectCache import ObjectCache
22
23 from twisted.web import resource, server
24 from twisted.internet import reactor
25
26 import xmlrpclib
27 import mimetypes
28
39
41
42 isLeaf = True
43
45 args = request.args.copy()
46 for k, v in args.items():
47 if len(v) == 1:
48 args[k] = v[0]
49 command = request.postpath[-1]
50 zr.log.debug("Processing %s request" % command)
51 args.setdefault('ftype', 'PNG')
52 ftype = args['ftype']
53 del args['ftype']
54 mimetype = mimetypes.guess_type('.%s'%ftype)[0]
55 if not mimetype: mimetype = 'image/%s'%ftype
56 request.setHeader('Content-type', mimetype)
57 return getattr(zr, 'remote_' + command)(**args)
58
59 - def render_POST(self, request):
60 "Deal with XML-RPC requests"
61 content = request.content.read()
62 args, command = xmlrpclib.loads(content)
63 zr.log.debug("Processing %s request" % command)
64 request.setHeader('Content-type', 'text/xml')
65 result = getattr(zr, 'remote_' + command)(*args)
66 response = xmlrpclib.dumps((result,),
67 methodresponse=True, allow_none=True)
68 return response
69
70
72
73 initialServices = ['EventService', 'ZenRender']
74 name = 'zenrender'
75
79
81 if self.options.cycle:
82 self.heartbeat()
83
87
89 return self.rs.render(*args, **kw)
90
93
96
99
102
105
107 return self.rs.plugin(*args, **kw)
108
110 return self.rs.summary(*args, **kw)
111
114
117
126
127
128 if __name__ == '__main__':
129 zr = zenrender()
130 reactor.listenTCP(int(zr.options.httpport), server.Site(HttpRender()))
131 zr.run()
132