azext_edge/edge/providers/check/akri.py (74 lines of code) (raw):
# coding=utf-8
# ----------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License file in the project root for license information.
# ----------------------------------------------------------------------------------------------
from rich.padding import Padding
from typing import Any, Dict, List
from azext_edge.edge.providers.check.base.pod import evaluate_pod_health
from ..support.akri import AKRI_NAME_LABEL_V2
from ..base import get_namespaced_pods_by_prefix
from .base import (
CheckManager,
check_post_deployment,
filter_resources_by_name,
get_resources_grouped_by_namespace,
)
from .common import (
AKRI_PREFIX,
PADDING_SIZE,
CoreServiceResourceKinds,
ResourceOutputDetailLevel,
)
def check_akri_deployment(
as_list: bool = False,
detail_level: int = ResourceOutputDetailLevel.summary.value,
resource_kinds: List[str] = None,
resource_name: str = None,
) -> List[dict]:
evaluate_funcs = {
CoreServiceResourceKinds.RUNTIME_RESOURCE: evaluate_core_service_runtime,
}
return check_post_deployment(
evaluate_funcs=evaluate_funcs,
as_list=as_list,
detail_level=detail_level,
resource_kinds=resource_kinds,
resource_name=resource_name,
)
def evaluate_core_service_runtime(
as_list: bool = False,
detail_level: int = ResourceOutputDetailLevel.summary.value,
resource_name: str = None,
) -> Dict[str, Any]:
check_manager = CheckManager(check_name="evalCoreServiceRuntime", check_desc="Evaluate Akri core service")
padding = 6
akri_runtime_resources: List[dict] = get_namespaced_pods_by_prefix(
prefix=AKRI_PREFIX,
namespace="",
label_selector=AKRI_NAME_LABEL_V2,
)
if resource_name:
akri_runtime_resources = filter_resources_by_name(
resources=akri_runtime_resources,
resource_name=resource_name,
)
if not akri_runtime_resources:
check_manager.add_target(target_name=CoreServiceResourceKinds.RUNTIME_RESOURCE.value)
check_manager.add_display(
target_name=CoreServiceResourceKinds.RUNTIME_RESOURCE.value,
display=Padding("Unable to fetch pods.", (0, 0, 0, padding + 2)),
)
for namespace, pods in get_resources_grouped_by_namespace(akri_runtime_resources):
check_manager.add_target(target_name=CoreServiceResourceKinds.RUNTIME_RESOURCE.value, namespace=namespace)
check_manager.add_display(
target_name=CoreServiceResourceKinds.RUNTIME_RESOURCE.value,
namespace=namespace,
display=Padding(
f"Akri runtime resources in namespace {{[purple]{namespace}[/purple]}}", (0, 0, 0, padding)
),
)
evaluate_pod_health(
check_manager=check_manager,
target=CoreServiceResourceKinds.RUNTIME_RESOURCE.value,
namespace=namespace,
padding=padding + PADDING_SIZE,
pods=pods,
detail_level=detail_level,
)
return check_manager.as_dict(as_list)