UNPKG

@clipwhisperer/common

Version:

ClipWhisperer Common - Shared library providing core utilities, database schemas, authentication, bucket management, and common functionality across all ClipWhisperer microservices

111 lines (99 loc) 2.63 kB
/** * Performance Metrics Infrastructure * Centralized performance tracking system used across all services */ export interface PerformanceMetrics { totalRequests: number; averageResponseTime: number; successRate: number; queueSize: number; memoryUsage: NodeJS.MemoryUsage; uptime: number; } export interface PerformanceData { totalRequests: number; totalResponseTime: number; successCount: number; startTime: number; } export class PerformanceTracker { private metrics: PerformanceData = { totalRequests: 0, totalResponseTime: 0, successCount: 0, startTime: Date.now() }; /** * Track a successful request */ trackSuccess(responseTime?: number): void { this.metrics.totalRequests++; this.metrics.successCount++; if (responseTime !== undefined) { this.metrics.totalResponseTime += responseTime; } } /** * Track a failed request */ trackError(responseTime?: number): void { this.metrics.totalRequests++; if (responseTime !== undefined) { this.metrics.totalResponseTime += responseTime; } } /** * Track a request with timing */ async trackRequest<T>(operation: () => Promise<T>): Promise<T> { const startTime = Date.now(); try { const result = await operation(); this.trackSuccess(Date.now() - startTime); return result; } catch (error) { this.trackError(Date.now() - startTime); throw error; } } /** * Get current performance metrics */ getMetrics(): PerformanceMetrics { const averageResponseTime = this.metrics.totalRequests > 0 ? this.metrics.totalResponseTime / this.metrics.totalRequests : 0; const successRate = this.metrics.totalRequests > 0 ? (this.metrics.successCount / this.metrics.totalRequests) * 100 : 100; return { totalRequests: this.metrics.totalRequests, averageResponseTime, successRate, queueSize: 0, // Override in subclasses that have queue access memoryUsage: process.memoryUsage(), uptime: Date.now() - this.metrics.startTime }; } /** * Reset metrics */ reset(): void { this.metrics = { totalRequests: 0, totalResponseTime: 0, successCount: 0, startTime: Date.now() }; } /** * Get raw metrics data */ getRawData(): PerformanceData { return { ...this.metrics }; } } /** * Global performance tracker instance */ export const globalPerformanceTracker = new PerformanceTracker();