Package ZenRRD :: Module zenrender
[hide private]
[frames] | no frames]

Source Code for Module ZenRRD.zenrender

  1  #! /usr/bin/env python  
  2  ########################################################################### 
  3  # 
  4  # This program is part of Zenoss Core, an open source monitoring platform. 
  5  # Copyright (C) 2007, 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 as published by 
  9  # the Free Software Foundation. 
 10  # 
 11  # For complete information please visit: http://www.zenoss.com/oss/ 
 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 mimetypes 
 27   
28 -class RenderServer(OrigRenderServer):
29 30 cache = None 31
32 - def setupCache(self):
33 """make new cache if we need one""" 34 if self.cache is None: 35 self.cache = ObjectCache() 36 self.cache.initCache() 37 return self.cache
38
39 -class HttpRender(resource.Resource):
40 41 isLeaf = True 42
43 - def render_GET(self, request):
44 args = request.args.copy() 45 for k, v in args.items(): 46 if len(v) == 1: 47 args[k] = v[0] 48 command = request.postpath[-1] 49 zr.log.debug("Processing %s request" % command) 50 args.setdefault('ftype', 'PNG') 51 ftype = args['ftype'] 52 del args['ftype'] 53 mimetype = mimetypes.guess_type('.%s'%ftype)[0] 54 if not mimetype: mimetype = 'image/%s'%ftype 55 request.setHeader('Content-type', mimetype) 56 return getattr(zr, 'remote_' + command)(**args)
57
58 -class zenrender(PBDaemon):
59 60 initialServices = ['EventService', 'ZenRender'] 61 name = 'zenrender' 62
63 - def __init__(self):
64 PBDaemon.__init__(self) 65 self.rs = RenderServer(self.name)
66
67 - def connected(self):
68 if self.options.cycle: 69 self.heartbeat()
70
71 - def heartbeat(self):
72 reactor.callLater(self.heartbeatTimeout / 3, self.heartbeat) 73 PBDaemon.heartbeat(self)
74
75 - def remote_render(self, *args, **kw):
76 return self.rs.render(*args, **kw)
77
78 - def remote_packageRRDFiles(self, *args, **kw):
79 return self.rs.packageRRDFiles(*args, **kw)
80
81 - def remote_unpackageRRDFiles(self, *args, **kw):
82 return self.rs.unpackageRRDFiles(*args, **kw)
83
84 - def remote_receiveRRDFiles(self, *args, **kw):
85 return self.rs.receiveRRDFiles(*args, **kw)
86
87 - def remote_sendRRDFiles(self, *args, **kw):
88 return self.rs.sendRRDFiles(*args, **kw)
89
90 - def remote_moveRRDFiles(self, *args, **kw):
91 return self.rs.moveRRDFiles(*args, **kw)
92
93 - def remote_plugin(self, *args, **kw):
94 return self.rs.plugin(*args, **kw)
95
96 - def remote_summary(self, *args, **kw):
97 return self.rs.summary(*args, **kw)
98
99 - def remote_fetchValues(self, *args, **kw):
100 return self.rs.fetchValues(*args, **kw)
101
102 - def remote_currentValues(self, *args, **kw):
103 return self.rs.currentValues(*args, **kw)
104
105 - def buildOptions(self):
106 PBDaemon.buildOptions(self) 107 self.parser.add_option('--http-port', 108 dest='httpport', 109 default=DEFAULT_HTTP_PORT, 110 help='Port zenrender listens on for http' 111 'render requests. Default is %s.' % 112 DEFAULT_HTTP_PORT)
113 114 115 if __name__ == '__main__': 116 zr = zenrender() 117 reactor.listenTCP(int(zr.options.httpport), server.Site(HttpRender())) 118 zr.run() 119