Ejemplo n.º 1
0
    def get(self, request, *args, **kwargs):
        """
        添加特性获取可用标签
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        # 节点添加的标签和数据中心查询回来的标签才可被组件使用
        node_labels = node_label_repo.get_all_labels()
        labels_list = list()
        labels_name_list = list()
        if node_labels:
            node_labels_id_list = [label.label_id for label in node_labels]
            label_obj_list = label_repo.get_labels_by_label_ids(
                node_labels_id_list)
            for label_obj in label_obj_list:
                labels_name_list.append(label_obj.label_name)
        # 查询数据中心可使用的标签
        try:
            code, msg, data_list = label_service.get_region_labels(
                self.tenant, self.service)
            if code == 200 and data_list:
                label_name_list = []
                labels = label_repo.get_all_labels()
                if labels:
                    for label in labels:
                        label_name_list.append(label.label_name)
                for label_name in data_list:
                    if label_name not in label_name_list:
                        label_repo.create_label(label_name, label_name)
                    labels_name_list.append(label_name)
        except Exception as e:
            logger.exception(e)

        # 去除该组件已绑定的标签
        service_labels = service_label_repo.get_service_labels(
            self.service.service_id)
        if service_labels:
            service_labels_id_list = [
                label.label_id for label in service_labels
            ]
            label_obj_list = label_repo.get_labels_by_label_ids(
                service_labels_id_list)
            service_labels_name_list = [
                label.label_name for label in label_obj_list
            ]
            for service_labels_name in service_labels_name_list:
                if service_labels_name in labels_name_list:
                    labels_name_list.remove(service_labels_name)
        for labels_name in labels_name_list:
            label_dict = dict()
            label_oj = label_repo.get_labels_by_label_name(labels_name)
            label_dict["label_id"] = label_oj.label_id
            label_dict["label_alias"] = label_oj.label_alias
            labels_list.append(label_dict)

        result = general_message(200, "success", "查询成功", list=labels_list)
        return Response(result, status=result["code"])
Ejemplo n.º 2
0
    def get_service_details(self, tenant, service):
        service_base = service.to_dict()
        service_labels = service_label_repo.get_service_labels(service.service_id)
        service_domains = domain_repo.get_service_domains(service.service_id)
        service_tcpdomains = tcp_domain.get_service_tcpdomains(service.service_id)
        service_events = event_repo.get_specified_num_events(tenant.tenant_id, service.service_id)
        service_perms = service_perm_repo.get_service_perms_by_service_pk(service.ID)
        service_probes = probe_repo.get_service_probe(service.service_id)
        service_source = service_source_repo.get_service_source(tenant.tenant_id, service.service_id)
        service_auths = auth_repo.get_service_auth(service.service_id)
        service_env_vars = env_var_repo.get_service_env(tenant.tenant_id, service.service_id)
        service_compile_env = compile_env_repo.get_service_compile_env(service.service_id)
        service_extend_method = extend_repo.get_extend_method_by_service(service)
        image_service_relation = image_service_relation_repo.get_image_service_relation(tenant.tenant_id,
                                                                                        service.service_id)
        service_mnts = mnt_repo.get_service_mnts(tenant.tenant_id, service.service_id)
        service_plugin_relation = app_plugin_relation_repo.get_service_plugin_relation_by_service_id(service.service_id)
        service_plugin_config = service_plugin_config_repo.get_service_plugin_all_config(service.service_id)
        service_relation = dep_relation_repo.get_service_dependencies(tenant.tenant_id, service.service_id)
        service_volumes = volume_repo.get_service_volumes(service.service_id)
        service_config_file = volume_repo.get_service_config_files(service.service_id)
        service_ports = port_repo.get_service_ports(tenant.tenant_id, service.service_id)

        app_info = {
            "service_base": service_base,
            "service_labels": [label.to_dict() for label in service_labels],
            "service_domains": [domain.to_dict() for domain in service_domains],
            "service_tcpdomains": [tcpdomain.to_dict() for tcpdomain in service_tcpdomains],
            "service_events": [event.to_dict() for event in service_events],
            "service_perms": [perm.to_dict() for perm in service_perms],
            "service_probes": [probe.to_dict() for probe in service_probes],
            "service_source": service_source.to_dict() if service_source else None,
            "service_auths": [auth.to_dict() for auth in service_auths],
            "service_env_vars": [env_var.to_dict() for env_var in service_env_vars],
            "service_compile_env": service_compile_env.to_dict() if service_compile_env else None,
            "service_extend_method": service_extend_method.to_dict() if service_extend_method else None,
            "image_service_relation": image_service_relation.to_dict() if image_service_relation else None,
            "service_mnts": [mnt.to_dict() for mnt in service_mnts],
            "service_plugin_relation": [plugin_relation.to_dict() for plugin_relation in service_plugin_relation],
            "service_plugin_config": [config.to_dict() for config in service_plugin_config],
            "service_relation": [relation.to_dict() for relation in service_relation],
            "service_volumes": [volume.to_dict() for volume in service_volumes],
            "service_config_file": [config_file.to_dict() for config_file in service_config_file],
            "service_ports": [port.to_dict() for port in service_ports]
        }
        return app_info
Ejemplo n.º 3
0
    def get_service_labels(self, service):
        service_label_ids = service_label_repo.get_service_labels(service.service_id).values_list("label_id", flat=True)
        region_config = region_repo.get_region_by_region_name(service.service_region)
        node_label_ids = []
        # 判断标签是否被节点使用
        if region_config:
            node_label_ids = node_label_repo.get_node_label_by_region(region_config.region_id).exclude(
                label_id__in=service_label_ids).values_list("label_id",
                                                            flat=True)
        used_labels = label_repo.get_labels_by_label_ids(service_label_ids)
        unused_labels = []
        if node_label_ids:
            unused_labels = label_repo.get_labels_by_label_ids(node_label_ids)

        result = {
            "used_labels": [label.to_dict() for label in used_labels],
            "unused_labels": [label.to_dict() for label in unused_labels],

        }
        return result
Ejemplo n.º 4
0
    def get_service_details(self, tenant, service):
        service_base = service.to_dict()
        service_labels = service_label_repo.get_service_labels(
            service.service_id)
        service_domains = domain_repo.get_service_domains(service.service_id)
        http_rule_configs = configuration_repo.list_by_rule_ids(
            [sd.http_rule_id for sd in service_domains])
        service_tcpdomains = tcp_domain.get_service_tcpdomains(
            service.service_id)
        service_probes = probe_repo.get_service_probe(service.service_id)
        service_source = service_source_repo.get_service_source(
            tenant.tenant_id, service.service_id)
        service_auths = auth_repo.get_service_auth(service.service_id)
        service_env_vars = env_var_repo.get_service_env(
            tenant.tenant_id, service.service_id)
        service_compile_env = compile_env_repo.get_service_compile_env(
            service.service_id)
        service_extend_method = extend_repo.get_extend_method_by_service(
            service)
        service_mnts = mnt_repo.get_service_mnts(tenant.tenant_id,
                                                 service.service_id)
        service_volumes = volume_repo.get_service_volumes_with_config_file(
            service.service_id)
        service_config_file = volume_repo.get_service_config_files(
            service.service_id)
        service_ports = port_repo.get_service_ports(tenant.tenant_id,
                                                    service.service_id)
        service_relation = dep_relation_repo.get_service_dependencies(
            tenant.tenant_id, service.service_id)
        service_monitors = service_monitor_repo.get_component_service_monitors(
            tenant.tenant_id, service.service_id)
        component_graphs = component_graph_repo.list(service.service_id)
        # plugin
        service_plugin_relation = app_plugin_relation_repo.get_service_plugin_relation_by_service_id(
            service.service_id)
        service_plugin_config = service_plugin_config_repo.get_service_plugin_all_config(
            service.service_id)
        # third_party_service
        third_party_service_endpoints = service_endpoints_repo.get_service_endpoints_by_service_id(
            service.service_id)
        if service.service_source == "third_party":
            if not third_party_service_endpoints:
                raise ServiceHandleException(
                    msg="third party service endpoints can't be null",
                    msg_show="第三方组件实例不可为空")
        app_info = {
            "component_id":
            service.component_id,
            "service_base":
            service_base,
            "service_labels": [label.to_dict() for label in service_labels],
            "service_domains":
            [domain.to_dict() for domain in service_domains],
            "http_rule_configs":
            [config.to_dict() for config in http_rule_configs],
            "service_tcpdomains":
            [tcpdomain.to_dict() for tcpdomain in service_tcpdomains],
            "service_probes": [probe.to_dict() for probe in service_probes],
            "service_source":
            service_source.to_dict() if service_source else None,
            "service_auths": [auth.to_dict() for auth in service_auths],
            "service_env_vars":
            [env_var.to_dict() for env_var in service_env_vars],
            "service_compile_env":
            service_compile_env.to_dict() if service_compile_env else None,
            "service_extend_method":
            service_extend_method.to_dict() if service_extend_method else None,
            "service_mnts": [mnt.to_dict() for mnt in service_mnts],
            "service_plugin_relation": [
                plugin_relation.to_dict()
                for plugin_relation in service_plugin_relation
            ],
            "service_plugin_config":
            [config.to_dict() for config in service_plugin_config],
            "service_relation":
            [relation.to_dict() for relation in service_relation],
            "service_volumes":
            [volume.to_dict() for volume in service_volumes],
            "service_config_file":
            [config_file.to_dict() for config_file in service_config_file],
            "service_ports": [port.to_dict() for port in service_ports],
            "third_party_service_endpoints":
            [endpoint.to_dict() for endpoint in third_party_service_endpoints],
            "service_monitors":
            [monitor.to_dict() for monitor in service_monitors],
            "component_graphs":
            [graph.to_dict() for graph in component_graphs]
        }
        plugin_ids = [pr.plugin_id for pr in service_plugin_relation]

        return app_info, plugin_ids
Ejemplo n.º 5
0
    def get(self, request, *args, **kwargs):
        """
        添加特性获取可用标签
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        try:
            # 节点添加的标签和数据中心查询回来的标签才可被组件使用
            node_labels = node_label_repo.get_all_labels()
            labels_list = list()
            labels_name_list = list()
            if node_labels:
                node_labels_id_list = [label.label_id for label in node_labels]
                label_obj_list = label_repo.get_labels_by_label_ids(
                    node_labels_id_list)
                for label_obj in label_obj_list:
                    labels_name_list.append(label_obj.label_name)
            # 查询数据中心可使用的标签
            try:
                code, msg, data_list = label_service.get_region_labels(
                    self.tenant, self.service)
                if code == 200:
                    if data_list:
                        label_name_list = []
                        labels = label_repo.get_all_labels()
                        if labels:
                            for label in labels:
                                label_name_list.append(label.label_name)
                        for label_name in data_list:
                            if label_name not in label_name_list:
                                label_id = make_uuid("labels")
                                create_time = datetime.datetime.now().strftime(
                                    '%Y-%m-%d %H:%M:%S')
                                label = Labels(label_id=label_id,
                                               label_name=label_name,
                                               label_alias=label_name,
                                               create_time=create_time)
                                label.save()
                            labels_name_list.append(label_name)

            except Exception as e:
                logger.exception(e)
                pass

            # 去除该组件已绑定的标签
            service_labels = service_label_repo.get_service_labels(
                self.service.service_id)
            if service_labels:
                service_labels_id_list = [l.label_id for l in service_labels]
                label_obj_list = label_repo.get_labels_by_label_ids(
                    service_labels_id_list)
                service_labels_name_list = [
                    l.label_name for l in label_obj_list
                ]
                for service_labels_name in service_labels_name_list:
                    if service_labels_name in labels_name_list:
                        labels_name_list.remove(service_labels_name)
            for labels_name in labels_name_list:
                label_dict = dict()
                label_oj = label_repo.get_labels_by_label_name(labels_name)
                label_dict["label_id"] = label_oj.label_id
                label_dict["label_alias"] = label_oj.label_alias
                labels_list.append(label_dict)

            result = general_message(200, "success", "查询成功", list=labels_list)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Ejemplo n.º 6
0
 def get(self, request, *args, **kwargs):
     """
     添加特性获取可用标签
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     try:
         # 判断表中是否有windows标签
         labels = label_repo.get_all_labels()
         if labels:
             labels_name_list = [label.label_name for label in labels]
             if "windows" not in labels_name_list:
                 label_id = make_uuid("windows")
                 create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                 label = Labels(label_id=label_id, label_name="windows", label_alias="windows", create_time=create_time)
                 label.save()
         else:
             label_id = make_uuid("windows")
             create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
             label = Labels(label_id=label_id, label_name="windows", label_alias="windows", create_time=create_time)
             label.save()
         # 节点添加的标签和windows标签才可被服务使用
         node_labels = node_label_repo.get_all_labels()
         labels_list = list()
         if node_labels:
             node_labels_id_list = [label.label_id for label in node_labels]
             label_obj_list = label_repo.get_labels_by_label_ids(node_labels_id_list)
             labels_name_list = [label.label_name for label in label_obj_list]
             # 如果节点添加的标签中没有windows标签,就添加进去
             if "windows" not in labels_name_list:
                 labels_name_list.append("windows")
             # 去除该服务已绑定的标签
             service_labels = service_label_repo.get_service_labels(self.service.service_id)
             if service_labels:
                 service_labels_id_list = [label.label_id for label in service_labels]
                 label_obj_list = label_repo.get_labels_by_label_ids(service_labels_id_list)
                 service_labels_name_list = [label.label_name for label in label_obj_list]
                 for service_labels_name in service_labels_name_list:
                     if service_labels_name in labels_name_list:
                         labels_name_list.remove(service_labels_name)
             for labels_name in labels_name_list:
                 label_dict = dict()
                 label_oj = label_repo.get_labels_by_label_name(labels_name)
                 label_dict["label_id"] = label_oj.label_id
                 label_dict["label_alias"] = label_oj.label_alias
                 labels_list.append(label_dict)
         # 暂时只支持除节点标签外的windows标签
         else:
             label_name = "windows"
             label_dict = dict()
             win_label = label_repo.get_labels_by_label_name(label_name)
             label_dict["label_id"] = win_label.label_id
             label_dict["label_alias"] = win_label.label_alias
             labels_list.append(label_dict)
         result = general_message(200, "success", "查询成功", list=labels_list)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
     return Response(result, status=result["code"])