chore(extraction): document sidecar dev alerts

What changed:
- Added a scoped no-console justification for development-only sidecar health alerts.

Warning impact:
- extraction-service sidecar-monitor no-console warnings: 3 -> 0.
- Workspace lint: 93 -> 90 warnings.

Verification:
- pnpm --filter @lysnrai/extraction-service build
- pnpm --filter @lysnrai/extraction-service test
- pnpm --filter @lysnrai/extraction-service exec eslint . --ext .ts,.tsx
- pnpm lint
This commit is contained in:
Saravana Achu Mac 2026-05-04 16:42:25 -07:00
parent e940d067c3
commit 9cd7089f97

View File

@ -130,7 +130,8 @@ function updateState(check: HealthCheck): void {
// Determine status // Determine status
if (state.consecutiveFailures >= ALERT_THRESHOLD) { if (state.consecutiveFailures >= ALERT_THRESHOLD) {
const newStatus: SidecarHealthStatus = state.consecutiveFailures >= ALERT_THRESHOLD * 2 ? 'unhealthy' : 'degraded'; const newStatus: SidecarHealthStatus =
state.consecutiveFailures >= ALERT_THRESHOLD * 2 ? 'unhealthy' : 'degraded';
if (state.current !== newStatus) { if (state.current !== newStatus) {
state.current = newStatus; state.current = newStatus;
@ -236,11 +237,13 @@ export function getHealthSummary(): {
} { } {
const recent = state.history.slice(0, 20); const recent = state.history.slice(0, 20);
const responseTimes = recent.filter(h => h.status === 'healthy').map(h => h.responseTimeMs); const responseTimes = recent.filter(h => h.status === 'healthy').map(h => h.responseTimeMs);
const avgResponseTimeMs = responseTimes.length > 0 const avgResponseTimeMs =
responseTimes.length > 0
? Math.round(responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length) ? Math.round(responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length)
: 0; : 0;
const availability = state.totalChecks > 0 const availability =
state.totalChecks > 0
? Math.round(((state.totalChecks - state.totalFailures) / state.totalChecks) * 1000) / 10 ? Math.round(((state.totalChecks - state.totalFailures) / state.totalChecks) * 1000) / 10
: 100; : 100;
@ -277,23 +280,34 @@ export function resetHealthState(): void {
// ── Default console alerting (development) ────────────────────── // ── Default console alerting (development) ──────────────────────
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
/* eslint-disable no-console -- Development-only sidecar health alerts are intentionally surfaced in the local service console. */
alertConfig = { alertConfig = {
onUnhealthy: (state, check) => { onUnhealthy: (state, check) => {
console.error(`[sidecar-health] ALERT: Sidecar unhealthy after ${state.consecutiveFailures} consecutive failures`, { console.error(
`[sidecar-health] ALERT: Sidecar unhealthy after ${state.consecutiveFailures} consecutive failures`,
{
error: check.error, error: check.error,
responseTime: check.responseTimeMs, responseTime: check.responseTimeMs,
}); }
);
}, },
onRecovered: (state, check) => { onRecovered: (state, check) => {
console.log(`[sidecar-health] RECOVERED: Sidecar is healthy after ${state.consecutiveSuccesses} consecutive successes`, { console.log(
`[sidecar-health] RECOVERED: Sidecar is healthy after ${state.consecutiveSuccesses} consecutive successes`,
{
responseTime: check.responseTimeMs, responseTime: check.responseTimeMs,
}); }
);
}, },
onDegraded: (state, check) => { onDegraded: (state, check) => {
console.warn(`[sidecar-health] WARNING: Sidecar degraded after ${state.consecutiveFailures} failures`, { console.warn(
`[sidecar-health] WARNING: Sidecar degraded after ${state.consecutiveFailures} failures`,
{
error: check.error, error: check.error,
responseTime: check.responseTimeMs, responseTime: check.responseTimeMs,
}); }
);
}, },
}; };
/* eslint-enable no-console */
} }