From 38dc985545ec0fc365f6553143c4dd84f291f9e9 Mon Sep 17 00:00:00 2001 From: Aleksandr Tcitlionok <803797+terghalin@users.noreply.github.com> Date: Thu, 5 Dec 2024 07:22:32 +0000 Subject: [PATCH] fix(k8s): round core count --- app/routes/export.py | 31 ++++++++++++++++--------------- app/routes/k8s.py | 32 ++++++++++++++++---------------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/app/routes/export.py b/app/routes/export.py index 34fe0eb..5a08e45 100644 --- a/app/routes/export.py +++ b/app/routes/export.py @@ -8,19 +8,19 @@ import logging router = APIRouter() # Helper functions for conversions -def convert_cpu_to_millicores(cpu): +def convert_cpu_to_cores(cpu): """ - Convert CPU usage to millicores (m). + Convert CPU usage to cores for human-readable format. Handles units: n (nano), u (micro), m (milli), or none (cores). + Returns float values for cores, rounded appropriately. """ - if "n" in cpu: # Convert nanocores to millicores - return int(cpu.replace("n", "")) / 1e6 - elif "u" in cpu: # Convert microcores to millicores - return int(cpu.replace("u", "")) / 1e3 - elif "m" in cpu: # Already in millicores - return int(cpu.replace("m", "")) - return float(cpu) * 1000 # Convert cores to millicores - + if "n" in cpu: # Nanocores to cores + return round(int(cpu.replace("n", "")) / 1e9, 4) + elif "u" in cpu: # Microcores to cores + return round(int(cpu.replace("u", "")) / 1e6, 4) + elif "m" in cpu: # Millicores to cores + return round(int(cpu.replace("m", "")) / 1000, 4) + return float(cpu) # Already in cores def convert_memory_to_mib(memory): if "Ki" in memory: @@ -62,21 +62,22 @@ def fetch_k8s_data_with_usage(): cpu_usage = container["usage"]["cpu"] memory_usage = container["usage"]["memory"] - # Convert CPU to millicores and memory to MiB - namespace_usage[pod_namespace]["cpu"] += convert_cpu_to_millicores(cpu_usage) + # Convert CPU to cores and memory to MiB + namespace_usage[pod_namespace]["cpu"] += convert_cpu_to_cores(cpu_usage) namespace_usage[pod_namespace]["memory"] += convert_memory_to_mib(memory_usage) - # Convert usage to serializable types + # Round and format usage for readability namespace_usage = { ns: { - "cpu": round(usage["cpu"], 2), # Round to 2 decimal places for readability - "memory": round(usage["memory"], 2), + "cpu": round(usage["cpu"], 4), # Round to 4 decimal places + "memory": round(usage["memory"], 2), # Memory in MiB } for ns, usage in namespace_usage.items() } return {"nodes": nodes, "namespaces": namespaces, "namespace_usage": namespace_usage} + # Export endpoint @router.get("/export") def export_data(format: str = "yaml"): diff --git a/app/routes/k8s.py b/app/routes/k8s.py index 0938f61..7435d1c 100644 --- a/app/routes/k8s.py +++ b/app/routes/k8s.py @@ -5,7 +5,7 @@ import math router = APIRouter() def fetch_k8s_data_with_usage(): - config.load_incluster_config() # Use in-cluster configuration + config.load_incluster_config() v1 = client.CoreV1Api() metrics_client = client.CustomObjectsApi() @@ -34,15 +34,15 @@ def fetch_k8s_data_with_usage(): cpu_usage = container["usage"]["cpu"] memory_usage = container["usage"]["memory"] - # Convert CPU to millicores and memory to MiB - namespace_usage[pod_namespace]["cpu"] += convert_cpu_to_millicores(cpu_usage) + # Convert CPU to cores and memory to MiB + namespace_usage[pod_namespace]["cpu"] += convert_cpu_to_cores(cpu_usage) namespace_usage[pod_namespace]["memory"] += convert_memory_to_mib(memory_usage) - # Convert usage to serializable types + # Round and format usage for readability namespace_usage = { ns: { - "cpu": round(usage["cpu"], 2), # Round to 2 decimal places for readability - "memory": round(usage["memory"], 2), + "cpu": round(usage["cpu"], 4), # Round to 4 decimal places + "memory": round(usage["memory"], 2), # Memory in MiB } for ns, usage in namespace_usage.items() } @@ -50,19 +50,19 @@ def fetch_k8s_data_with_usage(): return {"nodes": nodes, "namespaces": namespaces, "namespace_usage": namespace_usage} -def convert_cpu_to_millicores(cpu): +def convert_cpu_to_cores(cpu): """ - Convert CPU usage to millicores (m). + Convert CPU usage to cores for human-readable format. Handles units: n (nano), u (micro), m (milli), or none (cores). + Returns float values for cores, rounded appropriately. """ - if "n" in cpu: # Convert nanocores to millicores - return int(cpu.replace("n", "")) / 1e6 - elif "u" in cpu: # Convert microcores to millicores - return int(cpu.replace("u", "")) / 1e3 - elif "m" in cpu: # Already in millicores - return int(cpu.replace("m", "")) - return float(cpu) * 1000 # Convert cores to millicores - + if "n" in cpu: # Nanocores to cores + return round(int(cpu.replace("n", "")) / 1e9, 4) + elif "u" in cpu: # Microcores to cores + return round(int(cpu.replace("u", "")) / 1e6, 4) + elif "m" in cpu: # Millicores to cores + return round(int(cpu.replace("m", "")) / 1000, 4) + return float(cpu) # Already in cores def convert_memory_to_mib(memory): if "Ki" in memory: