mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-07 15:21:06 +00:00
57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
import type {
|
|
TaskRecord,
|
|
TaskRegistrySummary,
|
|
TaskRuntimeCounts,
|
|
TaskStatusCounts,
|
|
} from "./task-registry.types.js";
|
|
|
|
function createEmptyTaskStatusCounts(): TaskStatusCounts {
|
|
return {
|
|
queued: 0,
|
|
running: 0,
|
|
succeeded: 0,
|
|
failed: 0,
|
|
timed_out: 0,
|
|
cancelled: 0,
|
|
lost: 0,
|
|
};
|
|
}
|
|
|
|
function createEmptyTaskRuntimeCounts(): TaskRuntimeCounts {
|
|
return {
|
|
subagent: 0,
|
|
acp: 0,
|
|
cli: 0,
|
|
cron: 0,
|
|
};
|
|
}
|
|
|
|
export function createEmptyTaskRegistrySummary(): TaskRegistrySummary {
|
|
return {
|
|
total: 0,
|
|
active: 0,
|
|
terminal: 0,
|
|
failures: 0,
|
|
byStatus: createEmptyTaskStatusCounts(),
|
|
byRuntime: createEmptyTaskRuntimeCounts(),
|
|
};
|
|
}
|
|
|
|
export function summarizeTaskRecords(records: Iterable<TaskRecord>): TaskRegistrySummary {
|
|
const summary = createEmptyTaskRegistrySummary();
|
|
for (const task of records) {
|
|
summary.total += 1;
|
|
summary.byStatus[task.status] += 1;
|
|
summary.byRuntime[task.runtime] += 1;
|
|
if (task.status === "queued" || task.status === "running") {
|
|
summary.active += 1;
|
|
} else {
|
|
summary.terminal += 1;
|
|
}
|
|
if (task.status === "failed" || task.status === "timed_out" || task.status === "lost") {
|
|
summary.failures += 1;
|
|
}
|
|
}
|
|
return summary;
|
|
}
|