feat: add extensive task runtime diagnostics logging

This commit is contained in:
copilot-swe-agent[bot] authored and GitHub committed 2026-06-03 06:06:31 +00:00
1 parent 9671218936
commit 114fb22eb8
6 files changed
+170

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
const bytesToMiB = (bytes: number) => Number((bytes / (1024 * 1024)).toFixed(2));
const getActiveHandlesCount = () => {
const processWithHandles = process as NodeJS.Process & {
_getActiveHandles?: () => unknown[];
};
return processWithHandles._getActiveHandles?.().length ?? null;
};
const getActiveRequestsCount = () => {
const processWithRequests = process as NodeJS.Process & {
_getActiveRequests?: () => unknown[];
};
return processWithRequests._getActiveRequests?.().length ?? null;
};
export const getTasksRuntimeDiagnostics = () => {
const memory = process.memoryUsage();
const resources = process.resourceUsage();
return {
rssMiB: bytesToMiB(memory.rss),
heapUsedMiB: bytesToMiB(memory.heapUsed),
heapTotalMiB: bytesToMiB(memory.heapTotal),
externalMiB: bytesToMiB(memory.external),
arrayBuffersMiB: bytesToMiB(memory.arrayBuffers),
uptimeSeconds: Number(process.uptime().toFixed(0)),
userCpuMicros: resources.userCPUTime,
systemCpuMicros: resources.systemCPUTime,
maxRssKiB: resources.maxRSS,
activeHandles: getActiveHandlesCount(),
activeRequests: getActiveRequestsCount(),
};
};
+30
View File
@@ -2,11 +2,41 @@
import "./overrides";
import { jobGroup } from "@homarr/cron-jobs";
import { createLogger } from "@homarr/core/infrastructure/logs";
import { getTasksRuntimeDiagnostics } from "./diagnostics";
import { onStartAsync } from "./on-start";
const logger = createLogger({ module: "tasksMain" });
const RUNTIME_DIAGNOSTICS_INTERVAL_MS = 60_000;
const scheduleRuntimeDiagnostics = () => {
setInterval(() => {
logger.info("Tasks runtime diagnostics", {
diagnostics: getTasksRuntimeDiagnostics(),
});
}, RUNTIME_DIAGNOSTICS_INTERVAL_MS).unref();
};
void (async () => {
logger.info("Tasks runtime bootstrap started", {
diagnostics: getTasksRuntimeDiagnostics(),
});
await onStartAsync();
logger.info("Tasks on-start hooks completed", {
diagnostics: getTasksRuntimeDiagnostics(),
});
await jobGroup.initializeAsync();
logger.info("Cron job group initialized in tasks runtime", {
diagnostics: getTasksRuntimeDiagnostics(),
});
await jobGroup.startAllAsync();
logger.info("Cron job group started in tasks runtime", {
diagnostics: getTasksRuntimeDiagnostics(),
jobs: jobGroup.getKeys(),
});
scheduleRuntimeDiagnostics();
})();
+3
View File
@@ -1,5 +1,8 @@
import { setGlobalDispatcher } from "undici";
import { UndiciHttpAgent } from "@homarr/core/infrastructure/http";
import { createLogger } from "@homarr/core/infrastructure/logs";
const logger = createLogger({ module: "tasksOverrides" });
setGlobalDispatcher(new UndiciHttpAgent());
logger.info("Configured global undici dispatcher for tasks runtime");