Skip to content

Commit d7739be

Browse files
committed
refactor: optimize kms monitor page charts
1 parent 0833ec5 commit d7739be

File tree

4 files changed

+68
-50
lines changed

4 files changed

+68
-50
lines changed

app/pages/monitor.vue

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ definePageMeta({
66
const monitorData = useState<MonitorInfo[]>('monitorData')
77
88
function getColor(value: number): string {
9+
if (value < 0) return '#d9d9d9'
910
if (value < 200) return '#52c41a'
1011
if (value < 500) return '#faad14'
1112
return '#f5222d'
@@ -29,17 +30,19 @@ function getChartOption(item: MonitorInfo): ECOption {
2930
trigger: 'axis',
3031
},
3132
grid: {
33+
containLabel: true,
3234
left: 0,
33-
right: 16,
35+
right: 24,
3436
top: 8,
3537
bottom: 8,
36-
containLabel: true,
3738
},
3839
xAxis: {
3940
type: 'category',
4041
data: times,
4142
},
4243
yAxis: {
44+
max: 999,
45+
min: 0,
4346
type: 'value',
4447
show: false,
4548
},
@@ -56,10 +59,14 @@ function getChartOption(item: MonitorInfo): ECOption {
5659
</script>
5760

5861
<template>
59-
<div class="flex w-full flex-col gap-4">
62+
<div class="flex w-full flex-col gap-4" ref="monitor">
6063
<template v-for="item in monitorData" :key="item.host">
6164
<ACard :title="item.host">
62-
<VChart :option="getChartOption(item)" class="h-24 w-full" />
65+
<VChart
66+
:autoresize="true"
67+
:option="getChartOption(item)"
68+
class="h-32 w-full"
69+
/>
6370
</ACard>
6471
</template>
6572
</div>

server/api/monitor.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
export default defineEventHandler(async () => {
22
const results = await Promise.all(
3-
monitorList.map(async (host) => {
4-
let data = await storage.getItem<MonitorData[]>(`${host}.json`);
3+
monitorList.map(async host => {
4+
let data = await storage.getItem<MonitorData[]>(`${host}.json`)
55

66
if (!Array.isArray(data)) {
7-
data = [];
7+
data = []
88
}
99

10-
const total = data.length;
10+
const total = data.length
1111

12-
const success = data.filter(({ status }) => status).length;
12+
const success = data.filter(({ status }) => status).length
1313

14-
const fail = total - success;
14+
const fail = total - success
1515

16-
const delay = data.reduce((acc, { delay }) => acc + delay, 0) / total;
16+
const delay = data.reduce((acc, { delay }) => acc + delay, 0) / total
1717

1818
return {
1919
host,
@@ -22,16 +22,17 @@ export default defineEventHandler(async () => {
2222
fail,
2323
delay: delay ? Number(delay.toFixed(2)) : 0,
2424
data,
25-
};
26-
})
27-
);
25+
}
26+
}),
27+
)
2828

29+
// Sort by success rate and delay
2930
const sortedData = results.sort((a, b) => {
30-
const successRateA = a.success / a.total;
31-
const successRateB = b.success / b.total;
31+
const successRateA = a.success / a.total
32+
const successRateB = b.success / b.total
3233

33-
return successRateB - successRateA || a.delay - b.delay;
34-
});
34+
return successRateB - successRateA || a.delay - b.delay
35+
})
3536

36-
return sortedData;
37-
});
37+
return results
38+
})

server/tasks/monitor.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default defineTask({
1212
monitorData = []
1313
}
1414

15-
if (monitorData.length >= 100) {
15+
if (monitorData.length >= 120) {
1616
monitorData.shift()
1717
}
1818

@@ -27,7 +27,7 @@ export default defineTask({
2727
await storage.setItem<MonitorData[]>(`${host}.json`, monitorData)
2828

2929
return { host, status }
30-
})
30+
}),
3131
)
3232

3333
const count = results.filter(item => {
@@ -39,7 +39,7 @@ export default defineTask({
3939

4040
console.log(
4141
new Date().toISOString(),
42-
`Monitor task completed, successful: ${count}`
42+
`Monitor task completed, successful: ${count}`,
4343
)
4444

4545
return { result: 'Done' }

server/utils/kms.ts

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
1-
import { execFile } from "child_process";
2-
import { arch, platform } from "os";
1+
import { execFile } from 'child_process'
2+
import { arch, platform } from 'os'
33

4-
export const monitorList = process.env.MONITOR_LIST?.split(",") || [
5-
"kms.8b5.cn",
6-
"kms.wxlost.com",
7-
"kms.03k.org",
8-
"kms.sixyin.com",
9-
"kms.343.re",
10-
"kms.vmem.top",
11-
"kms.zhi.fun",
12-
"kms.loli.best",
13-
];
4+
export const monitorList = process.env.MONITOR_LIST?.split(',') || [
5+
'kms.8b5.cn',
6+
'kms.org.cn',
7+
'win.freekms.cn',
8+
'kms.akams.cn',
9+
'kms.bige0.com',
10+
'win.kms.pub',
11+
'windows.kms.app',
12+
'kms.zhi.fun',
13+
'kms.03k.org',
14+
'kms.chs.ink',
15+
'kms.cgtsoft.com',
16+
'kms.loli.best',
17+
'kms.litbear.cn',
18+
'kms.343.re',
19+
'kms.sixyin.com',
20+
'kms.vmem.top',
21+
'kms.wxlost.com',
22+
'kms.digiboy.ir',
23+
]
1424

1525
export const runVlmcs = ({
1626
host,
@@ -19,28 +29,28 @@ export const runVlmcs = ({
1929
edition = 26,
2030
}: RunVlmcsParams) => {
2131
return new Promise<RunVlmcsResult>((resolve, reject) => {
22-
const before = Date.now();
32+
const before = Date.now()
2333
const vlmcs = execFile(
2434
`./binaries/vlmcs-${platform()}-${arch()}`,
2535
[`${host}:${port}`, `-${protocol}`, `-l ${edition}`],
26-
{ timeout: 10 * 1000 },
36+
{ timeout: 5 * 1000 },
2737
(err, stdout) => {
2838
resolve({
2939
host,
30-
delay: Date.now() - before,
40+
delay: err ? -1 : Date.now() - before,
3141
content: stdout.trim(),
3242
status: err ? false : true,
33-
});
34-
}
35-
);
43+
})
44+
},
45+
)
3646

37-
vlmcs.on("error", (err) => {
38-
reject(err);
39-
});
47+
vlmcs.on('error', err => {
48+
reject(err)
49+
})
4050

41-
vlmcs.on("close", () => {
42-
vlmcs.removeAllListeners();
43-
vlmcs.kill();
44-
});
45-
});
46-
};
51+
vlmcs.on('close', () => {
52+
vlmcs.removeAllListeners()
53+
vlmcs.kill()
54+
})
55+
})
56+
}

0 commit comments

Comments
 (0)