fix: update @push.rocks/smartproxy to version 19.6.1 and improve socket management in ConnectionManager

feat: enhance MetricsManager with reset interval and top domains tracking
This commit is contained in:
2025-06-09 17:18:50 +00:00
parent 93995d5031
commit 02dd3c77b5
5 changed files with 60 additions and 19 deletions

View File

@ -5,6 +5,10 @@ export class MetricsManager {
private logger: plugins.smartlog.Smartlog;
private smartMetrics: plugins.smartmetrics.SmartMetrics;
private dcRouter: DcRouter;
private resetInterval?: NodeJS.Timeout;
// Constants
private readonly MAX_TOP_DOMAINS = 1000; // Limit topDomains Map size
// Track email-specific metrics
private emailMetrics = {
@ -54,7 +58,7 @@ export class MetricsManager {
this.smartMetrics.start();
// Reset daily counters at midnight
setInterval(() => {
this.resetInterval = setInterval(() => {
const currentDate = new Date().toDateString();
if (currentDate !== this.emailMetrics.lastResetDate) {
@ -88,6 +92,12 @@ export class MetricsManager {
}
public async stop(): Promise<void> {
// Clear the reset interval
if (this.resetInterval) {
clearInterval(this.resetInterval);
this.resetInterval = undefined;
}
this.smartMetrics.stop();
this.logger.log('info', 'MetricsManager stopped');
}
@ -232,9 +242,23 @@ export class MetricsManager {
// Track query types
this.dnsMetrics.queryTypes[queryType] = (this.dnsMetrics.queryTypes[queryType] || 0) + 1;
// Track top domains
// Track top domains with size limit
const currentCount = this.dnsMetrics.topDomains.get(domain) || 0;
this.dnsMetrics.topDomains.set(domain, currentCount + 1);
// If we've exceeded the limit, remove the least accessed domains
if (this.dnsMetrics.topDomains.size > this.MAX_TOP_DOMAINS) {
// Convert to array, sort by count, and keep only top domains
const sortedDomains = Array.from(this.dnsMetrics.topDomains.entries())
.sort((a, b) => b[1] - a[1])
.slice(0, Math.floor(this.MAX_TOP_DOMAINS * 0.8)); // Keep 80% to avoid frequent cleanup
// Clear and repopulate with top domains
this.dnsMetrics.topDomains.clear();
sortedDomains.forEach(([domain, count]) => {
this.dnsMetrics.topDomains.set(domain, count);
});
}
}
// Security event tracking methods