def run(self): self.running = True # An IRC client may send 1 message every 2 seconds # See section 5.8 in http://datatracker.ietf.org/doc/rfc2813/ tokens = LeakyBucket(tokens=20, rate=2) tokens.start() api = ApiClient() # Connect to IRC server try: irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) irc.connect((CONF.irc_host, CONF.irc_port)) time.sleep(1) irc.send('NICK %s\r\n' % CONF.irc_user) time.sleep(1) irc.send('USER %s 8 * : %s\r\n' % (CONF.irc_user, CONF.irc_user)) LOG.debug('USER -> %s', irc.recv(4096)) time.sleep(1) irc.send('JOIN %s\r\n' % CONF.irc_channel) LOG.debug('JOIN -> %s', irc.recv(4096)) except Exception, e: LOG.error('IRC connection error: %s', e) sys.exit(1)
def run(self): onhold = dict() # Start token bucket thread tokens = LeakyBucket(tokens=20, rate=30) tokens.start() mailer = MailerMessage(onhold, tokens) mailer.start() sender = MailSender(onhold, tokens) sender.start() self.api = ApiClient() try: while True: LOG.debug('Send heartbeat...') heartbeat = Heartbeat(tags=[__version__]) try: self.api.send(heartbeat) except Exception, e: LOG.warning('Failed to send heartbeat: %s', e) time.sleep(CONF.loop_every) except (KeyboardInterrupt, SystemExit): mailer.should_stop = True
class MailerDaemon(Daemon): def run(self): self.running = True # Start token bucket thread self.tokens = LeakyBucket(tokens=20, rate=30) self.tokens.start() self.onhold = dict() # Connect to message queue self.mq = Messaging() self.mq.connect( callback=MailerMessage(self.mq, self.onhold, self.tokens)) self.mq.subscribe(destination=CONF.outbound_topic) while not self.shuttingdown: try: LOG.debug('Send email messages...') for alertid in self.onhold.keys(): try: (mailAlert, hold_time) = self.onhold[alertid] except KeyError: continue if time.time() > hold_time: if not self.tokens.get_token(): LOG.warning( '%s : No tokens left, rate limiting this alert', alertid) continue email = Mailer(mailAlert) mail_to = CONF.mail_list.split(',') if 'mailto' in mailAlert.tags: mail_to.append(mailAlert.tags['mailto']) email.send(mail_to=mail_to) try: del self.onhold[alertid] except KeyError: continue time.sleep(CONF.loop_every) LOG.debug('Send heartbeat...') heartbeat = Heartbeat(version=Version) self.mq.send(heartbeat) except (KeyboardInterrupt, SystemExit): self.shuttingdown = True LOG.info('Shutdown request received...') self.running = False self.tokens.shutdown() LOG.info('Disconnecting from message broker...') self.mq.disconnect()
class MailerDaemon(Daemon): def run(self): self.running = True # Start token bucket thread self.tokens = LeakyBucket(tokens=20, rate=30) self.tokens.start() self.onhold = dict() # Connect to message queue self.mq = Messaging() self.mq.connect(callback=MailerMessage(self.mq, self.onhold, self.tokens)) self.mq.subscribe(destination=CONF.outbound_topic) while not self.shuttingdown: try: LOG.debug('Send email messages...') for alertid in self.onhold.keys(): try: (mailAlert, hold_time) = self.onhold[alertid] except KeyError: continue if time.time() > hold_time: if not self.tokens.get_token(): LOG.warning('%s : No tokens left, rate limiting this alert', alertid) continue email = Mailer(mailAlert) mail_to = CONF.mail_list.split(',') for tag in mailAlert.tags: if tag.startswith('email'): mail_to.append(tag.split(':')[1]) email.send(mail_to=mail_to) try: del self.onhold[alertid] except KeyError: continue time.sleep(CONF.loop_every) LOG.debug('Send heartbeat...') heartbeat = Heartbeat(version=Version) self.mq.send(heartbeat) except (KeyboardInterrupt, SystemExit): self.shuttingdown = True LOG.info('Shutdown request received...') self.running = False self.tokens.shutdown() LOG.info('Disconnecting from message broker...') self.mq.disconnect()
def run(self): self.running = True # An IRC client may send 1 message every 2 seconds # See section 5.8 in http://datatracker.ietf.org/doc/rfc2813/ tokens = LeakyBucket(tokens=20, rate=2) tokens.start() # Connect to IRC server try: irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) irc.connect((CONF.irc_host, CONF.irc_port)) time.sleep(1) irc.send('NICK %s\r\n' % CONF.irc_user) time.sleep(1) irc.send('USER %s 8 * : %s\r\n' % (CONF.irc_user, CONF.irc_user)) LOG.debug('USER -> %s', irc.recv(4096)) time.sleep(1) irc.send('JOIN %s\r\n' % CONF.irc_channel) LOG.debug('JOIN -> %s', irc.recv(4096)) except Exception, e: LOG.error('IRC connection error: %s', e) sys.exit(1)