def monitoring_sender_worker(app): config = app.config c = 0 logger.debug("Starting sender") q = Queue(os.path.join(config.temboard.home, 'metrics.q'), max_size=1024 * 1024 * 10, overflow_mode='slide') while True: # Let's do it smoothly.. time.sleep(0.5) msg = q.shift(delete=False) if msg is None: # If we get nothing from the queue then we get out from this while # loop. break try: # Try to send data to temboard collector API logger.debug("Trying to send data to collector") logger.debug(config.monitoring.collector_url) logger.debug(msg.content) send_output( config.monitoring.ssl_ca_cert_file, config.monitoring.collector_url, config.temboard.key, msg.content ) except HTTPError as e: # On error 409 (DB Integrity) we just drop the message and move to # the next message. if int(e.code) == 409: continue try: data = e.read() data = json.loads(data) message = data['error'] except Exception as e: logger.debug("Can't get error details: %s", e) message = str(e) logger.error("Failed to send data to collector: %s", message) logger.error("You should find details in temBoard UI logs.") raise Exception("Failed to send data to collector.") # If everything's fine then remove current msg from the queue # Integrity check is made using check_msg q.shift(delete=True, check_msg=msg) if c > 60: break c += 1 logger.debug("Done")
def supervision_sender_worker(commands, command, config): signal.signal(signal.SIGTERM, supervision_worker_sigterm_handler) start_time = time.time() * 1000 set_logger_name("supervision_sender_worker") logger = get_logger(config) # TODO: logging methods in supervision plugin must be aligned. logging.root = logger logger.info("Start pid=%s id=%s" % ( os.getpid(), command.commandid, )) command.state = COMMAND_START command.time = time.time() command.pid = os.getpid() commands.update(command) c = 0 while True: # Let's do it smoothly.. time.sleep(0.5) q = Queue('%s/metrics.q' % (config.temboard['home']), max_size=1024 * 1024 * 10, overflow_mode='slide') msg = q.shift(delete=False) if msg is None: break try: send_output(config.plugins['supervision']['ssl_ca_cert_file'], config.plugins['supervision']['collector_url'], config.plugins['supervision']['agent_key'], msg.content) except urllib2.HTTPError as e: logger.error("Failed to send data.") logger.debug(e.message) logger.info("End. Duration: %s." % (str(time.time() * 1000 - start_time))) # On an error 409 (DB Integrity) we need to remove the message. if int(e.code) != 409: return except Exception as e: logger.error("Failed to send data.") logger.debug(str(e)) logger.info("End. Duration: %s." % (str(time.time() * 1000 - start_time))) return _ = q.shift(delete=True, check_msg=msg) if c > 60: logger.info("End. Duration: %s." % (str(time.time() * 1000 - start_time))) return c += 1 logger.info("End. Duration: %s." % (str(time.time() * 1000 - start_time)))
def get_last_measure(self, store_key): q = Queue("%s/%s.q" % (self.home, store_key), max_length=1, overflow_mode='slide') msg = q.shift() if msg: return json.loads(msg.content)
def monitoring_sender_worker(config): signal.signal(signal.SIGTERM, monitoring_worker_sigterm_handler) # convert config dict to namedtuple config = collections.namedtuple( '__config', ['temboard', 'plugins', 'postgresql', 'logging'])( temboard=config['temboard'], plugins=config['plugins'], postgresql=config['postgresql'], logging=config['logging']) c = 0 logger.debug("Starting sender") while True: # Let's do it smoothly.. time.sleep(0.5) q = Queue('%s/metrics.q' % (config.temboard['home']), max_size=1024 * 1024 * 10, overflow_mode='slide') msg = q.shift(delete=False) if msg is None: break try: send_output(config.plugins['monitoring']['ssl_ca_cert_file'], config.plugins['monitoring']['collector_url'], config.temboard['key'], msg.content) except urllib2.HTTPError as e: logger.exception(e) # On an error 409 (DB Integrity) we need to remove the message. if int(e.code) != 409: logger.error("Failed with code=%s message=%s" % (e.code, e.msg)) sys.exit(1) except Exception as e: logger.exception(e) logger.error("Failed") sys.exit(1) # If everything's fine then remove current msg from the queue q.shift(delete=True, check_msg=msg) if c > 60: break c += 1 logger.debug("Done")