@clipwhisperer/common
Version:
ClipWhisperer Common - Shared library providing core utilities, database schemas, authentication, bucket management, and common functionality across all ClipWhisperer microservices
93 lines (92 loc) • 2.58 kB
JavaScript
;
/**
* Performance Metrics Infrastructure
* Centralized performance tracking system used across all services
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.globalPerformanceTracker = exports.PerformanceTracker = void 0;
class PerformanceTracker {
constructor() {
this.metrics = {
totalRequests: 0,
totalResponseTime: 0,
successCount: 0,
startTime: Date.now()
};
}
/**
* Track a successful request
*/
trackSuccess(responseTime) {
this.metrics.totalRequests++;
this.metrics.successCount++;
if (responseTime !== undefined) {
this.metrics.totalResponseTime += responseTime;
}
}
/**
* Track a failed request
*/
trackError(responseTime) {
this.metrics.totalRequests++;
if (responseTime !== undefined) {
this.metrics.totalResponseTime += responseTime;
}
}
/**
* Track a request with timing
*/
async trackRequest(operation) {
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() {
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() {
this.metrics = {
totalRequests: 0,
totalResponseTime: 0,
successCount: 0,
startTime: Date.now()
};
}
/**
* Get raw metrics data
*/
getRawData() {
return { ...this.metrics };
}
}
exports.PerformanceTracker = PerformanceTracker;
/**
* Global performance tracker instance
*/
exports.globalPerformanceTracker = new PerformanceTracker();