From c70b69ea7ea5600ca6c5522bf56b57739ac09953 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Sun, 15 Feb 2026 11:31:43 +0000 Subject: [PATCH] Add getMetrics API endpoint for time range metrics --- src/Controllers/Api/MetricsController.php | 43 +++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/Controllers/Api/MetricsController.php b/src/Controllers/Api/MetricsController.php index b7077d7..4751b87 100755 --- a/src/Controllers/Api/MetricsController.php +++ b/src/Controllers/Api/MetricsController.php @@ -237,6 +237,49 @@ class MetricsController extends Model return $response->withHeader('Content-Type', 'application/json'); } + public function getMetrics(Request $request, Response $response, $args) + { + $serverId = $args['id']; + $from = $request->getQueryParams()['from'] ?? date('Y-m-d H:i:s', strtotime('-24 hours')); + $to = $request->getQueryParams()['to'] ?? date('Y-m-d H:i:s'); + + $stmt = $this->pdo->prepare(" + SELECT sm.value, mn.name, mn.unit, sm.created_at + FROM server_metrics sm + JOIN metric_names mn ON sm.metric_name_id = mn.id + WHERE sm.server_id = :id + AND sm.created_at BETWEEN :from AND :to + AND mn.name NOT LIKE '%_proc' + ORDER BY sm.created_at ASC + "); + $stmt->execute([':id' => $serverId, ':from' => $from, ':to' => $to]); + $metrics = $stmt->fetchAll(); + + $grouped = []; + foreach ($metrics as $m) { + $name = $m['name']; + if (!isset($grouped[$name])) { + $grouped[$name] = []; + } + $grouped[$name][] = [ + 'value' => (float)$m['value'], + 'time' => $m['created_at'], + 'unit' => $m['unit'] + ]; + } + + $data = [ + 'server_id' => (int)$serverId, + 'from' => $from, + 'to' => $to, + 'points_count' => count($metrics), + 'metrics' => $grouped + ]; + + $response->getBody()->write(json_encode($data)); + return $response->withHeader('Content-Type', 'application/json'); + } + private function checkThresholds($serverId, $metricId, $value, $metricName) { // Получаем пороговые значения для этой метрики на этом сервере