@sailboat-computer/health-monitoring
Version:
Comprehensive health monitoring system for sailboat computer v3 with marine-specific health checks
424 lines (375 loc) • 12.2 kB
text/typescript
/**
* Core types for the health monitoring system
*/
// Import shared types from sailboat-types
import {
common
} from '@sailboat-computer/sailboat-types';
// Define constants for string literal types
export const HealthStatus = {
HEALTHY: 'health_healthy' as common.HealthStatus,
DEGRADED: 'health_degraded' as common.HealthStatus,
UNHEALTHY: 'health_unhealthy' as common.HealthStatus,
CRITICAL: 'health_critical' as common.HealthStatus,
UNKNOWN: 'health_unknown' as common.HealthStatus
};
export const OperationalContext = {
SAILING: 'context_sailing' as common.OperationalContext,
MOTORING: 'context_motoring' as common.OperationalContext,
ANCHORED: 'context_anchored' as common.OperationalContext,
DOCKED: 'context_docked' as common.OperationalContext,
MAINTENANCE: 'context_maintenance' as common.OperationalContext,
EMERGENCY: 'context_emergency' as common.OperationalContext
};
export const MarineSystemType = {
NAVIGATION: 'system_navigation' as common.MarineSystemType,
SAFETY: 'system_safety' as common.MarineSystemType,
POWER: 'system_power' as common.MarineSystemType,
COMMUNICATION: 'system_communication' as common.MarineSystemType,
PROPULSION: 'system_propulsion' as common.MarineSystemType,
COMFORT: 'system_comfort' as common.MarineSystemType,
MAINTENANCE: 'system_maintenance' as common.MarineSystemType,
ENVIRONMENTAL: 'system_environmental' as common.MarineSystemType
};
// Type aliases for enum types
export type HealthStatusType = common.HealthStatus;
export type OperationalContextType = common.OperationalContext;
export type MarineSystemTypeType = common.MarineSystemType;
// MarineEnvironmentStatus doesn't seem to exist in the common namespace
// Define it here for now as an interface instead of an enum
export interface MarineEnvironmentStatus {
// Basic environment status
status?: 'normal' | 'adverse' | 'severe';
// Marine-specific properties
seaState?: string;
weather?: string;
powerStatus?: string;
criticalOperationsOnly?: boolean;
// Additional properties can be added as needed
[key: string]: any;
}
/**
* Health check types
*/
export enum HealthCheckType {
SENSOR = 'sensor',
SERVICE = 'service',
SYSTEM = 'system',
NETWORK = 'network',
POWER = 'power',
STORAGE = 'storage',
ENVIRONMENTAL = 'environmental'
}
/**
* Individual health check result
*/
export interface HealthCheckResult {
checkId: string;
name: string;
type: HealthCheckType;
marineSystemType: MarineSystemTypeType;
status: HealthStatusType;
score: number; // 0-1 health score
message: string;
details?: Record<string, any>;
timestamp: Date;
executionTime: number; // ms
// Marine-specific data
marineContext: {
operationalContext: OperationalContextType;
environmentalImpact: boolean;
safetyImpact: boolean;
powerImpact: number; // Watts
};
// Thresholds and limits
thresholds?: {
warning: number;
critical: number;
unit?: string;
};
// Trend data
trend?: {
direction: 'improving' | 'stable' | 'degrading';
rate: number; // Rate of change
confidence: number; // 0-1 confidence in trend
};
}
/**
* Aggregated health status for a system or component
*/
export interface SystemHealthStatus {
systemId: string;
name: string;
marineSystemType: MarineSystemTypeType;
overallStatus: HealthStatusType;
overallScore: number; // 0-1 aggregated health score
// Component health checks
healthChecks: HealthCheckResult[];
// System metrics
metrics: {
totalChecks: number;
healthyChecks: number;
warningChecks: number;
criticalChecks: number;
offlineChecks: number;
averageScore: number;
lastUpdateTime: Date;
};
// Marine-specific system data
marineData: {
operationalDependency: 'essential' | 'important' | 'optional';
powerConsumption: number; // Current power usage in Watts
environmentalSensitivity: number; // 0-1 how sensitive to marine environment
maintenanceStatus: 'current' | 'due' | 'overdue';
lastMaintenanceDate?: Date;
nextMaintenanceDate?: Date;
};
// Recommendations
recommendations: {
immediate: string[]; // Immediate actions needed
scheduled: string[]; // Scheduled maintenance items
monitoring: string[]; // Items to monitor closely
};
}
/**
* Overall system health dashboard
*/
export interface SystemHealthDashboard {
timestamp: Date;
overallSystemHealth: {
status: HealthStatusType;
score: number; // 0-1 overall system health
trend: 'improving' | 'stable' | 'degrading';
};
// System breakdowns
systemStatuses: SystemHealthStatus[];
// Marine environment impact
marineEnvironment: MarineEnvironmentStatus;
environmentalImpact: {
affectedSystems: string[];
severityLevel: 'low' | 'medium' | 'high';
adaptationsActive: string[];
};
// Critical alerts
criticalAlerts: {
id: string;
systemId: string;
message: string;
severity: 'warning' | 'critical';
timestamp: Date;
acknowledged: boolean;
}[];
// Performance metrics
performanceMetrics: {
totalHealthChecks: number;
healthCheckExecutionTime: number; // Average ms
systemResponseTime: number; // Average system response time
dataFreshness: number; // Average age of health data in seconds
};
// Power and resource status
resourceStatus: {
powerConsumption: {
current: number; // Watts
average: number; // Average over time
peak: number; // Peak consumption
efficiency: number; // 0-1 efficiency score
};
storageHealth: {
diskUsage: number; // 0-1 percentage
diskHealth: HealthStatusType;
dataIntegrity: number; // 0-1 integrity score
};
networkHealth: {
connectivity: HealthStatusType;
latency: number; // ms
throughput: number; // Mbps
reliability: number; // 0-1 reliability score
};
};
}
/**
* Health check configuration
*/
export interface HealthCheckConfig {
checkId: string;
name: string;
type: HealthCheckType;
marineSystemType: MarineSystemTypeType;
// Execution settings
interval: number; // Check interval in ms
timeout: number; // Check timeout in ms
retryCount: number; // Number of retries on failure
// Thresholds
thresholds: {
warning: number;
critical: number;
unit?: string;
};
// Marine-specific settings
marineSettings: {
operationalContexts: OperationalContextType[]; // When to run this check
environmentalSensitivity: number; // 0-1 sensitivity to marine conditions
powerAware: boolean; // Should consider power status
safetyImpact: boolean; // Does this affect vessel safety
};
// Advanced settings
advanced: {
trendAnalysis: boolean; // Enable trend analysis
predictiveAlerts: boolean; // Enable predictive alerting
adaptiveThresholds: boolean; // Adjust thresholds based on conditions
historicalComparison: boolean; // Compare with historical data
};
}
/**
* Health monitoring event
*/
export interface HealthMonitoringEvent {
eventId: string;
timestamp: Date;
eventType: 'health_check_completed' | 'status_changed' | 'alert_triggered' | 'system_recovery' | 'maintenance_due';
// Event details
systemId: string;
checkId?: string;
previousStatus?: HealthStatusType;
currentStatus: HealthStatusType;
// Event data
data: {
score?: number;
message: string;
details?: Record<string, any>;
marineContext: {
operationalContext: OperationalContextType;
environmentalConditions: Record<string, any>;
safetyImpact: boolean;
};
};
// Alert information
alert?: {
severity: 'info' | 'warning' | 'critical';
requiresAction: boolean;
recommendedActions: string[];
autoResolution: boolean;
};
}
/**
* Health trend data
*/
export interface HealthTrend {
systemId: string;
checkId: string;
timeRange: {
start: Date;
end: Date;
intervalMs: number;
};
// Trend data points
dataPoints: {
timestamp: Date;
score: number;
status: HealthStatusType;
value?: number;
marineConditions?: {
seaState: string;
weather: string;
operationalContext: OperationalContextType;
};
}[];
// Trend analysis
analysis: {
direction: 'improving' | 'stable' | 'degrading';
rate: number; // Rate of change per hour
confidence: number; // 0-1 confidence in analysis
seasonality: boolean; // Is there seasonal pattern
correlations: { // Correlations with other factors
environmental: number; // -1 to 1 correlation with environment
operational: number; // -1 to 1 correlation with operations
maintenance: number; // -1 to 1 correlation with maintenance
};
};
// Predictions
predictions: {
nextWarning?: Date; // Predicted next warning
nextCritical?: Date; // Predicted next critical status
maintenanceRecommendation?: Date; // Recommended maintenance date
confidence: number; // 0-1 confidence in predictions
};
}
/**
* Marine-specific health metrics
*/
export interface MarineHealthMetrics {
// Sensor health
sensorHealth: {
gps: HealthCheckResult;
compass: HealthCheckResult;
windSensor: HealthCheckResult;
depthSounder: HealthCheckResult;
speedLog: HealthCheckResult;
ais: HealthCheckResult;
};
// Power system health
powerHealth: {
batteryVoltage: HealthCheckResult;
chargingSystem: HealthCheckResult;
powerConsumption: HealthCheckResult;
solarPanels?: HealthCheckResult;
windGenerator?: HealthCheckResult;
shorepower?: HealthCheckResult;
};
// Communication health
communicationHealth: {
vhfRadio: HealthCheckResult;
satelliteComm?: HealthCheckResult;
cellularModem?: HealthCheckResult;
wifi: HealthCheckResult;
};
// Safety system health
safetyHealth: {
anchorAlarm: HealthCheckResult;
collisionAvoidance: HealthCheckResult;
emergencyBeacon?: HealthCheckResult;
fireDetection?: HealthCheckResult;
bilgePump?: HealthCheckResult;
};
// Environmental monitoring
environmentalHealth: {
temperature: HealthCheckResult;
humidity: HealthCheckResult;
barometricPressure: HealthCheckResult;
waterTemperature?: HealthCheckResult;
};
}
/**
* Health monitoring configuration
*/
export interface HealthMonitoringConfig {
// Global settings
globalSettings: {
defaultCheckInterval: number; // Default check interval in ms
defaultTimeout: number; // Default timeout in ms
maxConcurrentChecks: number; // Max concurrent health checks
dataRetentionDays: number; // How long to keep health data
};
// Marine-specific settings
marineSettings: {
environmentalAdaptation: boolean; // Adapt checks to marine conditions
powerAwareChecking: boolean; // Reduce checks when power is low
operationalContextAware: boolean; // Adjust checks based on operational context
predictiveMaintenance: boolean; // Enable predictive maintenance alerts
};
// Alert settings
alertSettings: {
enableEmailAlerts: boolean;
enableSmsAlerts: boolean;
enableAudioAlerts: boolean;
alertThrottling: number; // Min time between similar alerts (ms)
escalationTimeout: number; // Time before escalating unacknowledged alerts (ms)
};
// Dashboard settings
dashboardSettings: {
refreshInterval: number; // Dashboard refresh interval in ms
historicalDataRange: number; // Days of historical data to show
trendAnalysisEnabled: boolean;
predictiveAlertsEnabled: boolean;
};
}