- Electron crash handlers (render-process-gone, child-process-gone, unresponsive/responsive, process warnings) with a circuit-breaker auto-reload for renderer crashes - Renderer error capture (window.onerror, unhandledrejection, React ErrorBoundary) forwarded to the main log via a one-way IPC channel - Memory-pressure heartbeat measured against the V8 heap_size_limit - Gated DEBUG log level (RD_DEBUG) and an in-memory ring of recent WARN/ERROR lines, exposed via the /errors endpoint and support bundle - Disk-error classification (ENOSPC etc.) on download failures and integrity-check pass/fail logging
46 lines
1.0 KiB
TypeScript
46 lines
1.0 KiB
TypeScript
export interface ErrorRingEntry {
|
|
ts: string;
|
|
level: string;
|
|
message: string;
|
|
}
|
|
|
|
export interface ErrorRing {
|
|
push: (entry: ErrorRingEntry) => void;
|
|
snapshot: () => ErrorRingEntry[];
|
|
clear: () => void;
|
|
size: () => number;
|
|
}
|
|
|
|
export function createErrorRing(capacity: number): ErrorRing {
|
|
const limit = Math.max(1, Math.floor(capacity));
|
|
const buffer: ErrorRingEntry[] = [];
|
|
return {
|
|
push(entry: ErrorRingEntry): void {
|
|
buffer.push(entry);
|
|
while (buffer.length > limit) {
|
|
buffer.shift();
|
|
}
|
|
},
|
|
snapshot(): ErrorRingEntry[] {
|
|
return buffer.slice();
|
|
},
|
|
clear(): void {
|
|
buffer.length = 0;
|
|
},
|
|
size(): number {
|
|
return buffer.length;
|
|
}
|
|
};
|
|
}
|
|
|
|
const RECENT_ERROR_CAPACITY = 200;
|
|
const recentErrors = createErrorRing(RECENT_ERROR_CAPACITY);
|
|
|
|
export function recordRecentError(level: string, message: string, ts: string): void {
|
|
recentErrors.push({ level, message, ts });
|
|
}
|
|
|
|
export function getRecentErrors(): ErrorRingEntry[] {
|
|
return recentErrors.snapshot();
|
|
}
|