Files
order_site/apps/backend/src/startup/state.ts
T

70 lines
1.7 KiB
TypeScript

type StartupProcessError = {
time: string;
message: string;
};
export type StartupState = {
phase: string;
startedAt: string;
core: {
ready: boolean;
running: boolean;
attemptCount: number;
readyAt: string;
lastAttemptAt: string;
lastError: string;
};
process: {
lastUnhandledRejection: StartupProcessError | null;
lastUncaughtException: StartupProcessError | null;
};
};
export function createStartupState(): StartupState {
return {
phase: "starting",
startedAt: new Date().toISOString(),
core: {
ready: false,
running: false,
attemptCount: 0,
readyAt: "",
lastAttemptAt: "",
lastError: "",
},
process: {
lastUnhandledRejection: null,
lastUncaughtException: null,
},
};
}
export function buildHealthPayload(startupState: StartupState, shutdownStarted: boolean) {
return {
phase: startupState.phase,
startedAt: startupState.startedAt,
core: {
ready: startupState.core.ready,
running: startupState.core.running,
attemptCount: startupState.core.attemptCount,
readyAt: startupState.core.readyAt,
lastAttemptAt: startupState.core.lastAttemptAt,
lastError: startupState.core.lastError,
},
process: {
pid: process.pid,
shutdownStarted,
lastUnhandledRejection: startupState.process.lastUnhandledRejection,
lastUncaughtException: startupState.process.lastUncaughtException,
},
};
}
export function formatStartupError(error: unknown) {
if (error instanceof Error && error.message) {
return error.message.split("\n")[0]?.trim() || "未知错误";
}
return String(error || "未知错误").trim();
}