Merge pull request #284 from PR0M3TH3AN/perf/optimize-roster-check-4709742538455928107

⚡ Optimize roster check in cmd-list using Set
This commit is contained in:
thePR0M3TH3AN authored and GitHub committed 2026-02-18 09:49:16 -05:00
commit 90fdaae6a5
2 files changed
+85 -16

No files matched your search

+28 -16
View File
@@ -1,18 +1,29 @@
import {
getRelays,
getNamespace,
getRelays as _getRelays,
getNamespace as _getNamespace,
} from './torch-config.mjs';
import { getRoster } from './roster.mjs';
import { queryLocks } from './lock-ops.mjs';
import { todayDateStr, nowUnix } from './utils.mjs';
import { getRoster as _getRoster } from './roster.mjs';
import { queryLocks as _queryLocks } from './lock-ops.mjs';
import { todayDateStr as _todayDateStr, nowUnix as _nowUnix } from './utils.mjs';
export async function cmdList(cadence, deps = {}) {
const {
getRelays = _getRelays,
getNamespace = _getNamespace,
getRoster = _getRoster,
queryLocks = _queryLocks,
todayDateStr = _todayDateStr,
nowUnix = _nowUnix,
log = console.log,
error = console.error,
} = deps;
export async function cmdList(cadence) {
const relays = await getRelays();
const namespace = await getNamespace();
const dateStr = todayDateStr();
const cadences = cadence ? [cadence] : ['daily', 'weekly'];
console.error(`Listing active locks: namespace=${namespace}, cadences=${cadences.join(', ')}`);
error(`Listing active locks: namespace=${namespace}, cadences=${cadences.join(', ')}`);
const results = await Promise.all(
cadences.map(async (c) => {
@@ -22,12 +33,12 @@ export async function cmdList(cadence) {
);
for (const { c, locks } of results) {
console.log(`\n${'='.repeat(72)}`);
console.log(`Active ${namespace} ${c} locks (${dateStr})`);
console.log('='.repeat(72));
log(`\n${'='.repeat(72)}`);
log(`Active ${namespace} ${c} locks (${dateStr})`);
log('='.repeat(72));
if (locks.length === 0) {
console.log(' (no active locks)');
log(' (no active locks)');
continue;
}
@@ -38,7 +49,7 @@ export async function cmdList(cadence) {
const remaining = lock.expiresAt ? lock.expiresAt - nowUnix() : null;
const remainMin = remaining ? Math.round(remaining / 60) : '?';
console.log(
log(
` ${(lock.agent ?? 'unknown').padEnd(30)} ` +
`age: ${String(ageMin).padStart(4)}m ` +
`ttl: ${String(remainMin).padStart(4)}m ` +
@@ -48,15 +59,16 @@ export async function cmdList(cadence) {
}
const roster = await getRoster(c);
const rosterSet = new Set(roster);
const lockedAgents = new Set(locks.map((l) => l.agent).filter(Boolean));
const unknownLockedAgents = [...lockedAgents].filter((agent) => !roster.includes(agent));
const unknownLockedAgents = [...lockedAgents].filter((agent) => !rosterSet.has(agent));
const available = roster.filter((a) => !lockedAgents.has(a));
if (unknownLockedAgents.length > 0) {
console.log(` Warning: lock events found with non-roster agent names: ${unknownLockedAgents.join(', ')}`);
log(` Warning: lock events found with non-roster agent names: ${unknownLockedAgents.join(', ')}`);
}
console.log(`\n Locked: ${lockedAgents.size}/${roster.length}`);
console.log(` Available: ${available.join(', ') || '(none)'}`);
log(`\n Locked: ${lockedAgents.size}/${roster.length}`);
log(` Available: ${available.join(', ') || '(none)'}`);
}
}
+57
View File
@@ -0,0 +1,57 @@
import { test, describe, it } from 'node:test';
import assert from 'node:assert';
import { cmdList } from '../src/cmd-list.mjs';
describe('cmdList', () => {
it('should list active locks and identify unknown agents', async () => {
const logs = [];
const mockLocks = [
{
agent: 'agent-1',
createdAt: 1000,
expiresAt: 4600,
eventId: 'event-1',
platform: 'linux',
},
{
agent: 'unknown-agent',
createdAt: 2000,
eventId: 'event-2',
platform: 'mac',
},
];
const deps = {
getRelays: async () => ['wss://relay.example.com'],
getNamespace: async () => 'test-namespace',
queryLocks: async () => mockLocks,
getRoster: async () => ['agent-1', 'agent-2'],
todayDateStr: () => '2023-10-27',
nowUnix: () => 3000, // agent-1 age: 2000s (~33m), unknown-agent age: 1000s (~17m)
log: (...args) => logs.push(args.join(' ')),
error: (...args) => logs.push(args.join(' ')),
};
await cmdList('daily', deps);
const output = logs.join('\n');
// Verify header
assert.match(output, /Active test-namespace daily locks/);
// Verify agents listed
assert.match(output, /agent-1/);
assert.match(output, /unknown-agent/);
// Verify unknown warning
assert.match(output, /Warning: lock events found with non-roster agent names: unknown-agent/);
// Verify summary stats
// Locked: 2 (agent-1 and unknown-agent both count as locked agents) / Roster size 2
assert.match(output, /Locked: 2\/2/);
// Verify available
// agent-2 is in roster and not in lockedAgents
assert.match(output, /Available: agent-2/);
});
});