feat: rebuild warm operations workbench

This commit is contained in:
Codex
2026-07-30 14:49:33 +08:00
parent 25c853dea8
commit 570edf6bb2
88 changed files with 13413 additions and 2250 deletions
@@ -1,6 +1,11 @@
import { describe, expect, it } from 'vitest';
import { InstanceResourceService, parseSim, parseStats } from './instance-resource-service.js';
import {
InstanceResourceService,
parseHealth,
parseSim,
parseStats,
} from './instance-resource-service.js';
const response = (body: unknown) => ({
status: 200,
@@ -27,6 +32,27 @@ describe('instance resource allowlist parsing', () => {
).toEqual({ cpuPercent: 23.4, memoryPercent: 67.8, maxTemperatureCelsius: 52.6 });
});
it('falls back to version metadata exposed by stats on older SimAdmin builds', () => {
expect(
parseStats(
response({
data: {
cpu_load: { load_percent: 10 },
system: { app_version: '1.8.7', architecture: 'aarch64' },
},
}),
),
).toMatchObject({ cpuPercent: 10, version: '1.8.7', platform: 'aarch64' });
});
it('extracts the upstream SimAdmin version from the health endpoint', () => {
expect(
parseHealth(
response({ status: 'ok', version: '1.9.4', platform: 'linux-aarch64', secret: 'drop' }),
),
).toEqual({ version: '1.9.4', platform: 'linux-aarch64' });
});
it('extracts, validates, deduplicates and bounds phone numbers only', () => {
expect(
parseSim(
@@ -51,7 +77,9 @@ describe('instance resource allowlist parsing', () => {
return response(
request.url.endsWith('/api/stats')
? { data: { cpu_load: { load_percent: 12 }, memory: { used_percent: 34 } } }
: { data: { phone_numbers: ['13800000000'] } },
: request.url.endsWith('/api/sim')
? { data: { phone_numbers: ['13800000000'] } }
: { status: 'ok', version: '2.0.1', platform: 'linux' },
);
},
});
@@ -59,10 +87,13 @@ describe('instance resource allowlist parsing', () => {
cpuPercent: 12,
memoryPercent: 34,
phoneNumbers: ['13800000000'],
version: '2.0.1',
platform: 'linux',
});
expect(requests.map((request) => request.headers)).toEqual([
{ accept: 'application/json' },
{ accept: 'application/json' },
{ accept: 'application/json' },
]);
});