Package ZenUtils :: Module CyclingDaemon
[hide private]
[frames] | no frames]

Source Code for Module ZenUtils.CyclingDaemon

 1  from Globals import * 
 2  import time 
 3  import socket 
 4  from Products.ZenUtils.ZCmdBase import ZCmdBase 
 5  from Products.ZenEvents import Event 
 6  from twisted.internet import defer, reactor 
 7   
 8  DEFAULT_MONITOR = "localhost" 
 9   
10 -class CyclingDaemon(ZCmdBase):
11
12 - def main_loop(self):
13 raise NotImplementedError("Your daemon must define this method.")
14
15 - def run(self):
16 reactor.callLater(0, self.runCycle) 17 reactor.run()
18
19 - def finish(self, results=None):
20 reactor.stop()
21
22 - def sendEvent(self, evt):
23 """Send event to the system. 24 """ 25 self.dmd.ZenEventManager.sendEvent(evt)
26
27 - def sendHeartbeat(self):
28 """Send a heartbeat event for this monitor. 29 """ 30 timeout = self.options.cycletime*3 31 evt = Event.EventHeartbeat(self.options.monitor, self.name, timeout) 32 self.sendEvent(evt) 33 self.niceDoggie(self.options.cycletime)
34
35 - def runCycle(self):
36 try: 37 start = time.time() 38 self.syncdb() 39 self.main_loop() 40 self.sendHeartbeat() 41 except: 42 self.log.exception("unexpected exception") 43 if not self.options.cycle: 44 self.finish() 45 reactor.callLater(self.options.cycletime, self.runCycle)
46
47 - def sigTerm(self, signum=None, frame=None):
48 """ 49 Controlled shutdown of main loop on interrupt. 50 """ 51 try: 52 ZCmdBase.sigTerm(self, signum, frame) 53 except SystemExit: 54 self.finish()
55
56 - def buildOptions(self):
57 ZCmdBase.buildOptions(self) 58 self.parser.add_option('--cycletime', 59 dest='cycletime', default=60, type="int", 60 help="check events every cycletime seconds") 61 self.parser.add_option( 62 '--zopeurl', dest='zopeurl', 63 default='http://%s:%d' % (socket.getfqdn(), 8080), 64 help="http path to the root of the zope server") 65 self.parser.add_option("--monitor", dest="monitor", 66 default=DEFAULT_MONITOR, 67 help="Name of monitor instance to use for heartbeat " 68 " events. Default is %s." % DEFAULT_MONITOR)
69