All checks were successful
CI / ci (push) Successful in 14s
- Introduced a new `stats.py` module to encapsulate dashboard statistics building and cache key constants. - Refactored `views.py` to utilize the new `build_stats` function for constructing metrics context, improving code organization and readability. - Updated Prometheus query handling to streamline metrics fetching with a new `fetch_dashboard_metrics` function. - Enhanced test cases to reflect changes in metrics fetching and context building, ensuring accurate functionality. - Added new HTML templates for displaying detailed resource allocation and flavor statistics on the dashboard.
77 lines
3.0 KiB
Python
77 lines
3.0 KiB
Python
"""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,
|
|
}
|