@sailboat-computer/health-monitoring
Version:
Comprehensive health monitoring system for sailboat computer v3 with marine-specific health checks
124 lines • 4.92 kB
JavaScript
;
/**
* GPS Recovery Policy
* Defines recovery policies for GPS health issues
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerGPSRecoveryPolicies = exports.createGPSCriticalRecoveryPolicy = exports.createGPSPositionJumpRecoveryPolicy = exports.createGPSSatelliteRecoveryPolicy = void 0;
const types_1 = require("../../types");
/**
* Create a GPS recovery policy for poor satellite reception
*/
function createGPSSatelliteRecoveryPolicy() {
return {
policyId: 'gps-satellite-recovery',
name: 'GPS Satellite Reception Recovery',
checkId: 'gps-health',
marineSystemType: types_1.MarineSystemType.NAVIGATION,
triggerStatus: types_1.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: [
types_1.OperationalContext.SAILING,
types_1.OperationalContext.MOTORING,
types_1.OperationalContext.ANCHORED,
types_1.OperationalContext.DOCKED
],
activeInRoughSeas: true,
powerAware: true,
safetyImpact: true
}
};
}
exports.createGPSSatelliteRecoveryPolicy = createGPSSatelliteRecoveryPolicy;
/**
* Create a GPS recovery policy for position jumps
*/
function createGPSPositionJumpRecoveryPolicy() {
return {
policyId: 'gps-position-jump-recovery',
name: 'GPS Position Jump Recovery',
checkId: 'gps-health',
marineSystemType: types_1.MarineSystemType.NAVIGATION,
triggerStatus: types_1.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: [
types_1.OperationalContext.SAILING,
types_1.OperationalContext.MOTORING,
types_1.OperationalContext.ANCHORED
],
activeInRoughSeas: true,
powerAware: false, // Position jumps are critical enough to ignore power status
safetyImpact: true
}
};
}
exports.createGPSPositionJumpRecoveryPolicy = createGPSPositionJumpRecoveryPolicy;
/**
* Create a GPS recovery policy for critical failures
*/
function createGPSCriticalRecoveryPolicy() {
return {
policyId: 'gps-critical-recovery',
name: 'GPS Critical Failure Recovery',
checkId: 'gps-health',
marineSystemType: types_1.MarineSystemType.NAVIGATION,
triggerStatus: types_1.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: [
types_1.OperationalContext.SAILING,
types_1.OperationalContext.MOTORING,
types_1.OperationalContext.ANCHORED,
types_1.OperationalContext.DOCKED,
types_1.OperationalContext.EMERGENCY
],
activeInRoughSeas: true,
powerAware: false, // Critical GPS failures must be addressed regardless of power
safetyImpact: true
}
};
}
exports.createGPSCriticalRecoveryPolicy = createGPSCriticalRecoveryPolicy;
/**
* Register all GPS recovery policies with the recovery orchestrator
*/
function registerGPSRecoveryPolicies(registerPolicy) {
registerPolicy(createGPSSatelliteRecoveryPolicy());
registerPolicy(createGPSPositionJumpRecoveryPolicy());
registerPolicy(createGPSCriticalRecoveryPolicy());
}
exports.registerGPSRecoveryPolicies = registerGPSRecoveryPolicies;
//# sourceMappingURL=GPSRecoveryPolicy.js.map