feat: add extensive task runtime diagnostics logging
This commit is contained in:
1 parent
9671218936
commit
114fb22eb8
6 files changed
+170
No files matched your search
@@ -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(),
|
||||
};
|
||||
};
|
||||
@@ -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();
|
||||
})();
|
||||
@@ -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");
|
||||
Reference in new issue
Block a user