Add getMetrics API endpoint for time range metrics
This commit is contained in:
parent
3575e1843e
commit
c70b69ea7e
|
|
@ -237,6 +237,49 @@ class MetricsController extends Model
|
||||||
return $response->withHeader('Content-Type', 'application/json');
|
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)
|
private function checkThresholds($serverId, $metricId, $value, $metricName)
|
||||||
{
|
{
|
||||||
// Получаем пороговые значения для этой метрики на этом сервере
|
// Получаем пороговые значения для этой метрики на этом сервере
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue