UNPKG

@sailboat-computer/health-monitoring

Version:

Comprehensive health monitoring system for sailboat computer v3 with marine-specific health checks

133 lines (126 loc) 4.01 kB
/** * GPS Recovery Policy * Defines recovery policies for GPS health issues */ import { RecoveryPolicy, RecoveryPriority } from '../RecoveryAction'; import { HealthStatus, OperationalContext, MarineSystemType } from '../../types'; /** * Create a GPS recovery policy for poor satellite reception */ export function createGPSSatelliteRecoveryPolicy(): RecoveryPolicy { return { policyId: 'gps-satellite-recovery', name: 'GPS Satellite Reception Recovery', checkId: 'gps-health', marineSystemType: MarineSystemType.NAVIGATION, triggerStatus: HealthStatus.UNHEALTHY, triggerScore: 0.4, // Trigger when health score drops below 0.4 consecutiveFailures: 2, // Require 2 consecutive failures before triggering actions: [ 'gps-recalibration', // First try recalibration 'gps-failover' // Then try failover to backup GPS ], stopOnSuccess: true, // Stop after first successful action enabled: true, cooldownPeriod: 300000, // 5 minutes between recovery attempts maxAttempts: 3, attemptWindow: 3600000, // 1 hour marineSettings: { activeContexts: [ OperationalContext.SAILING, OperationalContext.MOTORING, OperationalContext.ANCHORED, OperationalContext.DOCKED ], activeInRoughSeas: true, powerAware: true, safetyImpact: true } }; } /** * Create a GPS recovery policy for position jumps */ export function createGPSPositionJumpRecoveryPolicy(): RecoveryPolicy { return { policyId: 'gps-position-jump-recovery', name: 'GPS Position Jump Recovery', checkId: 'gps-health', marineSystemType: MarineSystemType.NAVIGATION, triggerStatus: HealthStatus.DEGRADED, triggerScore: 0.6, // Trigger when health score drops below 0.6 consecutiveFailures: 1, // Immediate action on position jumps actions: [ 'gps-recalibration', 'gps-failover' ], stopOnSuccess: true, enabled: true, cooldownPeriod: 60000, // 1 minute between recovery attempts maxAttempts: 5, attemptWindow: 1800000, // 30 minutes marineSettings: { activeContexts: [ OperationalContext.SAILING, OperationalContext.MOTORING, OperationalContext.ANCHORED ], activeInRoughSeas: true, powerAware: false, // Position jumps are critical enough to ignore power status safetyImpact: true } }; } /** * Create a GPS recovery policy for critical failures */ export function createGPSCriticalRecoveryPolicy(): RecoveryPolicy { return { policyId: 'gps-critical-recovery', name: 'GPS Critical Failure Recovery', checkId: 'gps-health', marineSystemType: MarineSystemType.NAVIGATION, triggerStatus: HealthStatus.CRITICAL, triggerScore: 0.2, // Very low health score consecutiveFailures: 1, // Immediate action on critical failures actions: [ 'gps-failover', // Try failover first for critical issues 'gps-recalibration', // Then try recalibration 'gps-reset' // Last resort: full reset ], stopOnSuccess: true, enabled: true, cooldownPeriod: 30000, // 30 seconds between recovery attempts maxAttempts: 10, attemptWindow: 600000, // 10 minutes marineSettings: { activeContexts: [ OperationalContext.SAILING, OperationalContext.MOTORING, OperationalContext.ANCHORED, OperationalContext.DOCKED, OperationalContext.EMERGENCY ], activeInRoughSeas: true, powerAware: false, // Critical GPS failures must be addressed regardless of power safetyImpact: true } }; } /** * Register all GPS recovery policies with the recovery orchestrator */ export function registerGPSRecoveryPolicies( registerPolicy: (policy: RecoveryPolicy) => void ): void { registerPolicy(createGPSSatelliteRecoveryPolicy()); registerPolicy(createGPSPositionJumpRecoveryPolicy()); registerPolicy(createGPSCriticalRecoveryPolicy()); }