75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
from dash import Output, Input, html
|
|
import dash_bootstrap_components as dbc
|
|
from utils.logger import get_logger
|
|
import psutil
|
|
|
|
from config.constants.system_health_constants import (
|
|
CAPACITY_GOOD_THRESHOLD, CAPACITY_WARNING_THRESHOLD,
|
|
CPU_GOOD_THRESHOLD, CPU_WARNING_THRESHOLD,
|
|
MEMORY_GOOD_THRESHOLD, MEMORY_WARNING_THRESHOLD,
|
|
DISK_GOOD_THRESHOLD, DISK_WARNING_THRESHOLD,
|
|
BYTE_TO_GB
|
|
)
|
|
|
|
logger = get_logger()
|
|
|
|
|
|
def register_system_performance_callbacks(app):
|
|
"""Register system performance metrics callbacks."""
|
|
|
|
# System Performance Metrics
|
|
@app.callback(
|
|
Output('system-performance-metrics', 'children'),
|
|
Input('interval-component', 'n_intervals')
|
|
)
|
|
def update_system_performance(n_intervals):
|
|
"""Update system performance metrics."""
|
|
try:
|
|
return _get_system_performance_metrics()
|
|
except Exception as e:
|
|
logger.error(f"Error updating system performance: {e}")
|
|
return dbc.Alert(
|
|
f"Error: {str(e)}",
|
|
color="danger",
|
|
dismissable=True
|
|
)
|
|
|
|
|
|
def _get_system_performance_metrics() -> html.Div:
|
|
"""Get system performance metrics."""
|
|
try:
|
|
cpu_percent = psutil.cpu_percent(interval=0.1)
|
|
cpu_count = psutil.cpu_count()
|
|
memory = psutil.virtual_memory()
|
|
disk = psutil.disk_usage('/')
|
|
|
|
def get_color(percent):
|
|
if percent < CAPACITY_GOOD_THRESHOLD: return "success"
|
|
if percent < CAPACITY_WARNING_THRESHOLD: return "warning"
|
|
return "danger"
|
|
|
|
return html.Div([
|
|
html.Div([
|
|
html.Strong("CPU Usage: "),
|
|
dbc.Badge(f"{cpu_percent:.1f}%", color=get_color(cpu_percent)),
|
|
html.Span(f" ({cpu_count} cores)", className="text-muted ms-1")
|
|
], className="mb-2"),
|
|
dbc.Progress(value=cpu_percent, color=get_color(cpu_percent), style={"height": "10px"}, className="mb-3"),
|
|
|
|
html.Div([
|
|
html.Strong("Memory Usage: "),
|
|
dbc.Badge(f"{memory.percent:.1f}%", color=get_color(memory.percent)),
|
|
html.Span(f" ({memory.used / BYTE_TO_GB:.1f} / {memory.total / BYTE_TO_GB:.1f} GB)", className="text-muted ms-1")
|
|
], className="mb-2"),
|
|
dbc.Progress(value=memory.percent, color=get_color(memory.percent), style={"height": "10px"}, className="mb-3"),
|
|
|
|
html.Div([
|
|
html.Strong("Disk Usage: "),
|
|
dbc.Badge(f"{disk.percent:.1f}%", color=get_color(disk.percent)),
|
|
html.Span(f" ({disk.used / BYTE_TO_GB:.1f} / {disk.total / BYTE_TO_GB:.1f} GB)", className="text-muted ms-1")
|
|
], className="mb-2"),
|
|
dbc.Progress(value=disk.percent, color=get_color(disk.percent), style={"height": "10px"})
|
|
])
|
|
|
|
except Exception as e:
|
|
return dbc.Alert(f"Error loading performance metrics: {e}", color="danger") |