import { PrismaService } from "../../../database/prisma/prisma.service";
import { QueryLogDto, QueryErrorLogDto, QuerySlowRequestDto, QueryLogStatsDto, QueryAlertHistoryDto, UpdateLogConfigDto, CleanupLogDto, UpdateAlertConfigDto, TestAlertDto, LogLevel as DtoLogLevel, AlertType as DtoAlertType, AlertStatus as DtoAlertStatus, AlertSeverity as DtoAlertSeverity } from '../dto';
export interface LogItem {
    '@timestamp': string;
    level: DtoLogLevel;
    message: string;
    trace: {
        id: string;
        span_id: string;
        parent_span_id?: string;
    };
    http: {
        request_id: string;
        method: string;
        url: string;
        status_code: number;
        duration_ms: number;
    };
    user?: {
        id: string;
        name: string;
    };
    client: {
        ip: string;
        user_agent: string;
    };
    service: {
        name: string;
        region: string;
        instance: string;
    };
    error?: {
        type: string;
        message: string;
        code?: string;
        stack?: string;
    };
}
export interface PaginatedResult<T> {
    items: T[];
    total: number;
    page: number;
    limit: number;
    totalPages: number;
    hasNext: boolean;
    hasPrev: boolean;
}
export interface LogConfig {
    level: DtoLogLevel;
    sampling: {
        enabled: boolean;
        rules: {
            alwaysLog: {
                levels: DtoLogLevel[];
                paths: string[];
            };
            neverLog: {
                paths: string[];
            };
            dynamic: {
                qpsThreshold: number;
                minSampleRate: number;
                maxSampleRate: number;
            };
        };
    };
    retention: {
        http: number;
        application: number;
        error: number;
    };
    alerts: AlertConfig;
    updatedAt: string;
    updatedBy: string;
}
export interface AlertConfig {
    slowRequest: {
        enabled: boolean;
        thresholdMs: number;
        excludePaths: string[];
    };
    errorRate: {
        enabled: boolean;
        thresholdPercent: number;
        windowMinutes: number;
        minRequests?: number;
    };
    ipAnomaly?: {
        enabled: boolean;
        maxRequestsPerMinute: number;
        blockDurationMinutes: number;
    };
    diskSpace: {
        enabled: boolean;
        warningPercent: number;
        criticalPercent: number;
    };
    notifications?: {
        slack: {
            enabled: boolean;
            webhookConfigured: boolean;
        };
        feishu: {
            enabled: boolean;
            webhookConfigured: boolean;
        };
        email: {
            enabled: boolean;
            recipientCount: number;
        };
    };
    updatedAt?: string;
    updatedBy?: string;
}
export interface AlertItem {
    id: string;
    type: DtoAlertType;
    severity: DtoAlertSeverity;
    message: string;
    context: Record<string, any>;
    sentAt: string;
    channels: string[];
    status: DtoAlertStatus;
}
export interface SpanInfo {
    spanId: string;
    parentSpanId: string | null;
    service: string;
    region: string;
    operation: string;
    startTime: string;
    duration: number;
    status: 'SUCCESS' | 'ERROR';
}
export interface TimelineEvent {
    time: number;
    event: string;
}
export interface TraceData {
    traceId: string;
    startTime: string;
    endTime: string;
    totalDuration: number;
    spans: SpanInfo[];
    timeline: TimelineEvent[];
}
export declare class LogManagementService {
    private readonly prisma;
    private defaultConfig;
    constructor(prisma: PrismaService);
    private isValidUUID;
    private timeRangeWhere;
    private paginationMeta;
    private groupByCount;
    queryLogs(query: QueryLogDto): Promise<PaginatedResult<LogItem> & {
        summary?: any;
    }>;
    getTrace(traceId: string): Promise<TraceData>;
    queryErrorLogs(query: QueryErrorLogDto): Promise<PaginatedResult<LogItem> & {
        summary: any;
    }>;
    querySlowRequests(query: QuerySlowRequestDto): Promise<PaginatedResult<any> & {
        summary: any;
    }>;
    getConfig(): Promise<LogConfig>;
    updateConfig(dto: UpdateLogConfigDto, userId: string): Promise<LogConfig>;
    cleanupLogs(dto: CleanupLogDto): Promise<any>;
    getStats(query: QueryLogStatsDto): Promise<any>;
    getAlertHistory(query: QueryAlertHistoryDto): Promise<PaginatedResult<AlertItem> & {
        summary: any;
    }>;
    getAlertConfig(): Promise<AlertConfig>;
    updateAlertConfig(dto: UpdateAlertConfigDto, userId: string): Promise<AlertConfig>;
    testAlert(dto: TestAlertDto): Promise<any>;
    private validateTimeRange;
    private transformLogToItem;
}
