survey-mcp-server
Version:
Survey management server handling survey creation, response collection, analysis, and reporting with database access for data management
87 lines (86 loc) • 2.71 kB
TypeScript
import { BaseError } from '../middleware/error-handling.js';
export interface CircuitBreakerConfig {
failureThreshold: number;
resetTimeout: number;
monitoringPeriod: number;
expectedErrors?: Array<string | typeof BaseError>;
}
export interface RetryConfig {
maxAttempts: number;
baseDelay: number;
maxDelay: number;
backoffMultiplier: number;
retryableErrors?: Array<string | typeof BaseError>;
}
export interface HealthCheckResult {
isHealthy: boolean;
lastCheck: Date;
responseTime?: number;
error?: string;
details?: any;
}
export declare enum CircuitBreakerState {
CLOSED = "CLOSED",
OPEN = "OPEN",
HALF_OPEN = "HALF_OPEN"
}
export declare class CircuitBreaker {
private state;
private failureCount;
private lastFailureTime;
private nextAttemptTime;
private config;
constructor(config: CircuitBreakerConfig);
execute<T>(operation: () => Promise<T>): Promise<T>;
private onSuccess;
private onFailure;
private shouldTripCircuit;
private shouldAttemptReset;
getState(): CircuitBreakerState;
getFailureCount(): number;
reset(): void;
}
export declare class RetryHandler {
private config;
constructor(config: RetryConfig);
execute<T>(operation: () => Promise<T>, operationName?: string): Promise<T>;
private shouldRetry;
private calculateDelay;
private delay;
}
export declare abstract class BaseService {
protected serviceName: string;
protected circuitBreaker: CircuitBreaker;
protected retryHandler: RetryHandler;
private healthStatus;
private healthCheckInterval;
constructor(serviceName: string, circuitBreakerConfig?: Partial<CircuitBreakerConfig>, retryConfig?: Partial<RetryConfig>);
protected executeWithResilience<T>(operation: () => Promise<T>, operationName: string, options?: {
useCircuitBreaker?: boolean;
useRetry?: boolean;
timeout?: number;
}): Promise<T>;
private withTimeout;
protected abstract performHealthCheck(): Promise<HealthCheckResult>;
private startHealthMonitoring;
private updateHealthStatus;
getHealthStatus(): HealthCheckResult;
getServiceMetrics(): {
circuitBreakerState: CircuitBreakerState;
failureCount: number;
healthStatus: HealthCheckResult;
};
resetCircuitBreaker(): void;
shutdown(): Promise<void>;
}
export interface ServiceConfig {
enabled: boolean;
circuitBreaker?: Partial<CircuitBreakerConfig>;
retry?: Partial<RetryConfig>;
healthCheck?: {
enabled: boolean;
interval: number;
timeout: number;
};
}
export declare const defaultServiceConfig: ServiceConfig;