From 3f3eacaefc703a46129222cc6a13f1e880effe2a Mon Sep 17 00:00:00 2001 From: mirivlad Date: Sat, 14 Feb 2026 17:31:26 +0000 Subject: [PATCH] Properly add process tooltip function --- public/index.php | 2 +- src/Controllers/Api/MetricsController.php | 40 ++++++++++++++++++----- templates/servers/detail.twig | 39 ++++++++++++++++++++++ 3 files changed, 71 insertions(+), 10 deletions(-) diff --git a/public/index.php b/public/index.php index b2b2d6c..1bc1d60 100644 --- a/public/index.php +++ b/public/index.php @@ -191,7 +191,7 @@ $adminGroup = $app->group('/admin', function ($group) use ($adminController) { // API route for agents (public, no auth middleware, no csrf) $app->post('/api/v1/metrics', [$metricsController, 'collectMetrics']); $app->get("/api/v1/agent/{id}/services", [$metricsController, 'getServices'])->add(AuthMiddleware::class); -$app->get("/api/v1/agent/{id}/processes", [$metricsController, "getProcesses"])->add(AuthMiddleware::class); +$app->get("/api/v1/agent/{id}/processes", [$metricsController, "getProcesses"]); // Agent configuration routes (protected with auth middleware and csrf) $agentGroup = $app->group('/agent', function ($group) use ($agentController) { diff --git a/src/Controllers/Api/MetricsController.php b/src/Controllers/Api/MetricsController.php index fb0e46d..4829d51 100755 --- a/src/Controllers/Api/MetricsController.php +++ b/src/Controllers/Api/MetricsController.php @@ -161,11 +161,23 @@ class MetricsController extends Model $timeParam = $request->getQueryParams()['time'] ?? null; if (!$timeParam) { - return $response->withStatus(400); + return $response->withStatus(400)->getBody()->write(json_encode(['error' => 'Time parameter required'])); } - // Форматируем время для запроса - $time = date('Y-m-d H:i:s', strtotime($timeParam)); + // Пытаемся распознать различные форматы времени + $timestamp = strtotime($timeParam); + + // Если время только в формате HH:MM, добавляем сегодняшнюю дату + if ($timestamp === false && preg_match('/^\d{1,2}:\d{2}$/', $timeParam)) { + $today = date('Y-m-d'); + $timestamp = strtotime($today . ' ' . $timeParam); + } + + if ($timestamp === false) { + return $response->withStatus(400)->getBody()->write(json_encode(['error' => 'Invalid time format'])); + } + + $time = date('Y-m-d H:i:s', $timestamp); // Получаем топ-процессы CPU для указанного времени $stmt = $this->pdo->prepare(" @@ -174,11 +186,16 @@ class MetricsController extends Model JOIN metric_names mn ON sm.metric_name_id = mn.id WHERE sm.server_id = :server_id AND mn.name = 'top_cpu_proc' - AND sm.created_at BETWEEN DATE_SUB(:time, INTERVAL 5 SECOND) AND DATE_ADD(:time, INTERVAL 5 SECOND) - ORDER BY ABS(TIMESTAMPDIFF(SECOND, sm.created_at, :time)) + AND sm.created_at BETWEEN DATE_SUB(:time1, INTERVAL 5 SECOND) AND DATE_ADD(:time2, INTERVAL 5 SECOND) + ORDER BY ABS(TIMESTAMPDIFF(SECOND, sm.created_at, :time3)) LIMIT 1 "); - $stmt->execute([':server_id' => $serverId, ':time' => $time]); + $stmt->execute([ + ':server_id' => $serverId, + ':time1' => $time, + ':time2' => $time, + ':time3' => $time + ]); $topCpuResult = $stmt->fetch(); // Получаем топ-процессы RAM для указанного времени @@ -188,11 +205,16 @@ class MetricsController extends Model JOIN metric_names mn ON sm.metric_name_id = mn.id WHERE sm.server_id = :server_id AND mn.name = 'top_ram_proc' - AND sm.created_at BETWEEN DATE_SUB(:time, INTERVAL 5 SECOND) AND DATE_ADD(:time, INTERVAL 5 SECOND) - ORDER BY ABS(TIMESTAMPDIFF(SECOND, sm.created_at, :time)) + AND sm.created_at BETWEEN DATE_SUB(:time1, INTERVAL 5 SECOND) AND DATE_ADD(:time2, INTERVAL 5 SECOND) + ORDER BY ABS(TIMESTAMPDIFF(SECOND, sm.created_at, :time3)) LIMIT 1 "); - $stmt->execute([':server_id' => $serverId, ':time' => $time]); + $stmt->execute([ + ':server_id' => $serverId, + ':time1' => $time, + ':time2' => $time, + ':time3' => $time + ]); $topRamResult = $stmt->fetch(); $topCpu = []; diff --git a/templates/servers/detail.twig b/templates/servers/detail.twig index 9a2f4c9..bc6851f 100755 --- a/templates/servers/detail.twig +++ b/templates/servers/detail.twig @@ -384,6 +384,45 @@