UNPKG

@the_cfdude/productboard-mcp

Version:

Model Context Protocol server for Productboard REST API with dynamic tool loading

243 lines (242 loc) 6.03 kB
/** * Performance monitoring and optimization utilities for ProductBoard MCP server */ export interface PerformanceMetrics { requestId: string; operation: string; startTime: number; endTime?: number; duration?: number; cacheHit?: boolean; dataSize?: number; memoryUsage?: NodeJS.MemoryUsage; errorCount?: number; retryCount?: number; } export interface CacheEntry<T = unknown> { data: T; timestamp: number; ttl: number; accessCount: number; lastAccessed: number; size?: number; } export interface CacheStats { totalEntries: number; hitRate: number; memoryUsage: number; oldestEntry: number; newestEntry: number; averageAccessCount: number; } export interface ThrottleConfig { maxRequests: number; windowMs: number; skipSuccessfulRequests?: boolean; skipFailedRequests?: boolean; keyGenerator?: (operation: string, params?: unknown) => string; } export interface QueryOptimization { batchSize: number; concurrency: number; retryConfig: { maxRetries: number; backoffMs: number; exponential: boolean; }; cacheConfig: { ttl: number; maxSize: number; strategy: 'LRU' | 'TTL' | 'FIFO'; }; } /** * Advanced caching system with intelligent TTL and memory management */ export declare class IntelligentCache<T = unknown> { private cache; private accessOrder; private maxSize; private defaultTtl; private strategy; private hitCount; private missCount; constructor(maxSize?: number, defaultTtl?: number, // 5 minutes strategy?: 'LRU' | 'TTL' | 'FIFO'); /** * Get cached value with intelligent expiration */ get(key: string): T | null; /** * Set cached value with dynamic TTL based on data characteristics */ set(key: string, data: T, customTtl?: number): void; /** * Calculate dynamic TTL based on data characteristics */ private calculateDynamicTtl; /** * Estimate data size for memory management */ private estimateDataSize; /** * Evict entry based on strategy */ private evictEntry; /** * Update access order for LRU strategy */ private updateAccessOrder; /** * Remove key from access order array */ private removeFromAccessOrder; /** * Get cache statistics */ getStats(): CacheStats; /** * Clear expired entries */ clearExpired(): number; /** * Clear all cached entries */ clear(): void; /** * Get cache size */ size(): number; } /** * Request throttling and rate limiting */ export declare class RequestThrottler { private requests; private config; constructor(config: ThrottleConfig); /** * Check if request should be throttled */ shouldThrottle(operation: string, params?: unknown): boolean; /** * Record a request */ recordRequest(operation: string, params?: unknown, wasSuccessful?: boolean): void; /** * Get throttle status for operation */ getThrottleStatus(operation: string, params?: unknown): { isThrottled: boolean; requestCount: number; timeUntilReset: number; }; } /** * Performance metrics collector */ export declare class PerformanceCollector { private metrics; private maxMetrics; constructor(maxMetrics?: number); /** * Start tracking a performance metric */ start(operation: string, requestId?: string): PerformanceMetrics; /** * End tracking a performance metric */ end(metric: PerformanceMetrics, success?: boolean): PerformanceMetrics; /** * Record cache hit/miss */ recordCacheHit(metric: PerformanceMetrics, isHit: boolean): void; /** * Record data size */ recordDataSize(metric: PerformanceMetrics, dataSize: number): void; /** * Record retry attempt */ recordRetry(metric: PerformanceMetrics): void; /** * Get performance statistics */ getStats(operation?: string): { totalRequests: number; averageDuration: number; cacheHitRate: number; errorRate: number; averageDataSize: number; percentiles: { p50: number; p90: number; p95: number; p99: number; }; }; /** * Calculate percentile */ private percentile; /** * Generate unique request ID */ private generateRequestId; /** * Clear old metrics */ clearOldMetrics(olderThanMs?: number): number; /** * Get current metrics count */ getMetricsCount(): number; } /** * Memory usage monitor */ export declare class MemoryMonitor { private measurements; private maxMeasurements; constructor(maxMeasurements?: number); /** * Record current memory usage */ recordUsage(): NodeJS.MemoryUsage; /** * Get memory usage statistics */ getStats(): { current: NodeJS.MemoryUsage; peak: { rss: number; heapTotal: number; heapUsed: number; external: number; }; average: { rss: number; heapTotal: number; heapUsed: number; external: number; }; trend: 'increasing' | 'decreasing' | 'stable'; }; /** * Calculate memory usage trend */ private calculateTrend; /** * Check if memory usage is critical */ isCritical(thresholdMB?: number): boolean; /** * Force garbage collection if available */ forceGC(): boolean; } export declare const performanceCollector: PerformanceCollector; export declare const memoryMonitor: MemoryMonitor; export declare const globalCache: IntelligentCache<unknown>; export declare const defaultThrottleConfig: ThrottleConfig; export declare const aggressiveThrottleConfig: ThrottleConfig;