🐶 Sync 2025-11-21 00:13:07

This commit is contained in:
actions-user
2025-11-21 00:13:07 +08:00
parent 9f875d34af
commit 560276e7e4
18 changed files with 940 additions and 34 deletions

View File

@@ -807,22 +807,22 @@ return view.extend({
return (value * 100).toFixed(2) + '%';
}
// 查询数卡片(合并成功率)
// 查询和响应数量卡片
// 使用后端返回的 total_queries 和 total_responses
var queryCount = stats.total_queries || 0;
var responseCount = stats.total_responses || 0;
var totalQueriesCard = E('div', { 'class': 'cbi-section' }, [
E('div', { 'class': 'stats-card-title' }, _('Total Queries')),
E('div', { 'class': 'stats-card-main-value' }, (stats.total_queries || 0).toLocaleString()),
E('div', { 'class': 'stats-card-title' }, _('Query & Response')),
E('div', { 'class': 'stats-card-main-value' }, (queryCount + responseCount || 0).toLocaleString()),
E('div', { 'class': 'stats-card-details' }, [
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Success Rate') + ':'),
E('span', { 'class': 'stats-detail-value' }, formatPercent(stats.success_rate || 0))
E('span', { 'class': 'stats-detail-label' }, _('Queries') + ':'),
E('span', { 'class': 'stats-detail-value' }, queryCount.toLocaleString())
]),
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Success') + ':'),
E('span', { 'class': 'stats-detail-value' }, (stats.success_count || 0).toLocaleString())
]),
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Failure') + ':'),
E('span', { 'class': 'stats-detail-value' }, (stats.failure_count || 0).toLocaleString())
E('span', { 'class': 'stats-detail-label' }, _('Responses') + ':'),
E('span', { 'class': 'stats-detail-value' }, responseCount.toLocaleString())
])
])
]);
@@ -832,8 +832,12 @@ return view.extend({
// 响应时间卡片
statsGrid.appendChild(E('div', { 'class': 'cbi-section' }, [
E('div', { 'class': 'stats-card-title' }, _('Response Time')),
E('div', { 'class': 'stats-card-main-value' }, (stats.avg_response_time_ms || 0).toFixed(2) + ' ' + _('ms')),
E('div', { 'class': 'stats-card-main-value' }, Math.round(stats.latest_response_time_ms || 0) + ' ' + _('ms')),
E('div', { 'class': 'stats-card-details' }, [
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Average Response Time') + ':'),
E('span', { 'class': 'stats-detail-value' }, (stats.avg_response_time_ms || 0).toFixed(2) + ' ' + _('ms'))
]),
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Min Response Time') + ':'),
E('span', { 'class': 'stats-detail-value' }, (stats.min_response_time_ms || 0) + ' ' + _('ms'))
@@ -841,10 +845,6 @@ return view.extend({
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Max Response Time') + ':'),
E('span', { 'class': 'stats-detail-value' }, (stats.max_response_time_ms || 0) + ' ' + _('ms'))
]),
E('div', { 'class': 'stats-detail-row' }, [
E('span', { 'class': 'stats-detail-label' }, _('Latest Response Time') + ':'),
E('span', { 'class': 'stats-detail-value' }, (stats.latest_response_time_ms || 0) + ' ' + _('ms'))
])
])
]));

View File

@@ -225,6 +225,10 @@ return view.extend({
padding: 4px 10px;
font-size: 0.875rem;
}
#history-retention {
border: 1px solid rgba(107, 114, 128, 0.4);
}
.bandix-alert {
border-radius: 4px;
@@ -413,6 +417,28 @@ return view.extend({
opacity: 0.6;
font-size: 0.75rem;
}
.device-last-online {
font-size: 0.75rem;
color: #6b7280;
}
.device-last-online-value {
color: #9ca3af;
}
.device-last-online-exact {
display: none;
color: #9ca3af;
}
.device-last-online:hover .device-last-online-value {
display: none;
}
.device-last-online:hover .device-last-online-exact {
display: inline;
}
.traffic-info {
display: flex;
@@ -1930,6 +1956,31 @@ function formatLastOnlineTime(lastOnlineTs) {
return yearsDiff + _('years ago');
}
// 精确时间格式
function formatLastOnlineExactTime(lastOnlineTs) {
if (!lastOnlineTs || lastOnlineTs <= 0) {
return '-';
}
var lastOnlineTime = lastOnlineTs < 1000000000000 ? lastOnlineTs * 1000 : lastOnlineTs;
var date = new Date(lastOnlineTime);
if (isNaN(date.getTime())) {
return '-';
}
function pad(value) {
return value < 10 ? '0' + value : value;
}
return date.getFullYear() + '-' +
pad(date.getMonth() + 1) + '-' +
pad(date.getDate()) + ' ' +
pad(date.getHours()) + ':' +
pad(date.getMinutes()) + ':' +
pad(date.getSeconds());
}
function formatRetentionSeconds(seconds) {
if (!seconds || seconds <= 0) return '';
var value;
@@ -2565,13 +2616,14 @@ function formatRetentionSeconds(seconds) {
}
// 添加 MAC 和最后上线信息
deviceInfoElements.push(
E('div', { 'class': 'device-mac' }, device.mac),
E('div', { 'class': 'device-last-online' }, [
E('span', { 'style': 'color: #6b7280; font-size: 0.75rem;' }, _('Last Online') + ': '),
E('span', { 'style': 'color: #9ca3af; font-size: 0.75rem;' }, formatLastOnlineTime(device.last_online_ts))
])
);
deviceInfoElements.push(
E('div', { 'class': 'device-mac' }, device.mac),
E('div', { 'class': 'device-last-online' }, [
E('span', {}, _('Last Online') + ': '),
E('span', { 'class': 'device-last-online-value' }, formatLastOnlineTime(device.last_online_ts)),
E('span', { 'class': 'device-last-online-exact' }, formatLastOnlineExactTime(device.last_online_ts))
])
);
}
var row = E('tr', {}, [