@sailboat-computer/resilience
Version:
Enhanced resilience patterns for sailboat computer v3 with marine-specific adaptations
434 lines • 10.7 kB
TypeScript
/**
* Graceful degradation strategies with marine-specific adaptations
*/
import { MarineEnvironmentStatus, ResilienceEvent } from '../types';
/**
* Service quality level
*/
export declare enum ServiceQualityLevel {
/**
* Full functionality with optimal performance
*/
OPTIMAL = "optimal",
/**
* Full functionality with reduced performance
*/
REDUCED = "reduced",
/**
* Core functionality only
*/
MINIMAL = "minimal",
/**
* Critical functionality only
*/
CRITICAL = "critical",
/**
* Emergency functionality only
*/
EMERGENCY = "emergency"
}
/**
* Feature priority for degradation decisions
*/
export declare enum FeaturePriority {
/**
* Critical for vessel safety
*/
CRITICAL = "critical",
/**
* Essential for operation
*/
ESSENTIAL = "essential",
/**
* Important but can be degraded
*/
IMPORTANT = "important",
/**
* Useful but non-essential
*/
USEFUL = "useful",
/**
* Comfort or convenience only
*/
COMFORT = "comfort"
}
/**
* Degradation strategy configuration
*/
export interface DegradationConfig {
/**
* Default service quality level
*/
defaultQualityLevel: ServiceQualityLevel;
/**
* Whether to adapt to marine conditions
*/
adaptToMarineConditions: boolean;
/**
* Whether to adapt to power status
*/
powerAware: boolean;
/**
* Whether to adapt to connectivity quality
*/
connectivityAware: boolean;
/**
* Quality level thresholds for different conditions
*/
qualityThresholds: {
/**
* Sea state thresholds
*/
seaState: {
rough: ServiceQualityLevel;
veryRough: ServiceQualityLevel;
};
/**
* Power status thresholds
*/
powerStatus: {
conservation: ServiceQualityLevel;
critical: ServiceQualityLevel;
};
/**
* Connectivity quality thresholds (0-1)
*/
connectivityQuality: {
low: number;
lowQualityLevel: ServiceQualityLevel;
veryLow: number;
veryLowQualityLevel: ServiceQualityLevel;
};
};
/**
* Feature toggles configuration
*/
featureToggles: {
/**
* Whether to enable automatic feature toggling
*/
autoToggleFeatures: boolean;
/**
* Minimum priority level for each quality level
*/
qualityLevelMinPriority: {
[]: FeaturePriority;
[]: FeaturePriority;
[]: FeaturePriority;
[]: FeaturePriority;
[]: FeaturePriority;
};
};
/**
* Resource limits for different quality levels
*/
resourceLimits: {
/**
* CPU usage percentage (0-100)
*/
cpu: {
[]: number;
[]: number;
[]: number;
[]: number;
[]: number;
};
/**
* Memory usage percentage (0-100)
*/
memory: {
[]: number;
[]: number;
[]: number;
[]: number;
[]: number;
};
/**
* Network bandwidth usage (KB/s)
*/
bandwidth: {
[]: number;
[]: number;
[]: number;
[]: number;
[]: number;
};
/**
* Storage I/O operations per second
*/
storageIops: {
[]: number;
[]: number;
[]: number;
[]: number;
[]: number;
};
};
}
/**
* Feature toggle definition
*/
export interface FeatureToggle {
/**
* Feature ID
*/
id: string;
/**
* Feature name
*/
name: string;
/**
* Feature description
*/
description: string;
/**
* Feature priority
*/
priority: FeaturePriority;
/**
* Whether the feature is currently enabled
*/
enabled: boolean;
/**
* Whether the feature can be manually toggled
*/
manualToggleAllowed: boolean;
/**
* Power consumption in watts when enabled
*/
powerConsumption: number;
/**
* CPU usage percentage when enabled
*/
cpuUsage: number;
/**
* Memory usage in MB when enabled
*/
memoryUsage: number;
/**
* Network bandwidth usage in KB/s when enabled
*/
bandwidthUsage: number;
/**
* Storage I/O operations per second when enabled
*/
storageIops: number;
/**
* Marine-specific settings
*/
marineSettings: {
/**
* Whether this feature is required in rough seas
*/
requiredInRoughSeas: boolean;
/**
* Whether this feature is required for navigation
*/
requiredForNavigation: boolean;
/**
* Whether this feature is required for safety
*/
requiredForSafety: boolean;
/**
* Whether this feature requires good connectivity
*/
requiresGoodConnectivity: boolean;
};
}
/**
* Degradation metrics
*/
export interface DegradationMetrics {
/**
* Current service quality level
*/
currentQualityLevel: ServiceQualityLevel;
/**
* Previous service quality level
*/
previousQualityLevel: ServiceQualityLevel;
/**
* Time spent at each quality level (ms)
*/
timeAtQualityLevel: {
[]: number;
};
/**
* Number of quality level changes
*/
qualityLevelChanges: number;
/**
* Feature toggle metrics
*/
featureToggles: {
/**
* Total number of features
*/
total: number;
/**
* Number of enabled features
*/
enabled: number;
/**
* Number of disabled features
*/
disabled: number;
/**
* Number of features toggled automatically
*/
autoToggled: number;
/**
* Number of features toggled manually
*/
manuallyToggled: number;
};
/**
* Resource usage metrics
*/
resourceUsage: {
/**
* CPU usage percentage
*/
cpu: number;
/**
* Memory usage percentage
*/
memory: number;
/**
* Network bandwidth usage (KB/s)
*/
bandwidth: number;
/**
* Storage I/O operations per second
*/
storageIops: number;
/**
* Power consumption in watts
*/
power: number;
};
/**
* Marine-specific metrics
*/
marineMetrics: {
/**
* Time spent in rough seas (ms)
*/
timeInRoughSeas: number;
/**
* Time spent in power conservation mode (ms)
*/
timeInPowerConservation: number;
/**
* Time spent with poor connectivity (ms)
*/
timeWithPoorConnectivity: number;
/**
* Time spent in emergency mode (ms)
*/
timeInEmergencyMode: number;
};
}
/**
* Degradation manager for graceful service degradation
*/
export declare class DegradationManager {
private config;
private currentQualityLevel;
private featureToggles;
private metrics;
private eventListeners;
private marineEnvironment?;
private qualityLevelTimestamps;
private lastQualityUpdateTime;
constructor(config?: Partial<DegradationConfig>);
/**
* Register a feature toggle
*/
registerFeature(feature: FeatureToggle): void;
/**
* Unregister a feature toggle
*/
unregisterFeature(featureId: string): boolean;
/**
* Check if a feature is enabled
*/
isFeatureEnabled(featureId: string): boolean;
/**
* Manually enable a feature
*/
enableFeature(featureId: string): boolean;
/**
* Manually disable a feature
*/
disableFeature(featureId: string): boolean;
/**
* Get current service quality level
*/
getQualityLevel(): ServiceQualityLevel;
/**
* Set service quality level manually
*/
setQualityLevel(level: ServiceQualityLevel): void;
/**
* Update marine environment for adaptive degradation
*/
updateMarineEnvironment(environment: MarineEnvironmentStatus): void;
/**
* Get current degradation metrics
*/
getMetrics(): DegradationMetrics;
/**
* Get all registered features
*/
getAllFeatures(): FeatureToggle[];
/**
* Get enabled features
*/
getEnabledFeatures(): FeatureToggle[];
/**
* Get disabled features
*/
getDisabledFeatures(): FeatureToggle[];
/**
* Add event listener
*/
onEvent(listener: (event: ResilienceEvent) => void): void;
/**
* Remove event listener
*/
removeEventListener(listener: (event: ResilienceEvent) => void): void;
/**
* Determine quality level from marine environment
*/
private determineQualityLevelFromEnvironment;
/**
* Get the more restrictive of two quality levels
*/
private getMoreRestrictiveLevel;
/**
* Apply quality level to all features
*/
private applyQualityLevelToAllFeatures;
/**
* Apply quality level to a specific feature
*/
private applyQualityLevelToFeature;
/**
* Update metrics
*/
private updateMetrics;
/**
* Initialize metrics
*/
private initializeMetrics;
/**
* Emit resilience event
*/
private emitEvent;
}
/**
* Default degradation manager instance
*/
export declare const defaultDegradationManager: DegradationManager;
//# sourceMappingURL=DegradationManager.d.ts.map