@sailboat-computer/resilience
Version:
Enhanced resilience patterns for sailboat computer v3 with marine-specific adaptations
180 lines • 5.38 kB
TypeScript
/**
* Core types for the resilience framework
*/
import { CircuitBreakerState, MarineFailureType, OperationalContext, MarineEnvironmentStatus } from '@sailboat-computer/sailboat-types';
export { CircuitBreakerState, MarineFailureType, OperationalContext, MarineEnvironmentStatus };
export type CircuitBreakerStateType = CircuitBreakerState;
export type MarineFailureTypeType = MarineFailureType;
export type OperationalContextType = OperationalContext;
/**
* Circuit breaker configuration
*/
export interface CircuitBreakerConfig {
failureThreshold: number;
successThreshold: number;
timeout: number;
operationalContext: OperationalContextType;
failureTypes: MarineFailureTypeType[];
environmentalAdjustments: {
roughSeas: boolean;
lowPower: boolean;
limitedConnectivity: boolean;
};
volumeThreshold: number;
errorPercentageThreshold: number;
slowCallDurationThreshold: number;
slowCallRateThreshold: number;
}
/**
* Circuit breaker metrics
*/
export interface CircuitBreakerMetrics {
state: CircuitBreakerStateType;
totalRequests: number;
successfulRequests: number;
failedRequests: number;
rejectedRequests: number;
averageResponseTime: number;
slowCalls: number;
environmentalFailures: number;
powerRelatedFailures: number;
connectivityFailures: number;
sensorFailures: number;
lastFailureTime?: Date;
lastSuccessTime?: Date;
stateChangedAt: Date;
nextAttemptAt?: Date;
}
/**
* Bulkhead resource pool configuration
*/
export interface BulkheadConfig {
poolName: string;
maxConcurrentRequests: number;
maxWaitTime: number;
priority: 'critical' | 'normal' | 'low';
marineSystemType: 'navigation' | 'safety' | 'comfort' | 'maintenance';
powerConsumption: 'high' | 'medium' | 'low';
operationalDependency: 'essential' | 'important' | 'optional';
}
/**
* Resource pool metrics
*/
export interface ResourcePoolMetrics {
poolName: string;
totalCapacity: number;
availableResources: number;
activeRequests: number;
queuedRequests: number;
rejectedRequests: number;
averageWaitTime: number;
maxWaitTime: number;
powerImpact: number;
criticalRequestsActive: number;
systemHealthImpact: number;
}
/**
* Timeout configuration with hierarchical structure
*/
export interface TimeoutConfig {
operationTimeout: number;
serviceTimeout: number;
systemTimeout: number;
environmentalMultiplier: number;
operationalContext: OperationalContextType;
maxRetries: number;
retryBackoffMultiplier: number;
maxRetryDelay: number;
criticalOperationTimeout: number;
sensorReadTimeout: number;
networkOperationTimeout: number;
}
/**
* Timeout metrics
*/
export interface TimeoutMetrics {
totalOperations: number;
timedOutOperations: number;
averageOperationTime: number;
maxOperationTime: number;
totalRetries: number;
successfulRetries: number;
failedRetries: number;
environmentalTimeouts: number;
criticalOperationTimeouts: number;
sensorTimeouts: number;
}
/**
* Resilience operation result
*/
export interface ResilienceResult<T> {
success: boolean;
data?: T;
error?: Error;
metrics: {
executionTime: number;
retryCount: number;
circuitBreakerState?: CircuitBreakerStateType;
resourcePoolUsed?: string;
timeoutApplied?: number;
};
marineContext: {
operationalContext: OperationalContextType;
environmentalConditions: Record<string, any>;
powerStatus: 'normal' | 'conservation' | 'critical';
connectivityStatus: 'online' | 'intermittent' | 'offline';
};
}
/**
* Resilience event for monitoring and logging
*/
export interface ResilienceEvent {
timestamp: Date;
eventType: 'circuit_breaker_opened' | 'circuit_breaker_closed' | 'timeout' | 'retry' | 'bulkhead_rejection' | 'recovery';
component: string;
details: Record<string, any>;
severity: 'info' | 'warning' | 'error' | 'critical';
marineContext: {
operationalContext: OperationalContextType;
failureType?: MarineFailureTypeType;
environmentalImpact?: boolean;
safetyImpact?: boolean;
};
}
/**
* Resilience strategy configuration
*/
export interface ResilienceStrategy {
name: string;
description: string;
circuitBreaker?: CircuitBreakerConfig;
bulkhead?: BulkheadConfig;
timeout?: TimeoutConfig;
marineEnvironmentAdaptation: boolean;
safetyFirst: boolean;
powerAware: boolean;
applicableContexts: OperationalContextType[];
applicableFailureTypes: MarineFailureTypeType[];
minimumSystemHealth: number;
}
/**
* System resilience status
*/
export interface SystemResilienceStatus {
overallHealth: number;
componentStatus: {
circuitBreakers: Record<string, CircuitBreakerMetrics>;
resourcePools: Record<string, ResourcePoolMetrics>;
timeouts: Record<string, TimeoutMetrics>;
};
marineStatus: MarineEnvironmentStatus;
activeStrategies: string[];
recentEvents: ResilienceEvent[];
recommendations: {
adjustTimeouts: boolean;
enablePowerConservation: boolean;
activateEmergencyMode: boolean;
performMaintenance: string[];
};
}
//# sourceMappingURL=types.d.ts.map