import { AxiosRequestConfig } from 'axios'; import { HttpClientService } from './http-client.service'; import { HttpLogQueryService } from './http-log-query.service'; import { HttpLogEntity } from '../entities/http-log.entity'; /** * 请求重放选项 */ export interface HttpReplayOptions { /** 是否覆盖原始请求头 */ overrideHeaders?: boolean; /** 是否覆盖原始请求体 */ overrideBody?: boolean; /** 是否覆盖原始参数 */ overrideParams?: boolean; /** 重放时的额外请求头 */ additionalHeaders?: Record; /** 重放时的额外元数据 */ metadata?: Record; /** 是否记录重放日志 */ logReplay?: boolean; /** 重放超时时间(毫秒) */ timeout?: number; } /** * 请求重放结果 */ export interface HttpReplayResult { /** 重放的日志信息 */ originalLog: HttpLogEntity; /** 重放的请求配置 */ requestConfig: AxiosRequestConfig; /** 重放的响应结果 */ response: any; /** 重放耗时(毫秒) */ responseTime: number; /** 重放是否成功 */ success: boolean; /** 错误信息(如果失败) */ error?: string; /** 重放时间戳 */ replayTimestamp: string; /** 重放ID */ replayId: string; } /** * 批量重放结果 */ export interface BatchReplayResult { /** 总请求数 */ totalRequests: number; /** 成功请求数 */ successfulRequests: number; /** 失败请求数 */ failedRequests: number; /** 成功率 */ successRate: number; /** 总耗时(毫秒) */ totalResponseTime: number; /** 平均响应时间(毫秒) */ averageResponseTime: number; /** 单个重放结果 */ results: HttpReplayResult[]; } /** * HTTP请求重放服务 * 提供基于HTTP日志的请求重放功能,支持单个请求和批量请求重放 */ export declare class HttpReplayService { private readonly httpClient; private readonly logQueryService; private readonly logger; constructor(httpClient: HttpClientService, logQueryService: HttpLogQueryService); /** * 根据日志ID重放请求 * @param logId 日志ID * @param options 重放选项 * @returns 重放结果 */ replayByLogId(logId: string, options?: HttpReplayOptions): Promise; /** * 根据请求ID重放请求 * @param requestId 请求ID * @param options 重放选项 * @returns 重放结果 */ replayByRequestId(requestId: string, options?: HttpReplayOptions): Promise; /** * 批量重放请求 * @param logIds 日志ID数组 * @param options 重放选项 * @param concurrency 并发数 * @returns 批量重放结果 */ batchReplay(logIds: string[], options?: HttpReplayOptions, concurrency?: number): Promise; /** * 根据查询条件批量重放请求 * @param queryOptions 查询选项 * @param replayOptions 重放选项 * @param concurrency 并发数 * @returns 批量重放结果 */ batchReplayByQuery(queryOptions?: any, replayOptions?: HttpReplayOptions, concurrency?: number): Promise; /** * 重放请求并比较结果 * @param logId 日志ID * @param options 重放选项 * @returns 包含原始和重放结果的比较 */ replayAndCompare(logId: string, options?: HttpReplayOptions): Promise<{ original: HttpLogEntity; replay: HttpReplayResult; comparison: { statusMatch: boolean; responseTimeDifference: number; headersMatch: boolean; bodyMatch: boolean; }; }>; /** * 构建重放配置 * @param log 原始日志 * @param options 重放选项 * @returns 请求配置 */ private buildReplayConfig; /** * 执行重放请求 * @param config 请求配置 * @param options 重放选项 * @returns 响应结果 */ private executeReplayRequest; /** * 生成重放ID * @returns 重放ID */ private generateReplayId; /** * 数组分块 * @param array 原始数组 * @param size 块大小 * @returns 分块后的数组 */ private chunkArray; /** * 比较响应头 * @param original 原始响应头 * @param replay 重放响应头 * @returns 是否匹配 */ private compareHeaders; /** * 比较响应体 * @param original 原始响应体 * @param replay 重放响应体 * @returns 是否匹配 */ private compareBodies; }