Beispiel #1
0
def get_highest_usage() -> Tuple[List[ResourceUsage], List[ResourceUsage]]:

    available_pods = get_pods(label_selector=None)
    CPU_KEY = "cpu"
    MEM_KEY = "mem"
    NAME_KEY = "name"

    users_data: dict = {}
    summarized_usage = []

    for item in available_pods:
        name = item.metadata.name
        namespace = item.metadata.namespace
        # omit technical namespaces
        if namespace not in [
                "nauta", "kube-system"
        ] and item.status.phase.upper() == PodStatus.RUNNING.value:
            try:
                cpu, mem = get_top_for_pod(name=name, namespace=namespace)
                if namespace in users_data:
                    users_data.get(namespace, {}).get(CPU_KEY).append(cpu)
                    users_data.get(namespace, {}).get(MEM_KEY).append(mem)
                else:
                    users_data[namespace] = {CPU_KEY: [cpu], MEM_KEY: [mem]}
            except Exception as exe:
                logger.exception("Error during gathering pod resources usage.")

    for user_name, usage in users_data.items():
        summarized_usage.append({
            NAME_KEY:
            user_name,
            CPU_KEY:
            sum_cpu_resources_unformatted(usage.get(CPU_KEY)),
            MEM_KEY:
            sum_mem_resources_unformatted(usage.get(MEM_KEY))
        })

    top_cpu_users = sorted(summarized_usage,
                           key=itemgetter(CPU_KEY),
                           reverse=True)
    top_mem_users = sorted(summarized_usage,
                           key=itemgetter(MEM_KEY),
                           reverse=True)

    return [ResourceUsage(item[NAME_KEY], item[CPU_KEY], item[MEM_KEY]) for item in top_cpu_users], \
           [ResourceUsage(item[NAME_KEY], item[CPU_KEY], item[MEM_KEY]) for item in top_mem_users]
Beispiel #2
0
def test_get_pods_error(mocker, mocked_k8s_CoreV1Api, mocked_kubeconfig):
    mocked_k8s_CoreV1Api.list_pod_for_all_namespaces.side_effect = ApiException(
        status=500)
    with pytest.raises(ApiException):
        get_pods(label_selector='')
Beispiel #3
0
def test_get_pods_not_found(mocker, mocked_k8s_CoreV1Api, mocked_kubeconfig):
    mocked_k8s_CoreV1Api.list_pod_for_all_namespaces.side_effect = ApiException(
        status=404)
    pods = get_pods(label_selector='')
    assert pods == []
Beispiel #4
0
def test_get_pods(mocker, mocked_k8s_CoreV1Api, mocked_kubeconfig):
    pods = get_pods(label_selector='')
    assert pods