1
0

refactor: 将 memory checker 重命名为 mem

- 类型标识符 memory → mem
- 类名 MemoryChecker → MemChecker
- 内部类型名统一 Memory* → Mem*
- 内部函数名统一 *Memory* → *Mem*
- 目录重命名 memory/ → mem/(源码、测试、文档)
- 配置键 memory: → mem:
- 重新生成 probe-config.schema.json
- 保留中文"内存"用户提示

破坏性变更:无向后兼容
This commit is contained in:
2026-05-27 18:16:33 +08:00
parent 3390eb5e8d
commit 2f8fd8bd9c
20 changed files with 194 additions and 196 deletions

View File

@@ -0,0 +1,139 @@
import type { Systeminformation } from "systeminformation";
import { describe, expect, test } from "bun:test";
import { calculateMemStats } from "../../../../../src/server/checker/runner/mem/calculate";
function makeMemData(overrides: Partial<Systeminformation.MemData> = {}): Systeminformation.MemData {
return {
active: 4294967296,
available: 8589934592,
buffcache: 1073741824,
buffers: 536870912,
cached: 536870912,
dirty: null,
free: 4294967296,
reclaimable: 0,
slab: 0,
swapfree: 0,
swaptotal: 0,
swapused: 0,
total: 17179869184,
used: 8589934592,
writeback: null,
...overrides,
};
}
describe("calculateMemStats", () => {
test("usagePercent = activeBytes / totalBytes * 100", () => {
const stats = calculateMemStats(makeMemData({ active: 4294967296, total: 8589934592 }));
expect(stats.usagePercent).toBe(50);
});
test("usedPercent = usedBytes / totalBytes * 100", () => {
const stats = calculateMemStats(makeMemData({ total: 8589934592, used: 6442450944 }));
expect(stats.usedPercent).toBe(75);
});
test("freePercent = freeBytes / totalBytes * 100", () => {
const stats = calculateMemStats(makeMemData({ free: 2147483648, total: 8589934592 }));
expect(stats.freePercent).toBe(25);
});
test("activePercent = activeBytes / totalBytes * 100", () => {
const stats = calculateMemStats(makeMemData({ active: 3221225472, total: 8589934592 }));
expect(stats.activePercent).toBe(37.5);
});
test("availablePercent = availableBytes / totalBytes * 100", () => {
const stats = calculateMemStats(makeMemData({ available: 6442450944, total: 8589934592 }));
expect(stats.availablePercent).toBe(75);
});
test("保留 1 位小数", () => {
const stats = calculateMemStats(makeMemData({ active: 3000000000, total: 8000000000 }));
expect(stats.usagePercent).toBe(37.5);
});
test("round1 处理需要四舍五入的情况", () => {
const stats = calculateMemStats(makeMemData({ active: 3333333333, total: 10000000000 }));
expect(stats.usagePercent).toBe(33.3);
});
test("total 为 0 时百分比为 0", () => {
const stats = calculateMemStats(makeMemData({ active: 0, available: 0, free: 0, total: 0, used: 0 }));
expect(stats.usagePercent).toBe(0);
expect(stats.usedPercent).toBe(0);
expect(stats.freePercent).toBe(0);
});
test("buffcacheBytes 为 null 映射", () => {
const stats = calculateMemStats(makeMemData({ buffcache: 0 }));
expect(stats.buffcacheBytes).toBe(0);
});
test("buffcacheBytes 为正数时保留", () => {
const stats = calculateMemStats(makeMemData({ buffcache: 1073741824 }));
expect(stats.buffcacheBytes).toBe(1073741824);
});
test("所有字节字段正确映射", () => {
const data = makeMemData({
active: 1000,
available: 2000,
free: 3000,
total: 4000,
used: 3500,
});
const stats = calculateMemStats(data);
expect(stats.activeBytes).toBe(1000);
expect(stats.availableBytes).toBe(2000);
expect(stats.freeBytes).toBe(3000);
expect(stats.totalBytes).toBe(4000);
expect(stats.usedBytes).toBe(3500);
});
});
describe("calculateMemStats swap", () => {
test("swap 不可用swaptotal=0 时 swapUsagePercent=null", () => {
const stats = calculateMemStats(makeMemData({ swapfree: 0, swaptotal: 0, swapused: 0 }));
expect(stats.swapUsagePercent).toBe(null);
expect(stats.swapTotalBytes).toBe(0);
expect(stats.swapUsedBytes).toBe(0);
expect(stats.swapFreeBytes).toBe(0);
});
test("swap 总量为 0swapUsagePercent 为 null不是 0", () => {
const stats = calculateMemStats(makeMemData({ swaptotal: 0 }));
expect(stats.swapUsagePercent).toBe(null);
});
test("swap 已使用", () => {
const stats = calculateMemStats(makeMemData({ swapfree: 1073741824, swaptotal: 4294967296, swapused: 3221225472 }));
expect(stats.swapUsagePercent).toBe(75);
expect(stats.swapTotalBytes).toBe(4294967296);
expect(stats.swapUsedBytes).toBe(3221225472);
expect(stats.swapFreeBytes).toBe(1073741824);
});
test("swap 未使用swapUsagePercent=0不是 null", () => {
const stats = calculateMemStats(makeMemData({ swapfree: 4294967296, swaptotal: 4294967296, swapused: 0 }));
expect(stats.swapUsagePercent).toBe(0);
expect(stats.swapUsedBytes).toBe(0);
expect(stats.swapFreeBytes).toBe(4294967296);
});
test("swap 部分使用保留 1 位小数", () => {
const stats = calculateMemStats(
makeMemData({ swapfree: 3000000000, swaptotal: 10000000000, swapused: 7000000000 }),
);
expect(stats.swapUsagePercent).toBe(70);
});
test("swap 合法 0 不被转换为 null", () => {
const stats = calculateMemStats(makeMemData({ swapfree: 4294967296, swaptotal: 4294967296, swapused: 0 }));
expect(stats.swapUsedBytes).toBe(0);
expect(stats.swapUsagePercent).toBe(0);
});
});