pms-analysis-reports-mcp-server
Version:
PMS analysis reports server handling maintenance reports, equipment analysis, compliance tracking, and performance metrics with ERP access for data extraction
82 lines (81 loc) • 2.16 kB
TypeScript
import { ErrorContext } from "../middleware/error-handler.js";
export interface ServiceConfig {
timeout?: number;
retries?: number;
retryDelay?: number;
circuitBreakerThreshold?: number;
circuitBreakerTimeout?: number;
}
export interface ServiceMetrics {
totalRequests: number;
successCount: number;
errorCount: number;
averageResponseTime: number;
lastError?: Date;
circuitBreakerState: 'CLOSED' | 'OPEN' | 'HALF_OPEN';
}
export interface ServiceResponse<T = any> {
success: boolean;
data?: T;
error?: string;
metadata?: {
responseTime: number;
retryCount?: number;
cached?: boolean;
};
}
export declare abstract class BaseService {
protected config: Required<ServiceConfig>;
protected metrics: ServiceMetrics;
protected circuitBreakerFailureCount: number;
protected circuitBreakerLastFailure?: Date;
constructor(config?: ServiceConfig);
/**
* Execute a service operation with retry logic, circuit breaker, and metrics
*/
protected executeWithResilience<T>(operation: () => Promise<T>, context?: ErrorContext): Promise<ServiceResponse<T>>;
/**
* Add timeout to promise
*/
private withTimeout;
/**
* Check if operation should not be retried
*/
private shouldNotRetry;
/**
* Sleep for specified milliseconds
*/
private sleep;
/**
* Update service metrics
*/
private updateMetrics;
/**
* Check if circuit breaker should be open
*/
private isCircuitBreakerOpen;
/**
* Update circuit breaker state on failure
*/
private updateCircuitBreaker;
/**
* Reset circuit breaker on success
*/
private resetCircuitBreaker;
/**
* Get service health status
*/
getHealth(): {
status: 'healthy' | 'degraded' | 'unhealthy';
metrics: ServiceMetrics;
uptime: number;
};
/**
* Reset service metrics (useful for testing)
*/
resetMetrics(): void;
/**
* Abstract method for service-specific health checks
*/
abstract healthCheck(): Promise<boolean>;
}