/**
 * Production Deployment and Scaling Service
 * Handles deployment orchestration, auto-scaling, health monitoring, and infrastructure management
 */
import { EventEmitter } from 'events';
import type { Logger } from '../types/index.js';
export interface DeploymentConfig {
    environment: 'development' | 'staging' | 'production';
    strategy: 'rolling' | 'blue-green' | 'canary';
    scaling: {
        minInstances: number;
        maxInstances: number;
        targetCpuPercent: number;
        targetMemoryPercent: number;
        scaleUpCooldown: number;
        scaleDownCooldown: number;
    };
    healthCheck: {
        path: string;
        interval: number;
        timeout: number;
        retries: number;
        gracePeriod: number;
    };
    deployment: {
        timeout: number;
        rollbackOnFailure: boolean;
        preDeployHooks: string[];
        postDeployHooks: string[];
    };
}
export interface ServiceInstance {
    id: string;
    version: string;
    status: 'starting' | 'healthy' | 'unhealthy' | 'stopping' | 'stopped';
    cpu: number;
    memory: number;
    uptime: number;
    startTime: number;
    lastHealthCheck: number;
    endpoint: string;
    metadata: Record<string, any>;
}
export interface DeploymentStatus {
    id: string;
    version: string;
    strategy: string;
    status: 'pending' | 'in-progress' | 'completed' | 'failed' | 'rolled-back';
    startTime: number;
    endTime?: number;
    progress: number;
    instances: {
        target: number;
        current: number;
        healthy: number;
        unhealthy: number;
    };
    phases: Array<{
        name: string;
        status: 'pending' | 'running' | 'completed' | 'failed';
        startTime?: number;
        endTime?: number;
        message?: string;
    }>;
    error?: string;
}
export interface ScalingDecision {
    action: 'scale-up' | 'scale-down' | 'no-action';
    currentInstances: number;
    targetInstances: number;
    reason: string;
    confidence: number;
    metrics: {
        avgCpu: number;
        avgMemory: number;
        requestRate: number;
        responseTime: number;
    };
}
export interface InfrastructureStatus {
    environment: string;
    totalInstances: number;
    healthyInstances: number;
    unhealthyInstances: number;
    averageCpu: number;
    averageMemory: number;
    totalRequests: number;
    averageResponseTime: number;
    errorRate: number;
    lastDeployment?: {
        version: string;
        timestamp: number;
        status: string;
    };
}
export declare class DeploymentService extends EventEmitter {
    private config;
    private logger;
    private instances;
    private activeDeployment?;
    private deploymentHistory;
    private scalingCooldown;
    private healthCheckInterval?;
    private autoscalingInterval?;
    constructor(logger: Logger, config?: Partial<DeploymentConfig>);
    /**
     * Deploy new version of the service
     */
    deploy(version: string, options?: {
        strategy?: DeploymentConfig['strategy'];
        targetInstances?: number;
        skipHooks?: boolean;
    }): Promise<DeploymentStatus>;
    /**
     * Rollback to previous version
     */
    rollback(deploymentId?: string): Promise<boolean>;
    /**
     * Scale service instances
     */
    scale(targetInstances: number, reason?: string): Promise<boolean>;
    /**
     * Get current infrastructure status
     */
    getInfrastructureStatus(): InfrastructureStatus;
    /**
     * Get service instances
     */
    getInstances(): ServiceInstance[];
    /**
     * Get deployment history
     */
    getDeploymentHistory(limit?: number): DeploymentStatus[];
    /**
     * Get active deployment status
     */
    getActiveDeployment(): DeploymentStatus | undefined;
    /**
     * Register new service instance
     */
    registerInstance(instance: Omit<ServiceInstance, 'id' | 'startTime' | 'uptime' | 'lastHealthCheck'>): string;
    /**
     * Deregister service instance
     */
    deregisterInstance(instanceId: string): boolean;
    /**
     * Execute deployment phase
     */
    private executePhase;
    /**
     * Mark phase as completed
     */
    private markPhaseCompleted;
    /**
     * Execute deployment hooks
     */
    private executeHooks;
    /**
     * Perform rolling deployment
     */
    private performRollingDeployment;
    /**
     * Perform blue-green deployment
     */
    private performBlueGreenDeployment;
    /**
     * Perform canary deployment
     */
    private performCanaryDeployment;
    /**
     * Start new service instance
     */
    private startNewInstance;
    /**
     * Stop service instance
     */
    private stopInstance;
    /**
     * Wait for instances to become healthy
     */
    private waitForHealthyInstances;
    /**
     * Switch traffic to new version (placeholder for load balancer integration)
     */
    private switchTraffic;
    /**
     * Monitor canary deployment
     */
    private monitorCanary;
    /**
     * Scale up instances
     */
    private scaleUp;
    /**
     * Scale down instances
     */
    private scaleDown;
    /**
     * Get latest deployed version
     */
    private getLatestVersion;
    /**
     * Get healthy instance count
     */
    private getHealthyInstanceCount;
    /**
     * Get unhealthy instance count
     */
    private getUnhealthyInstanceCount;
    /**
     * Make scaling decision based on current metrics
     */
    private makeScalingDecision;
    /**
     * Start health check monitoring
     */
    private startHealthChecks;
    /**
     * Perform health checks on all instances
     */
    private performHealthChecks;
    /**
     * Start autoscaling monitoring
     */
    private startAutoscaling;
    /**
     * Perform autoscaling based on current metrics
     */
    private performAutoscaling;
    /**
     * Cleanup resources
     */
    destroy(): void;
}
export declare const deploymentService: (logger: Logger, config?: Partial<DeploymentConfig>) => DeploymentService;
//# sourceMappingURL=deployment-service.d.ts.map