import { EventEmitter } from 'events';
import { AgentId, AgentType, AgentHealth, AgentMetrics } from '../types/agent.js';
export interface PerformanceMetrics {
    agentId: AgentId;
    timestamp: string;
    cpu: {
        usage: number;
        loadAverage: number[];
    };
    memory: {
        used: number;
        total: number;
        percentage: number;
        heapUsed: number;
        heapTotal: number;
    };
    network: {
        bytesIn: number;
        bytesOut: number;
        requestsPerSecond: number;
        avgResponseTime: number;
    };
    operations: {
        completed: number;
        failed: number;
        pending: number;
        avgDuration: number;
        successRate: number;
    };
    health: AgentHealth;
    customMetrics?: Record<string, number>;
}
export interface AgentLoad {
    agentId: AgentId;
    currentLoad: number;
    capacity: number;
    queueDepth: number;
    averageResponseTime: number;
    errorRate: number;
    lastUpdate: string;
}
export interface ScalingDecision {
    agentType: AgentType;
    action: 'scale_up' | 'scale_down' | 'redistribute' | 'none';
    reason: string;
    targetInstances: number;
    currentInstances: number;
    confidence: number;
    timestamp: string;
}
export interface PerformanceAlert {
    id: string;
    type: 'cpu_high' | 'memory_high' | 'error_rate_high' | 'response_time_high' | 'agent_unresponsive';
    severity: 'WARNING' | 'CRITICAL';
    agentId: AgentId;
    message: string;
    metrics: PerformanceMetrics;
    threshold: number;
    actualValue: number;
    timestamp: string;
    acknowledged: boolean;
}
export declare class PerformanceMonitor extends EventEmitter {
    private readonly metrics;
    private readonly agentLoads;
    private readonly alerts;
    private readonly thresholds;
    private readonly retentionPeriod;
    private readonly monitoringInterval;
    private readonly scalingCooldown;
    private lastScalingDecision;
    constructor();
    recordMetrics(metrics: PerformanceMetrics): void;
    private updateAgentLoad;
    private checkThresholds;
    private createAlert;
    private generateAlertMessage;
    private processAlert;
    private performMonitoringCycle;
    private checkUnresponsiveAgents;
    private performScalingAnalysis;
    private groupAgentsByType;
    private analyzeScalingNeed;
    private processScalingDecision;
    private considerScaling;
    private cleanupOldData;
    getAgentMetrics(agentId: AgentId, timeRange?: {
        start: string;
        end: string;
    }): PerformanceMetrics[];
    getSystemOverview(): any;
    private getRecentMetrics;
    acknowledgeAlert(alertId: string): boolean;
    getActiveAlerts(): PerformanceAlert[];
    private getAgentKey;
    updateThresholds(newThresholds: Partial<typeof this.thresholds>): void;
    getThresholds(): typeof this.thresholds;
    destroy(): void;
    /**
     * Get performance monitor metrics
     */
    getMetrics(): {
        totalMetrics: number;
        activeAgents: number;
        alertsCount: number;
        systemLoad: {
            avgCpuUsage: number;
            avgMemoryUsage: number;
            totalOperations: number;
            totalErrors: number;
        };
    };
}
/**
 * Basic AgentMetrics implementation
 */
export declare class SimpleAgentMetrics implements AgentMetrics {
    private counters;
    private gauges;
    private histograms;
    private timers;
    incrementCounter(name: string, value?: number): void;
    recordGauge(name: string, value: number): void;
    recordHistogram(name: string, value: number): void;
    recordTimer(name: string, duration: number): void;
    getCounters(): Map<string, number>;
    getGauges(): Map<string, number>;
    getHistograms(): Map<string, number[]>;
    getTimers(): Map<string, number[]>;
    clear(): void;
}
//# sourceMappingURL=performance-monitor.d.ts.map