3 from twisted.internet import reactor
7 from twisted.application import service
8 from twisted.python import log
9 from foolscap import Tub, Referenceable, RemoteInterface
10 from foolscap.schema import ListOf, TupleOf
11 from zope.interface import implements
13 Averages = ListOf( TupleOf(str, float, float, float) )
14 class RICPUWatcherSubscriber(RemoteInterface):
15 def averages(averages=Averages):
18 class CPUWatcherSubscriber(service.MultiService, Referenceable):
19 implements(RICPUWatcherSubscriber)
20 def __init__(self, furlthing):
21 service.MultiService.__init__(self)
22 if furlthing.startswith("pb://"):
25 furlfile = os.path.expanduser(furlthing)
26 if os.path.isdir(furlfile):
27 furlfile = os.path.join(furlfile, "watcher.furl")
28 furl = open(furlfile, "r").read().strip()
30 tub.setServiceParent(self)
31 tub.connectTo(furl, self.connected)
33 def connected(self, rref):
35 d = rref.callRemote("get_averages")
36 d.addCallback(self.remote_averages)
39 d = rref.callRemote("subscribe", self)
42 def remote_averages(self, averages):
43 pprint.pprint(averages)
46 c = CPUWatcherSubscriber(sys.argv[1])