def __init__(self, args): self.host = args.host self.port = args.port self.tether = Tether(None, "//%s/monitor" % self.host, "//%s:%s" % (self.host, self.port)) self.stream = Stream(HistoryStore(100)) self.directory = Receiver("//%s/directory" % self.host, Processor(self)) self.receivers = [] self.handlers = [self.stream] self.statMessages = []
class Monitor(object): def __init__(self, args): self.host = args.host self.port = args.port self.tether = Tether(None, "//%s/monitor" % self.host, "//%s:%s" % (self.host, self.port)) self.stream = Stream(HistoryStore(100)) self.directory = Receiver("//%s/directory" % self.host, Processor(self)) self.receivers = [] self.handlers = [self.stream] self.statMessages = [] def on_reactor_init(self, event): event.reactor.acceptor(self.host, self.port, self.stream) self.tether.start(event.reactor) self.directory.start(event.reactor) event.reactor.schedule(0, self) def add_routes(self, event): address, routes = event.message.body if "/agents/" in address: if routes: rcv = Receiver(address, Processor(self)) self.receivers.append(rcv) rcv.start(event.reactor) else: for rcv in self.receivers: if rcv.source == address: self.receivers.remove(rcv) rcv.stop(event.reactor) break def on_message(self, event): if event.message.subject == "routes": self.add_routes(event) else: self.statMessages.append(event.message.body) def on_timer_task(self, event): if self.statMessages: self.stream.put(self.statMessages) self.statMessages = [] event.reactor.schedule(1, self)