2.5 KiB
这是我的请求记录表:
对应的 mapper 等文件在:
D:\MyCode\Work\yd-hy\ibs-plus\plus-service\src\main\java\com\cmcc\plus\gateway
D:\MyCode\Work\yd-hy\ibs-plus\plus-service\src\main\resources\mapper\gateway
表结构:
@TableName(value = "gw_forward_record")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GwForwardRecord implements Serializable {
/**
* 记录ID
*/
@TableId(type = IdType.AUTO)
private Long recordId;
/**
* 请求UUID
*/
private String uuid;
/**
* 请求时间
*/
private LocalDateTime requestTime;
/**
* 接口路径
*/
private String requestUrl;
/**
* 请求方法
*/
private String method;
/**
* 目的地址
*/
private String targetEndpoint;
/**
* 请求响应码
*/
private Integer httpCode;
/**
* 链路追踪ID
*/
private String traceId;
/**
* 网关地址
*/
private String gatewayEndpoint;
/**
* 请求匹配的路由ID
*/
private Long routeId;
/**
* 请求耗时(ms)
*/
private Integer costTime;
@Serial
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
我现在有一个需求,需要给前端提供一个曲线图数据查询接口:
接口创建在 com.cmcc.plus.web.controller.gateway.GwForwardRecordController 下。
注意一定要保证代码执行效率。因为这是网关请求记录表,是一个量级非常大的表。
图中包含 5 条线:2xx、4xx、5xx、其他状态码(请求次数,对应表httpCode字段)、平均耗时(ms,对应表 costTime 字段)
我的图标左侧 Y 轴为 请求次数,右侧 Y 轴 平均耗时。下方 X 轴为时间坐标轴。
我想给我前端一个通用方法,查询某个时间段的这五个指标(也就是针对 requestTime 的过滤)。costTime(比如前端传 200ms-300ms 的查询)同时支持通过 requestUrl、method、targetEndpoint、httpCode、gatewayEndpoint 的过滤。
请仔细设计返回前端的结构体,做到最标准和效率。
仔细设计 requestUrl、targetEndpoint、gatewayEndpoint 是否可以使用模糊查询,前提是保证效率,因为这个表是一个非常大的表。
针对时间粒度。帮我提供时间区间内 5 分钟(例如 00:00:00 的数据就是 00:00:00-00:04:59),1小时,1天,一周,一月。时间粒度均为左闭右开。这个粒度根据前端选择进行聚合。不用一次全聚合出来。