From 8f3b5bd7ce2b6a60fa8f96eadd07063c1093a566 Mon Sep 17 00:00:00 2001 From: Agent Date: Thu, 11 Jun 2026 21:46:33 -0400 Subject: [PATCH] feat: add aggregated resource usage chart to dashboard --- routes/web.php | 1 + src/Controllers/DashboardController.php | 15 +++ src/Services/MonitoringService.php | 23 ++++ views/dashboard/index.php | 156 +++++++++++++++++++++++- 4 files changed, 193 insertions(+), 2 deletions(-) diff --git a/routes/web.php b/routes/web.php index 3d1df32..6ebafb1 100755 --- a/routes/web.php +++ b/routes/web.php @@ -21,6 +21,7 @@ $router->get('/', [DashboardController::class, 'index'], [AuthMiddleware::class] $router->get('/dashboard', [DashboardController::class, 'index'], [AuthMiddleware::class]); $router->get('/dashboard/stats', [DashboardController::class, 'stats'], [AuthMiddleware::class]); $router->get('/dashboard/refresh-metrics', [DashboardController::class, 'refreshMetrics'], [AuthMiddleware::class]); +$router->get('/dashboard/chart-data', [DashboardController::class, 'chartData'], [AuthMiddleware::class]); $router->get('/login', [AuthController::class, 'loginForm']); $router->post('/login', [AuthController::class, 'login'], [CSRFMiddleware::class, RateLimitMiddleware::class]); diff --git a/src/Controllers/DashboardController.php b/src/Controllers/DashboardController.php index 91617d8..ac2d50b 100755 --- a/src/Controllers/DashboardController.php +++ b/src/Controllers/DashboardController.php @@ -34,12 +34,15 @@ class DashboardController return in_array((int) $s['id'], $accessibleIds, true); })) : []; + $aggregatedMetrics = $this->monitoringService->getAggregatedHistoricalMetrics($accessibleIds ?? []); + $recentActivity = $this->auditService->getRecentActivity(10, $userId); $this->view->display('dashboard.index', [ 'title' => 'Dashboard - ServerManager', 'stats' => $stats, 'servers' => $servers, + 'aggregatedMetrics' => $aggregatedMetrics, 'recentActivity' => $recentActivity, ]); } @@ -65,4 +68,16 @@ class DashboardController 'message' => 'Metrics refreshed', ]); } + + public function chartData(): void + { + $serverModel = new Server(); + $accessibleIds = $serverModel->getAccessibleServerIds((int) Session::get('user_id')); + $data = $this->monitoringService->getAggregatedHistoricalMetrics($accessibleIds ?? []); + + $this->view->json([ + 'success' => true, + 'data' => $data, + ]); + } } diff --git a/src/Services/MonitoringService.php b/src/Services/MonitoringService.php index 83e08cc..b5b61d2 100755 --- a/src/Services/MonitoringService.php +++ b/src/Services/MonitoringService.php @@ -173,6 +173,29 @@ class MonitoringService ); } + public function getAggregatedHistoricalMetrics(array $serverIds, int $hours = 24): array + { + if (empty($serverIds)) { + return []; + } + $placeholders = implode(',', array_fill(0, count($serverIds), '?')); + $params = $serverIds; + $params[] = $hours; + return $this->db->fetchAll( + "SELECT + DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:00') as time_bucket, + AVG(cpu_usage) as avg_cpu, + AVG(ram_usage) as avg_ram, + AVG(disk_usage) as avg_disk + FROM monitoring_history + WHERE server_id IN ({$placeholders}) + AND created_at >= DATE_SUB(NOW(), INTERVAL ? HOUR) + GROUP BY time_bucket + ORDER BY time_bucket ASC", + $params + ); + } + public function getDashboardStats(?array $serverIds = null): array { $where = ''; diff --git a/views/dashboard/index.php b/views/dashboard/index.php index d1fed38..ce828c3 100755 --- a/views/dashboard/index.php +++ b/views/dashboard/index.php @@ -2,6 +2,7 @@ $stats = $stats ?? []; $servers = $servers ?? []; $recentActivity = $recentActivity ?? []; +$aggregatedMetrics = $aggregatedMetrics ?? []; ?> +
+
+

Recursos Agregados (24h)

+
+
+ +
+
+
@@ -144,8 +154,150 @@ $recentActivity = $recentActivity ?? []; · -
-
+
+ + + + -- 2.43.0