🐶 Sync 2025-11-21 00:13:07
This commit is contained in:
@@ -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'))
|
||||
])
|
||||
])
|
||||
]));
|
||||
|
||||
@@ -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', {}, [
|
||||
|
||||
Reference in New Issue
Block a user