コード例 #1
0
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")
コード例 #2
0
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)))
コード例 #3
0
 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)
コード例 #4
0
ファイル: __init__.py プロジェクト: pgiraud/temboard-agent
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")