fix: 修复某些边缘情况的图表显示异常 (#592)
This commit is contained in:
@@ -184,6 +184,7 @@ pub struct DashBoardResponse {
|
|||||||
|
|
||||||
#[derive(Serialize, Clone, Copy)]
|
#[derive(Serialize, Clone, Copy)]
|
||||||
pub struct SysInfo {
|
pub struct SysInfo {
|
||||||
|
pub timestamp: i64,
|
||||||
pub total_memory: u64,
|
pub total_memory: u64,
|
||||||
pub used_memory: u64,
|
pub used_memory: u64,
|
||||||
pub process_memory: u64,
|
pub process_memory: u64,
|
||||||
|
|||||||
@@ -262,6 +262,7 @@ impl WebSocketHandler {
|
|||||||
(available, total)
|
(available, total)
|
||||||
});
|
});
|
||||||
let sys_info = SysInfo {
|
let sys_info = SysInfo {
|
||||||
|
timestamp: chrono::Utc::now().timestamp_millis(),
|
||||||
total_memory: system.total_memory(),
|
total_memory: system.total_memory(),
|
||||||
used_memory: system.used_memory(),
|
used_memory: system.used_memory(),
|
||||||
process_memory: process.memory(),
|
process_memory: process.memory(),
|
||||||
|
|||||||
@@ -328,6 +328,7 @@ export interface DashBoardResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface SysInfo {
|
export interface SysInfo {
|
||||||
|
timestamp: number;
|
||||||
total_memory: number;
|
total_memory: number;
|
||||||
used_memory: number;
|
used_memory: number;
|
||||||
process_memory: number;
|
process_memory: number;
|
||||||
@@ -336,7 +337,6 @@ export interface SysInfo {
|
|||||||
total_disk: number;
|
total_disk: number;
|
||||||
used_disk: number;
|
used_disk: number;
|
||||||
available_disk: number;
|
available_disk: number;
|
||||||
uptime: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TaskStatus {
|
export interface TaskStatus {
|
||||||
|
|||||||
@@ -47,6 +47,15 @@
|
|||||||
return `${cpu.toFixed(1)}%`;
|
return `${cpu.toFixed(1)}%`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatTimestamp(timestamp: number): string {
|
||||||
|
return new Date(timestamp).toLocaleString('en-US', {
|
||||||
|
hour: '2-digit',
|
||||||
|
minute: '2-digit',
|
||||||
|
second: '2-digit',
|
||||||
|
hour12: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async function loadDashboard() {
|
async function loadDashboard() {
|
||||||
loading = true;
|
loading = true;
|
||||||
try {
|
try {
|
||||||
@@ -131,27 +140,28 @@
|
|||||||
}
|
}
|
||||||
} satisfies Chart.ChartConfig;
|
} satisfies Chart.ChartConfig;
|
||||||
|
|
||||||
let memoryHistory: Array<{ time: Date; used: number; process: number }> = [];
|
let memoryHistory: Array<{ time: number; used: number; process: number }> = [];
|
||||||
let cpuHistory: Array<{ time: Date; used: number; process: number }> = [];
|
let cpuHistory: Array<{ time: number; used: number; process: number }> = [];
|
||||||
|
|
||||||
$: if (sysInfo) {
|
$: if (sysInfo) {
|
||||||
memoryHistory = [
|
memoryHistory = [
|
||||||
...memoryHistory.slice(-19),
|
...memoryHistory.slice(-14),
|
||||||
{
|
{
|
||||||
time: new Date(),
|
time: sysInfo.timestamp,
|
||||||
used: sysInfo.used_memory,
|
used: sysInfo.used_memory,
|
||||||
process: sysInfo.process_memory
|
process: sysInfo.process_memory
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
cpuHistory = [
|
cpuHistory = [
|
||||||
...cpuHistory.slice(-19),
|
...cpuHistory.slice(-14),
|
||||||
{
|
{
|
||||||
time: new Date(),
|
time: sysInfo.timestamp,
|
||||||
used: sysInfo.used_cpu,
|
used: sysInfo.used_cpu,
|
||||||
process: sysInfo.process_cpu
|
process: sysInfo.process_cpu
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算磁盘使用率
|
// 计算磁盘使用率
|
||||||
$: diskUsagePercent = sysInfo
|
$: diskUsagePercent = sysInfo
|
||||||
? ((sysInfo.total_disk - sysInfo.available_disk) / sysInfo.total_disk) * 100
|
? ((sysInfo.total_disk - sysInfo.available_disk) / sysInfo.total_disk) * 100
|
||||||
@@ -435,13 +445,8 @@
|
|||||||
>
|
>
|
||||||
{#snippet tooltip()}
|
{#snippet tooltip()}
|
||||||
<MyChartTooltip
|
<MyChartTooltip
|
||||||
labelFormatter={(v: Date) => {
|
labelFormatter={(timestamp: number) => {
|
||||||
return v.toLocaleString('en-US', {
|
return formatTimestamp(timestamp);
|
||||||
hour: '2-digit',
|
|
||||||
minute: '2-digit',
|
|
||||||
second: '2-digit',
|
|
||||||
hour12: true
|
|
||||||
});
|
|
||||||
}}
|
}}
|
||||||
valueFormatter={(v: number) => formatBytes(v)}
|
valueFormatter={(v: number) => formatBytes(v)}
|
||||||
indicator="line"
|
indicator="line"
|
||||||
@@ -502,13 +507,8 @@
|
|||||||
>
|
>
|
||||||
{#snippet tooltip()}
|
{#snippet tooltip()}
|
||||||
<MyChartTooltip
|
<MyChartTooltip
|
||||||
labelFormatter={(v: Date) => {
|
labelFormatter={(timestamp: number) => {
|
||||||
return v.toLocaleString('en-US', {
|
return formatTimestamp(timestamp);
|
||||||
hour: '2-digit',
|
|
||||||
minute: '2-digit',
|
|
||||||
second: '2-digit',
|
|
||||||
hour12: true
|
|
||||||
});
|
|
||||||
}}
|
}}
|
||||||
valueFormatter={(v: number) => formatCpu(v)}
|
valueFormatter={(v: number) => formatCpu(v)}
|
||||||
indicator="line"
|
indicator="line"
|
||||||
|
|||||||
Reference in New Issue
Block a user