Ejemplo n.º 1
0
    def overview(self, request, project_id, cluster_id, node_ip):
        """ 节点指标总览 """
        params = self.params_validate(FetchMetricOverviewSLZ)

        # 默认包含 container_count, pod_count
        response_data = {'container_count': '0', 'pod_count': '0'}

        container_pod_count = prom.get_container_pod_count(cluster_id, node_ip)
        for count in container_pod_count.get('result') or []:
            for k, v in count['metric'].items():
                if k == 'metric_name' and count['value']:
                    response_data[v] = count['value'][1]

        # 默认使用全维度,若指定则使用指定的维度
        dimensions = params.get('dimensions') or [
            dim for dim in constants.MetricDimension
        ]

        for dimension in dimensions:
            if dimension not in constants.NODE_DIMENSIONS_FUNC:
                raise error_codes.APIError(
                    _("节点指标维度 {} 不合法").format(dimension))

            dimension_func = constants.NODE_DIMENSIONS_FUNC[dimension]
            response_data[dimension] = dimension_func(cluster_id, node_ip)

        return Response(response_data)
Ejemplo n.º 2
0
    def overview(self, request, project_id, cluster_id):
        """节点列表快照数据
        """
        data = self.get_validated_data(request)
        ip = data["res_id"]

        # 默认包含container_count, pod_count
        data = {
            "container_count": "0",
            "pod_count": "0",
        }

        container_pod_count = prometheus.get_container_pod_count(
            cluster_id, ip)
        for count in container_pod_count.get("result") or []:
            for k, v in count["metric"].items():
                if k == "metric_name" and count["value"]:
                    data[v] = count["value"][1]

        # 其他维度数据动态请求
        dimensions_func = {
            "cpu_usage": prometheus.get_node_cpu_usage,
            "memory_usage": prometheus.get_node_memory_usage,
            "disk_usage": prometheus.get_node_disk_usage,
            "diskio_usage": prometheus.get_node_diskio_usage,
            "mesos_memory_usage": prometheus.mesos_agent_memory_usage,
            "mesos_cpu_usage": prometheus.mesos_agent_cpu_usage,
            "mesos_ip_remain_count": prometheus.mesos_agent_ip_remain_count,
        }

        # 默认4个维度, 和老接口兼容
        dimensions = request.GET.get("dimensions")
        if not dimensions:
            dimensions = [
                "cpu_usage", "memory_usage", "disk_usage", "diskio_usage"
            ]
        else:
            dimensions = dimensions.split(",")

        for dimension in dimensions:
            if dimension not in dimensions_func:
                raise error_codes.APIError(_("dimension not valid"))

            func = dimensions_func[dimension]
            result = func(cluster_id, ip)
            data[dimension] = result

        return response.Response(data)