Exemple #1
0
    def GET(self):
        try:
            get_args = web.input(local=False, microservice_name=None)
            filter_local = bool(get_args.local)
            filter_microservice_name = get_args.microservice_name

            if filter_local:
                local_microservices_ids = set(consul_query("agent/services").keys())

            if filter_microservice_name:
                microservices_names = [filter_microservice_name]
            else:
                microservices_names = list(consul_query("catalog/services").keys())

            result = []

            for microservice_name in microservices_names:
                if microservice_name == "consul":
                    continue

                query = "health/service/{microservice_name}".format(**locals())
                instances = consul_query(query)
                for instance in instances:
                    microservice_checks_statuses = set(check["Status"] for check in (instance["Checks"] or []))
                    microservice_computed_status = "-"
                    for possible_status in ["passing", "warning", "critical"]:
                        if possible_status in microservice_checks_statuses:
                            microservice_computed_status = possible_status

                    microservice_ip = instance["Node"]["Address"]
                    microservice_port = str(instance["Service"]["Port"])
                    microservice_id = instance["Service"]["ID"]
                    container_id = microservice_id.split(":")[0]
                    microservice_tags = instance["Service"]["Tags"] or []
                    microservice_tags_dict = self.__create_dict_from_tags(microservice_tags)

                    if not filter_local or microservice_id in local_microservices_ids:
                        microservice_address = microservice_ip + ":" + microservice_port
                        try:
                            microservice_start_timestamp = kv.get("start_timestamp/" + container_id)
                        except:
                            microservice_start_timestamp = None
                        microservice_dict = {
                            "name": microservice_name,
                            "address": microservice_address,
                            "microservice_id": microservice_id,
                            "container_id": container_id,
                            "status": microservice_computed_status,
                            "tags": microservice_tags_dict,
                            "start_timestamp": microservice_start_timestamp,
                        }
                        result.append(microservice_dict)

            return self.status_ok({"result": result})
        except Exception as e:
            return self.status_error(
                "Cannot get the list of services. {exception_class} - {exception}".format(
                    exception_class=type(e).__name__, exception=str(e)
                )
            )
Exemple #2
0
def command_list(args):
    if args.service_name:
        service_names = [args.service_name]
    else:
        service_names = list(consul_query('catalog/services').keys())

    if args.local:
        local_ids = set(consul_query('agent/services').keys())

    if not args.quiet:
        output_header = ('Name', 'Address', 'ID', 'Status', 'Tags')
        if args.uptime:
            output_header += ("Created (UTC)",)
        output_rows = [output_header]

    for service_name in service_names:
        if service_name == 'consul':
            continue

        query = 'health/service/{service_name}'.format(**locals())
        instances = consul_query(query)
        for instance in instances:
            service_checks_statuses = set(check['Status'] for check in (instance['Checks'] or []))
            service_computed_status = '-'
            for possible_status in ['passing', 'warning', 'critical']:
                if possible_status in service_checks_statuses:
                    service_computed_status = possible_status

            service_ip = instance['Node']['Address']
            service_port = str(instance['Service']['Port'])
            service_id = instance['Service']['ID']
            container_id = service_id.split(':')[0]
            service_tags = instance['Service']['Tags'] or []
            service_tags_pretty = [str(x) for x in sorted(service_tags)] if service_tags else '-'
            service_tags_set = set(service_tags)

            matches_env = (args.env is None) or ('env:' + args.env in service_tags_set)
            matches_app_id = (args.app_id is None) or ('app_id:' + args.app_id in service_tags_set)
            if matches_env and matches_app_id and (not args.local or service_id in local_ids):
                service_address = service_ip + ':' + service_port
                if args.quiet:
                    print(str(container_id))
                else:
                    output_row = (service_name, service_address, container_id, service_computed_status, service_tags_pretty)
                    if args.uptime:
                        try:
                            start_timestamp = kv.get("start_timestamp/" + container_id)
                            creation_time = epoch_to_iso(start_timestamp)
                        except:
                            creation_time = "-"
                        output_row += (creation_time,)

                    output_rows.append(output_row)

    if not args.quiet:
        print_table([output_rows[0]] + sorted(output_rows[1:]))
Exemple #3
0
def get_list():
    result_list = []  # Contains dictionaries:
    # {'name': ..., 'is_default':..., 'address':..., ['user':...], ['password':...])
    default_alias = kv.get('dockyard/default')
    aliases_key = 'dockyard/aliases/'
    prefixed_aliases = kv.list(aliases_key) or []
    for prefixed_alias in sorted(prefixed_aliases):
        alias_name = prefixed_alias[len(aliases_key):]
        row = {
            'name': alias_name,
            'is_default': default_alias == alias_name,
        }
        row.update(get_alias(alias_name))
        result_list.append(row)
    return result_list
Exemple #4
0
def get_list():
    result_list = []  # Contains dictionaries:
    # {'name': ..., 'is_default':..., 'address':..., ['user':...], ['password':...])
    default_alias = kv.get('dockyard/default')
    aliases_key = 'dockyard/aliases/'
    prefixed_aliases = kv.list(aliases_key) or []
    for prefixed_alias in sorted(prefixed_aliases):
        alias_name = prefixed_alias[len(aliases_key):]
        row = {
            'name': alias_name,
            'is_default': default_alias == alias_name,
        }
        row.update(get_alias(alias_name))
        result_list.append(row)
    return result_list
Exemple #5
0
def get_alias(name):
    key = 'dockyard/aliases/{name}'.format(**locals())
    return kv.get(key)
Exemple #6
0
def get_initialized():
    return kv.get('dockyard/initialized') == '1'
Exemple #7
0
def get_default():
    return kv.get('dockyard/default')
Exemple #8
0
    def GET(self):
        try:
            get_args = web.input(local=False, microservice_name=None)
            filter_local = bool(get_args.local)
            filter_microservice_name = get_args.microservice_name

            if filter_local:
                local_microservices_ids = set(
                    consul_query('agent/services').keys())

            if filter_microservice_name:
                microservices_names = [filter_microservice_name]
            else:
                microservices_names = list(
                    consul_query('catalog/services').keys())

            result = []

            for microservice_name in microservices_names:
                if microservice_name == 'consul':
                    continue

                query = 'health/service/{microservice_name}'.format(**locals())
                instances = consul_query(query)
                for instance in instances:
                    microservice_checks_statuses = set(
                        check['Status']
                        for check in (instance['Checks'] or []))
                    microservice_computed_status = '-'
                    for possible_status in ['passing', 'warning', 'critical']:
                        if possible_status in microservice_checks_statuses:
                            microservice_computed_status = possible_status

                    microservice_ip = instance['Node']['Address']
                    microservice_port = str(instance['Service']['Port'])
                    microservice_id = instance['Service']['ID']
                    container_id = microservice_id.split(':')[0]
                    microservice_tags = instance['Service']['Tags'] or []
                    microservice_tags_dict = self.__create_dict_from_tags(
                        microservice_tags)

                    if not filter_local or microservice_id in local_microservices_ids:
                        microservice_address = microservice_ip + ':' + microservice_port
                        try:
                            microservice_start_timestamp = kv.get(
                                "start_timestamp/" + container_id)
                        except:
                            microservice_start_timestamp = None
                        microservice_dict = {
                            'name': microservice_name,
                            'address': microservice_address,
                            'microservice_id': microservice_id,
                            'container_id': container_id,
                            'status': microservice_computed_status,
                            'tags': microservice_tags_dict,
                            'start_timestamp': microservice_start_timestamp,
                        }
                        result.append(microservice_dict)

            return self.status_ok({'result': result})
        except Exception as e:
            return self.status_error(
                "Cannot get the list of services. {exception_class} - {exception}"
                .format(exception_class=type(e).__name__, exception=str(e)))
Exemple #9
0
def command_list(args):
    if args.service_name:
        service_names = [args.service_name]
    else:
        service_names = list(consul_query('catalog/services').keys())

    if args.local:
        local_ids = set(consul_query('agent/services').keys())

    if not args.quiet:
        output_header = ('Name', 'Address', 'ID', 'Status', 'Tags')
        if args.uptime:
            output_header += ("Created (UTC)", )
        output_rows = [output_header]

    for service_name in service_names:
        if service_name == 'consul':
            continue

        query = 'health/service/{service_name}'.format(**locals())
        instances = consul_query(query)
        for instance in instances:
            service_checks_statuses = set(
                check['Status'] for check in (instance['Checks'] or []))
            service_computed_status = '-'
            for possible_status in ['passing', 'warning', 'critical']:
                if possible_status in service_checks_statuses:
                    service_computed_status = possible_status

            service_ip = instance['Node']['Address']
            service_port = str(instance['Service']['Port'])
            service_id = instance['Service']['ID']
            container_id = service_id.split(':')[0]
            service_tags = instance['Service']['Tags'] or []
            service_tags_pretty = [str(x) for x in sorted(service_tags)
                                   ] if service_tags else '-'
            service_tags_set = set(service_tags)

            matches_env = (args.env is None) or ('env:' + args.env
                                                 in service_tags_set)
            matches_app_id = (args.app_id is None) or ('app_id:' + args.app_id
                                                       in service_tags_set)
            if matches_env and matches_app_id and (not args.local
                                                   or service_id in local_ids):
                service_address = service_ip + ':' + service_port
                if args.quiet:
                    print(str(container_id))
                else:
                    output_row = (service_name, service_address, container_id,
                                  service_computed_status, service_tags_pretty)
                    if args.uptime:
                        try:
                            start_timestamp = kv.get("start_timestamp/" +
                                                     container_id)
                            creation_time = epoch_to_iso(start_timestamp)
                        except:
                            creation_time = "-"
                        output_row += (creation_time, )

                    output_rows.append(output_row)

    if not args.quiet:
        print_table([output_rows[0]] + sorted(output_rows[1:]))
Exemple #10
0
def get_alias(name):
    key = 'dockyard/aliases/{name}'.format(**locals())
    return kv.get(key)
Exemple #11
0
def get_initialized():
    return kv.get('dockyard/initialized') == '1'
Exemple #12
0
def get_default():
    return kv.get('dockyard/default')