45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
/**
|
|
* Service de monitoring des requêtes concurrentes vers Komga
|
|
* Permet de tracker le nombre de requêtes actives et d'alerter en cas de charge élevée
|
|
*/
|
|
import logger from "@/lib/logger";
|
|
|
|
class RequestMonitor {
|
|
private activeRequests = 0;
|
|
private readonly thresholds = {
|
|
warning: 10,
|
|
high: 20,
|
|
critical: 30,
|
|
};
|
|
|
|
incrementActive(): number {
|
|
this.activeRequests++;
|
|
this.checkThresholds();
|
|
return this.activeRequests;
|
|
}
|
|
|
|
decrementActive(): number {
|
|
this.activeRequests = Math.max(0, this.activeRequests - 1);
|
|
return this.activeRequests;
|
|
}
|
|
|
|
getActiveCount(): number {
|
|
return this.activeRequests;
|
|
}
|
|
|
|
private checkThresholds(): void {
|
|
const count = this.activeRequests;
|
|
|
|
if (count >= this.thresholds.critical) {
|
|
logger.warn(`[REQUEST-MONITOR] 🔴 CRITICAL concurrency: ${count} active requests`);
|
|
} else if (count >= this.thresholds.high) {
|
|
logger.warn(`[REQUEST-MONITOR] ⚠️ HIGH concurrency: ${count} active requests`);
|
|
} else if (count >= this.thresholds.warning) {
|
|
logger.info(`[REQUEST-MONITOR] ⚡ Warning concurrency: ${count} active requests`);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Singleton instance
|
|
export const RequestMonitorService = new RequestMonitor();
|