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) ) )
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:]))
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
def get_alias(name): key = 'dockyard/aliases/{name}'.format(**locals()) return kv.get(key)
def get_initialized(): return kv.get('dockyard/initialized') == '1'
def get_default(): return kv.get('dockyard/default')
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)))
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:]))