feat: Fix CPU tooltip, add uptime widget, exclude uptime from charts

- Fix CPU tooltip to show percentage value
- Add uptime widget to server detail page (right column)
- Exclude uptime metric from charts in two places
This commit is contained in:
mirivlad 2026-04-20 11:54:00 +08:00
parent cb74973a90
commit 3fecc21565
2 changed files with 38 additions and 3 deletions

View File

@ -206,6 +206,7 @@ class ServerDetailController extends Model
FROM metric_names mn
JOIN server_metrics sm ON sm.metric_name_id = mn.id
WHERE sm.server_id = :id
AND mn.name != 'uptime'
AND (
mn.name IN ('cpu_load', 'ram_used')
OR mn.name LIKE 'disk_used_%'
@ -315,6 +316,7 @@ class ServerDetailController extends Model
FROM metric_names mn
JOIN server_metrics sm ON sm.metric_name_id = mn.id
WHERE sm.server_id = :id
AND mn.name != 'uptime'
AND (
mn.name IN ('cpu_load', 'ram_used')
OR mn.name LIKE 'disk_used_%'

View File

@ -24,9 +24,9 @@
</div>
</div>
<div class="card-body">
<!-- Информация о сервере -->
<!-- Информация о сервере и аптайм -->
<div class="row mb-4">
<div class="col-md-6">
<div class="col-md-8">
<h5>Информация о сервере</h5>
<table class="table table-borderless">
<tr>
@ -63,6 +63,37 @@
</tr>
</table>
</div>
<div class="col-md-4">
<div class="card border-primary h-100">
<div class="card-header bg-primary text-white">
<h6 class="mb-0"><i class="fas fa-clock"></i> Время работы</h6>
</div>
<div class="card-body text-center d-flex flex-column justify-content-center">
{% if server.latest_metrics.uptime is defined %}
{% set uptime_sec = server.latest_metrics.uptime.value %}
<div class="mb-2">
{% if uptime_sec >= 86400 %}
<span class="badge bg-success fs-6 me-1">{{ (uptime_sec / 86400)|round(0, 'floor') }}д</span>
{% endif %}
{% if uptime_sec >= 3600 %}
<span class="badge bg-info fs-6 me-1">{{ ((uptime_sec % 86400) / 3600)|round(0, 'floor') }}ч</span>
{% endif %}
{% if uptime_sec >= 60 %}
<span class="badge bg-secondary fs-6">{{ ((uptime_sec % 3600) / 60)|round(0, 'floor') }}м</span>
{% endif %}
</div>
<small class="text-muted">
<i class="fas fa-play"></i> {{ server.created_at|date('d.m.Y H:i') }}
</small>
{% else %}
<div class="text-muted">
<i class="fas fa-clock fa-2x mb-2"></i>
<p class="mb-0">Нет данных</p>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<!-- Вкладки -->
@ -750,8 +781,8 @@ const chart{{ metricName|replace({'-': '_', '.': '_'}) }} = new Chart(ctx{{ metr
lines.push('Занято: ' + diskUsed + ' ГБ');
lines.push('Свободно: ' + diskFree + ' ГБ');
{% else %}
lines.push('Значение: ' + data{{ metricName }}[dataIndex]);
{% if metricName == 'cpu_load' %}
lines.push('CPU: ' + data{{ metricName }}[dataIndex] + '%');
if (data.top_cpu && data.top_cpu.length > 0) {
lines.push('');
lines.push('TOP CPU:');
@ -759,6 +790,8 @@ const chart{{ metricName|replace({'-': '_', '.': '_'}) }} = new Chart(ctx{{ metr
lines.push(' ' + ((proc.cmdline || '').trim() || proc.name) + ': ' + proc.value + '%');
});
}
{% else %}
lines.push('Значение: ' + data{{ metricName }}[dataIndex]);
{% endif %}
{% endif %}