/** * Adaptive SMTP Logging System * Automatically switches between logging modes based on server load (active connections) * to maintain performance during high-concurrency scenarios */ import * as plugins from '../../../../plugins.js'; import { SecurityLogLevel, SecurityEventType } from '../constants.js'; import type { ISmtpSession } from '../interfaces.js'; import type { LogLevel, ISmtpLogOptions } from './logging.js'; /** * Log modes based on server load */ export declare enum LogMode { VERBOSE = "VERBOSE",// < 20 connections: Full detailed logging REDUCED = "REDUCED",// 20-40 connections: Limited command/response logging, full error logging MINIMAL = "MINIMAL" } /** * Configuration for adaptive logging thresholds */ export interface IAdaptiveLogConfig { verboseThreshold: number; reducedThreshold: number; aggregationInterval: number; maxAggregatedEntries: number; } /** * Connection metadata for aggregation tracking */ interface IConnectionTracker { activeConnections: number; peakConnections: number; totalConnections: number; connectionsPerSecond: number; lastConnectionTime: number; } /** * Adaptive SMTP Logger that scales logging based on server load */ export declare class AdaptiveSmtpLogger { private static instance; private currentMode; private config; private aggregatedEntries; private aggregationTimer; private connectionTracker; private constructor(); /** * Get singleton instance */ static getInstance(config?: Partial): AdaptiveSmtpLogger; /** * Update active connection count and adjust log mode if needed */ updateConnectionCount(activeConnections: number): void; /** * Track new connection for rate calculation */ trackConnection(): void; /** * Get current logging mode */ getCurrentMode(): LogMode; /** * Get connection statistics */ getConnectionStats(): IConnectionTracker; /** * Log a message with adaptive behavior */ log(level: LogLevel, message: string, options?: ISmtpLogOptions): void; /** * Log command with adaptive behavior */ logCommand(command: string, socket: plugins.net.Socket | plugins.tls.TLSSocket, session?: ISmtpSession): void; /** * Log response with adaptive behavior */ logResponse(response: string, socket: plugins.net.Socket | plugins.tls.TLSSocket): void; /** * Log connection event with adaptive behavior */ logConnection(socket: plugins.net.Socket | plugins.tls.TLSSocket, eventType: 'connect' | 'close' | 'error', session?: ISmtpSession, error?: Error): void; /** * Log security event (always logged regardless of mode) */ logSecurityEvent(level: SecurityLogLevel, type: SecurityEventType, message: string, details: Record, ipAddress?: string, domain?: string, success?: boolean): void; /** * Determine appropriate log mode based on connection count */ private determineLogMode; /** * Switch to a new log mode */ private switchLogMode; /** * Add entry to aggregation buffer */ private aggregateEntry; /** * Start the aggregation timer */ private startAggregationTimer; /** * Flush aggregated entries to logs */ private flushAggregatedEntries; /** * Cleanup resources */ destroy(): void; } /** * Default instance for easy access */ export declare const adaptiveLogger: AdaptiveSmtpLogger; export {};