@sailboat-computer/resilience
Version:
Enhanced resilience patterns for sailboat computer v3 with marine-specific adaptations
285 lines • 11.3 kB
JavaScript
;
/**
* Example demonstrating the use of the graceful degradation mechanism
*/
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
/**
* Example feature toggle for a high-resolution chart display
*/
const highResChartFeature = {
id: 'high-res-charts',
name: 'High Resolution Charts',
description: 'Displays charts in high resolution with detailed rendering',
priority: index_1.FeaturePriority.USEFUL,
enabled: true,
manualToggleAllowed: true,
powerConsumption: 5, // watts
cpuUsage: 15, // percentage
memoryUsage: 250, // MB
bandwidthUsage: 50, // KB/s
storageIops: 20,
marineSettings: {
requiredInRoughSeas: false,
requiredForNavigation: false,
requiredForSafety: false,
requiresGoodConnectivity: true
}
};
/**
* Example feature toggle for weather data updates
*/
const weatherUpdatesFeature = {
id: 'weather-updates',
name: 'Weather Data Updates',
description: 'Fetches and displays real-time weather data',
priority: index_1.FeaturePriority.IMPORTANT,
enabled: true,
manualToggleAllowed: true,
powerConsumption: 3, // watts
cpuUsage: 5, // percentage
memoryUsage: 100, // MB
bandwidthUsage: 30, // KB/s
storageIops: 10,
marineSettings: {
requiredInRoughSeas: true,
requiredForNavigation: true,
requiredForSafety: false,
requiresGoodConnectivity: true
}
};
/**
* Example feature toggle for collision avoidance system
*/
const collisionAvoidanceFeature = {
id: 'collision-avoidance',
name: 'Collision Avoidance System',
description: 'Monitors surroundings and alerts for potential collisions',
priority: index_1.FeaturePriority.CRITICAL,
enabled: true,
manualToggleAllowed: false,
powerConsumption: 8, // watts
cpuUsage: 20, // percentage
memoryUsage: 150, // MB
bandwidthUsage: 5, // KB/s
storageIops: 30,
marineSettings: {
requiredInRoughSeas: true,
requiredForNavigation: true,
requiredForSafety: true,
requiresGoodConnectivity: false
}
};
/**
* Example feature toggle for entertainment system
*/
const entertainmentFeature = {
id: 'entertainment',
name: 'Entertainment System',
description: 'Music, videos, and other entertainment content',
priority: index_1.FeaturePriority.COMFORT,
enabled: true,
manualToggleAllowed: true,
powerConsumption: 15, // watts
cpuUsage: 25, // percentage
memoryUsage: 500, // MB
bandwidthUsage: 200, // KB/s
storageIops: 50,
marineSettings: {
requiredInRoughSeas: false,
requiredForNavigation: false,
requiredForSafety: false,
requiresGoodConnectivity: false
}
};
/**
* Example of normal sailing conditions
*/
async function normalSailingExample() {
console.log('=== Normal Sailing Conditions Example ===');
// Create degradation manager
const degradationManager = new index_1.DegradationManager();
// Register features
degradationManager.registerFeature(highResChartFeature);
degradationManager.registerFeature(weatherUpdatesFeature);
degradationManager.registerFeature(collisionAvoidanceFeature);
degradationManager.registerFeature(entertainmentFeature);
// Set up normal sailing environment
const environment = {
seaState: 'calm',
weather: 'clear',
windSpeed: 10,
temperature: 22,
powerStatus: 'normal',
connectivityQuality: 0.9,
expectedFailureRate: 1.0,
recommendedTimeoutMultiplier: 1.0,
criticalOperationsOnly: false
};
// Update environment
degradationManager.updateMarineEnvironment(environment);
// Check feature status
console.log('Quality Level:', degradationManager.getQualityLevel());
console.log('High-Res Charts enabled:', degradationManager.isFeatureEnabled('high-res-charts'));
console.log('Weather Updates enabled:', degradationManager.isFeatureEnabled('weather-updates'));
console.log('Collision Avoidance enabled:', degradationManager.isFeatureEnabled('collision-avoidance'));
console.log('Entertainment enabled:', degradationManager.isFeatureEnabled('entertainment'));
// Show metrics
console.log('Resource usage:', degradationManager.getMetrics().resourceUsage);
}
/**
* Example of rough seas with limited connectivity
*/
async function roughSeasExample() {
console.log('\n=== Rough Seas with Limited Connectivity Example ===');
// Create degradation manager
const degradationManager = new index_1.DegradationManager();
// Register features
degradationManager.registerFeature(highResChartFeature);
degradationManager.registerFeature(weatherUpdatesFeature);
degradationManager.registerFeature(collisionAvoidanceFeature);
degradationManager.registerFeature(entertainmentFeature);
// Set up rough seas environment
const environment = {
seaState: 'rough',
weather: 'storm',
windSpeed: 30,
temperature: 15,
powerStatus: 'normal',
connectivityQuality: 0.2, // Poor connectivity
expectedFailureRate: 2.0,
recommendedTimeoutMultiplier: 1.5,
criticalOperationsOnly: false
};
// Update environment
degradationManager.updateMarineEnvironment(environment);
// Check feature status
console.log('Quality Level:', degradationManager.getQualityLevel());
console.log('High-Res Charts enabled:', degradationManager.isFeatureEnabled('high-res-charts'));
console.log('Weather Updates enabled:', degradationManager.isFeatureEnabled('weather-updates'));
console.log('Collision Avoidance enabled:', degradationManager.isFeatureEnabled('collision-avoidance'));
console.log('Entertainment enabled:', degradationManager.isFeatureEnabled('entertainment'));
// Show metrics
console.log('Resource usage:', degradationManager.getMetrics().resourceUsage);
}
/**
* Example of power conservation mode
*/
async function powerConservationExample() {
console.log('\n=== Power Conservation Mode Example ===');
// Create degradation manager
const degradationManager = new index_1.DegradationManager();
// Register features
degradationManager.registerFeature(highResChartFeature);
degradationManager.registerFeature(weatherUpdatesFeature);
degradationManager.registerFeature(collisionAvoidanceFeature);
degradationManager.registerFeature(entertainmentFeature);
// Set up power conservation environment
const environment = {
seaState: 'moderate',
weather: 'cloudy',
windSpeed: 15,
temperature: 18,
powerStatus: 'conservation', // Power conservation mode
connectivityQuality: 0.7,
expectedFailureRate: 1.2,
recommendedTimeoutMultiplier: 1.2,
criticalOperationsOnly: false
};
// Update environment
degradationManager.updateMarineEnvironment(environment);
// Check feature status
console.log('Quality Level:', degradationManager.getQualityLevel());
console.log('High-Res Charts enabled:', degradationManager.isFeatureEnabled('high-res-charts'));
console.log('Weather Updates enabled:', degradationManager.isFeatureEnabled('weather-updates'));
console.log('Collision Avoidance enabled:', degradationManager.isFeatureEnabled('collision-avoidance'));
console.log('Entertainment enabled:', degradationManager.isFeatureEnabled('entertainment'));
// Show metrics
console.log('Resource usage:', degradationManager.getMetrics().resourceUsage);
}
/**
* Example of emergency mode
*/
async function emergencyModeExample() {
console.log('\n=== Emergency Mode Example ===');
// Create degradation manager
const degradationManager = new index_1.DegradationManager();
// Register features
degradationManager.registerFeature(highResChartFeature);
degradationManager.registerFeature(weatherUpdatesFeature);
degradationManager.registerFeature(collisionAvoidanceFeature);
degradationManager.registerFeature(entertainmentFeature);
// Set up emergency environment
const environment = {
seaState: 'very_rough',
weather: 'storm',
windSpeed: 45,
temperature: 10,
powerStatus: 'critical',
connectivityQuality: 0.1,
expectedFailureRate: 3.0,
recommendedTimeoutMultiplier: 0.5,
criticalOperationsOnly: true // Emergency mode
};
// Update environment
degradationManager.updateMarineEnvironment(environment);
// Check feature status
console.log('Quality Level:', degradationManager.getQualityLevel());
console.log('High-Res Charts enabled:', degradationManager.isFeatureEnabled('high-res-charts'));
console.log('Weather Updates enabled:', degradationManager.isFeatureEnabled('weather-updates'));
console.log('Collision Avoidance enabled:', degradationManager.isFeatureEnabled('collision-avoidance'));
console.log('Entertainment enabled:', degradationManager.isFeatureEnabled('entertainment'));
// Show metrics
console.log('Resource usage:', degradationManager.getMetrics().resourceUsage);
}
/**
* Example of manual quality level setting
*/
async function manualQualityLevelExample() {
console.log('\n=== Manual Quality Level Setting Example ===');
// Create degradation manager
const degradationManager = new index_1.DegradationManager();
// Register features
degradationManager.registerFeature(highResChartFeature);
degradationManager.registerFeature(weatherUpdatesFeature);
degradationManager.registerFeature(collisionAvoidanceFeature);
degradationManager.registerFeature(entertainmentFeature);
// Set up normal environment
const environment = {
seaState: 'calm',
weather: 'clear',
windSpeed: 10,
temperature: 22,
powerStatus: 'normal',
connectivityQuality: 0.9,
expectedFailureRate: 1.0,
recommendedTimeoutMultiplier: 1.0,
criticalOperationsOnly: false
};
// Update environment
degradationManager.updateMarineEnvironment(environment);
// Check initial feature status
console.log('Initial Quality Level:', degradationManager.getQualityLevel());
console.log('Initial Entertainment enabled:', degradationManager.isFeatureEnabled('entertainment'));
// Manually set quality level to MINIMAL
console.log('\nManually setting quality level to MINIMAL...');
degradationManager.setQualityLevel(index_1.ServiceQualityLevel.MINIMAL);
// Check feature status after manual change
console.log('New Quality Level:', degradationManager.getQualityLevel());
console.log('Entertainment enabled after change:', degradationManager.isFeatureEnabled('entertainment'));
// Show metrics
console.log('Resource usage:', degradationManager.getMetrics().resourceUsage);
}
/**
* Run all examples
*/
async function runAllExamples() {
await normalSailingExample();
await roughSeasExample();
await powerConservationExample();
await emergencyModeExample();
await manualQualityLevelExample();
}
// Run the examples
runAllExamples().catch(console.error);
//# sourceMappingURL=DegradationExample.js.map