UNPKG

@sailboat-computer/resilience

Version:

Enhanced resilience patterns for sailboat computer v3 with marine-specific adaptations

285 lines 11.3 kB
"use strict"; /** * 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