mirror of
https://github.com/woodchen-ink/proxy-go.git
synced 2025-07-18 08:31:55 +08:00
feat(metrics): 优化延迟分布数据处理逻辑
- 增加对延迟分布数据的类型兼容性处理 - 新增直接使用 map[string]int64 类型的处理分支 - 优化日志输出,提供更详细的类型转换信息 - 在处理结束后打印最终的延迟分布数据 - 改进错误处理和类型转换的健壮性
This commit is contained in:
parent
f2e1b8cbf5
commit
d2e5020d22
@ -170,9 +170,14 @@ func (h *ProxyHandler) MetricsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
distribution, ok := latencyStatsMap["distribution"]
|
||||
if ok && distribution != nil {
|
||||
log.Printf("[MetricsHandler] distribution=%v", distribution)
|
||||
distributionMap, ok := distribution.(map[string]interface{})
|
||||
if ok {
|
||||
log.Printf("[MetricsHandler] distributionMap=%v", distributionMap)
|
||||
|
||||
// 尝试直接使用 map[string]int64 类型
|
||||
if distributionMap, ok := distribution.(map[string]int64); ok {
|
||||
log.Printf("[MetricsHandler] 直接使用 map[string]int64: %v", distributionMap)
|
||||
metrics.LatencyStats.Distribution = distributionMap
|
||||
} else if distributionMap, ok := distribution.(map[string]interface{}); ok {
|
||||
// 如果不是 map[string]int64,尝试转换 map[string]interface{}
|
||||
log.Printf("[MetricsHandler] 转换 map[string]interface{}: %v", distributionMap)
|
||||
metrics.LatencyStats.Distribution = make(map[string]int64)
|
||||
for k, v := range distributionMap {
|
||||
log.Printf("[MetricsHandler] 处理延迟分布项: %s=%v (type=%T)", k, v, v)
|
||||
@ -182,12 +187,10 @@ func (h *ProxyHandler) MetricsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
} else if intValue, ok := v.(int64); ok {
|
||||
metrics.LatencyStats.Distribution[k] = intValue
|
||||
log.Printf("[MetricsHandler] 已经是int64: %s=%d", k, intValue)
|
||||
} else {
|
||||
log.Printf("[MetricsHandler] 无法转换: %s=%v (type=%T)", k, v, v)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.Printf("[MetricsHandler] distribution不是map: %v (type=%T)", distribution, distribution)
|
||||
log.Printf("[MetricsHandler] distribution类型未知: %v (type=%T)", distribution, distribution)
|
||||
}
|
||||
} else {
|
||||
log.Printf("[MetricsHandler] 没有distribution字段或为nil: ok=%v, distribution=%v", ok, distribution)
|
||||
@ -216,6 +219,9 @@ func (h *ProxyHandler) MetricsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
metrics.ErrorStats.ServerErrors = serverErrors
|
||||
metrics.ErrorStats.Types = errorTypes
|
||||
|
||||
// 打印最终的延迟分布数据
|
||||
log.Printf("[MetricsHandler] 最终的延迟分布数据: %v", metrics.LatencyStats.Distribution)
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := json.NewEncoder(w).Encode(metrics); err != nil {
|
||||
log.Printf("Error encoding metrics: %v", err)
|
||||
|
Loading…
x
Reference in New Issue
Block a user