Ejemplo n.º 1
0
def check_service(check_service_job):
    """
    Check the availability of a consul service and send stats to a Sink.

    :param check_service_job: Dictionary containing job specification
    :type check_service_job: dict[str, str, ConsulConfig, SinkConfig]

    :return: Integer return code
    :rtype: int
    """

    try:
        service = check_service_job['service']
        tag = check_service_job['tag']
        consul_config = check_service_job['consul_config']
        sink_config = check_service_job['sink_config']
    except KeyError as e:
        log.error(
            "check_service | Missing key {e} in check_service_job dict".format(
                e=e))
        raise e

    consul = Consul(consul_config)
    sink = Sink(sink_config)

    dc = consul.get_dc()
    log.debug('check_service | Service:{service} Tag:{tag} DC:{dc}'.format(
        service=service, tag=tag, dc=dc))

    consul_health_service = consul.get_health_service(service, tag)
    ok, critical = get_node_status(consul_health_service)

    sink.ok_count(ok, service, dc, tag)
    sink.critical_count(critical, service, dc, tag)

    if ok + critical > 0:
        sink.ok_percent((ok / (ok + critical)) * 100, service, dc, tag)
        sink.critical_percent((critical / (ok + critical)) * 100,
                              service, dc, tag)

    return 0