diff --git a/cron/aggregate_metrics.php b/cron/aggregate_metrics.php index facf182..d2d8aa3 100755 --- a/cron/aggregate_metrics.php +++ b/cron/aggregate_metrics.php @@ -16,7 +16,7 @@ $pdo = new PDO("mysql:host={$config['host']};dbname={$config['db_name']};charset // Вычисляем период - прошлый час (00:00 - 00:59) $hourStart = new DateTime(); $hourStart->modify('-1 hour'); -$hourStart->setMinute(0)->setSecond(0); +$hourStart->setTime((int)$hourStart->format('H'), 0, 0); $hourEnd = clone $hourStart; $hourEnd->modify('+59 minutes +59 seconds'); @@ -25,7 +25,7 @@ $periodStartStr = $hourStart->format('Y-m-d H:i:s'); $periodEndStr = $hourEnd->format('Y-m-d H:i:s'); // Получаем все серверы -$stmt = $pdo->query("SELECT id FROM servers WHERE deleted_at IS NULL"); +$stmt = $pdo->query("SELECT id FROM servers"); $servers = $stmt->fetchAll(PDO::FETCH_COLUMN); $processed = 0; @@ -39,14 +39,16 @@ foreach ($servers as $serverId) { sm.server_id, sm.metric_name_id, :period_start, - AVG(sm.value), - MIN(sm.value), - MAX(sm.value), + AVG(CAST(sm.value AS DECIMAL(20,4))), + MIN(CAST(sm.value AS DECIMAL(20,4))), + MAX(CAST(sm.value AS DECIMAL(20,4))), COUNT(*) FROM server_metrics sm + INNER JOIN metric_names mn ON sm.metric_name_id = mn.id WHERE sm.server_id = :server_id AND sm.created_at >= :start_date AND sm.created_at <= :end_date + AND mn.name NOT IN ('top_cpu_proc', 'top_ram_proc') GROUP BY sm.server_id, sm.metric_name_id ON DUPLICATE KEY UPDATE avg_value = VALUES(avg_value), diff --git a/cron/backfill_trends.php b/cron/backfill_trends.php index 7eb9a7b..b146c94 100755 --- a/cron/backfill_trends.php +++ b/cron/backfill_trends.php @@ -15,7 +15,7 @@ $errors = 0; for ($i = 1; $i <= $hours; $i++) { $hourStart = new DateTime(); $hourStart->modify("-{$i} hour"); - $hourStart->setMinute(0)->setSecond(0); + $hourStart->setTime((int)$hourStart->format('H'), 0, 0); $hourEnd = clone $hourStart; $hourEnd->modify('+59 minutes +59 seconds'); @@ -24,24 +24,27 @@ for ($i = 1; $i <= $hours; $i++) { $periodEndStr = $hourEnd->format('Y-m-d H:59:59'); // Получаем все серверы - $stmt = $pdo->query("SELECT id FROM servers WHERE deleted_at IS NULL"); + $stmt = $pdo->query("SELECT id FROM servers"); $servers = $stmt->fetchAll(PDO::FETCH_COLUMN); foreach ($servers as $serverId) { + // Исключаем метрики с JSON данными (top_cpu_proc, top_ram_proc) $sql = " INSERT INTO server_metrics_trends (server_id, metric_name_id, period_start, avg_value, min_value, max_value, count_samples) SELECT sm.server_id, sm.metric_name_id, :period_start, - AVG(sm.value), - MIN(sm.value), - MAX(sm.value), + AVG(CAST(sm.value AS DECIMAL(20,4))), + MIN(CAST(sm.value AS DECIMAL(20,4))), + MAX(CAST(sm.value AS DECIMAL(20,4))), COUNT(*) FROM server_metrics sm + INNER JOIN metric_names mn ON sm.metric_name_id = mn.id WHERE sm.server_id = :server_id AND sm.created_at >= :start_date AND sm.created_at <= :end_date + AND mn.name NOT IN ('top_cpu_proc', 'top_ram_proc') GROUP BY sm.server_id, sm.metric_name_id ON DUPLICATE KEY UPDATE avg_value = VALUES(avg_value), diff --git a/src/Controllers/ServerDetailController.php b/src/Controllers/ServerDetailController.php index aae524f..9c2626b 100755 --- a/src/Controllers/ServerDetailController.php +++ b/src/Controllers/ServerDetailController.php @@ -333,6 +333,19 @@ class ServerDetailController extends Model 'server' => $server, 'metrics' => $groupedMetrics, 'displayMetrics' => $displayMetrics, + // Группировка метрик по категориям для отдельных секций + 'diskMetrics' => array_filter($groupedMetrics, function($key) { + return str_starts_with($key, 'disk_used_'); + }, ARRAY_FILTER_USE_KEY), + 'tempMetrics' => array_filter($groupedMetrics, function($key) { + return str_starts_with($key, 'temp_'); + }, ARRAY_FILTER_USE_KEY), + 'netInMetrics' => array_filter($groupedMetrics, function($key) { + return str_starts_with($key, 'net_in_'); + }, ARRAY_FILTER_USE_KEY), + 'netOutMetrics' => array_filter($groupedMetrics, function($key) { + return str_starts_with($key, 'net_out_'); + }, ARRAY_FILTER_USE_KEY), 'allMetricTypes' => $allMetricTypes, 'existingThresholds' => $existingThresholds, 'allServices' => $allServices, diff --git a/templates/servers/detail.twig b/templates/servers/detail.twig index 0a1d832..17b2446 100755 --- a/templates/servers/detail.twig +++ b/templates/servers/detail.twig @@ -21,139 +21,17 @@ Назад к списку - - -
| Название: | -{{ server.name }} | -
| Адрес: | -{{ server.address|default('-') }} | -
| Группа: | -- {% if server.group_name %} - {{ server.group_name }} - {% else %} - - - {% endif %} - | -
| Описание: | -{{ server.description|default('-') }} | -
| Последние метрики: | -- {% if server.last_metrics_at %} - {{ server.last_metrics_at|date('d.m.Y H:i:s') }} - {% else %} - Нет данных - {% endif %} - | -
Нет данных
-