"""Dashboard statistics building and cache key constants.""" # Cache keys used by views CACHE_KEY_STATS = "dashboard_stats" CACHE_KEY_AUDITS = "dashboard_audits" CACHE_KEY_CURRENT_CLUSTER = "dashboard_current_cluster" CACHE_KEY_SOURCE_STATUS = "dashboard_source_status" # Empty structures for skeleton context (same shape as build_stats output) EMPTY_FLAVORS = { "first_common_flavor": {"name": "—", "count": 0}, "second_common_flavor": None, "third_common_flavor": None, } def build_stats(metrics: dict, region_name: str, flavors: dict) -> dict: """ Build stats dict from raw metrics and OpenStack-derived data. Returns region, pcpu, vcpu, pram, vram, vm, flavors (no audits/current_cluster). """ hosts_total = metrics.get("hosts_total") or 1 pcpu_total = metrics.get("pcpu_total", 0) pcpu_usage = metrics.get("pcpu_usage", 0) vcpu_allocated = metrics.get("vcpu_allocated", 0) vcpu_overcommit_max = metrics.get("vcpu_overcommit_max", 0) pram_total = metrics.get("pram_total", 0) pram_usage = metrics.get("pram_usage", 0) vram_allocated = metrics.get("vram_allocated", 0) vram_overcommit_max = metrics.get("vram_overcommit_max", 0) vm_count = metrics.get("vm_count", 0) vm_active = metrics.get("vm_active", 0) vcpu_total = pcpu_total * vcpu_overcommit_max vram_total = pram_total * vram_overcommit_max return { "region": {"name": region_name, "hosts_total": hosts_total}, "pcpu": { "total": pcpu_total, "usage": pcpu_usage, "free": pcpu_total - pcpu_usage, "used_percentage": (pcpu_usage / pcpu_total * 100) if pcpu_total else 0, }, "vcpu": { "total": vcpu_total, "allocated": vcpu_allocated, "free": vcpu_total - vcpu_allocated, "allocated_percentage": (vcpu_allocated / vcpu_total * 100) if vcpu_total else 0, "overcommit_ratio": (vcpu_allocated / pcpu_total) if pcpu_total else 0, "overcommit_max": vcpu_overcommit_max, }, "pram": { "total": pram_total, "usage": pram_usage, "free": pram_total - pram_usage, "used_percentage": (pram_usage / pram_total * 100) if pram_total else 0, }, "vram": { "total": vram_total, "allocated": vram_allocated, "free": vram_total - vram_allocated, "allocated_percentage": (vram_allocated / vram_total * 100) if vram_total else 0, "overcommit_ratio": (vram_allocated / pram_total) if pram_total else 0, "overcommit_max": vram_overcommit_max, }, "vm": { "count": vm_count, "active": vm_active, "stopped": vm_count - vm_active, "avg_cpu": vcpu_allocated / vm_count if vm_count else 0, "avg_ram": vram_allocated / vm_count if vm_count else 0, "density": vm_count / hosts_total if hosts_total else 0, }, "flavors": flavors, }