def get_groups_and_services(self, tenant, region, query=""): groups = group_repo.get_tenant_region_groups(tenant.tenant_id, region, query) services = service_repo.get_tenant_region_services( region, tenant.tenant_id).values("service_id", "service_cname", "service_alias") service_id_map = {s["service_id"]: s for s in services} service_group_relations = group_service_relation_repo.get_service_group_relation_by_groups( [g.ID for g in groups]) service_group_map = { sgr.service_id: sgr.group_id for sgr in service_group_relations } group_services_map = dict() for k, v in service_group_map.iteritems(): service_list = group_services_map.get(v, None) service_info = service_id_map.get(k, None) if service_info: if not service_list: group_services_map[v] = [service_info] else: service_list.append(service_info) service_id_map.pop(k) result = [] for g in groups: bean = dict() bean["group_id"] = g.ID bean["group_name"] = g.group_name bean["service_list"] = group_services_map.get(g.ID) result.insert(0, bean) return result
def get_enterprise_runing_service(self, enterprise_id, regions): app_total_num = 0 app_running_num = 0 component_total_num = 0 component_running_num = 0 # 1. get all teams teams = enterprise_repo.get_enterprise_teams(enterprise_id) if not teams: return { "service_groups": { "total": 0, "running": 0, "closed": 0 }, "components": { "total": 0, "running": 0, "closed": 0 } } # 2. get all apps in all teams team_ids = [team.tenant_id for team in teams] apps = group_repo.get_apps_in_multi_team(team_ids) app_total_num = len(apps) app_ids = [app.ID for app in apps] app_relations = group_service_relation_repo.get_service_group_relation_by_groups(app_ids) component_total_num = len(app_relations) # 3. get all running component # attention, component maybe belong to any other enterprise running_component_ids = [] for region in regions: data = None try: data = region_api.get_enterprise_running_services(enterprise_id, region.region_name, test=True) except (region_api.CallApiError, ServiceHandleException) as e: logger.exception("get region:'{0}' running failed: {1}".format(region.region_name, e)) if data and data.get("service_ids"): running_component_ids.extend(data.get("service_ids")) # 4 get all running app component_and_app = dict() for relation in app_relations: component_and_app[relation.service_id] = relation.group_id running_apps = [] for running_component in running_component_ids: # if this running component belong to this enterprise app = component_and_app.get(running_component) if app: component_running_num += 1 if app not in running_apps: running_apps.append(app) app_running_num = len(running_apps) data = { "service_groups": { "total": app_total_num, "running": app_running_num, "closed": app_total_num - app_running_num }, "components": { "total": component_total_num, "running": component_running_num, "closed": component_total_num - component_running_num } } return data