@@ -106,7 +106,6 @@ type resolverSnapshot struct {
106106 total uint64
107107 failed uint64
108108 success float64
109- avgRttMs float64
110109 avgObservedMs float64
111110 lastUpdate time.Time
112111 lastAction time.Time
@@ -658,7 +657,6 @@ func (mc *MetricsCollector) collectResolverSnapshots() ([]resolverSnapshot, map[
658657 successRate = float64 (total - failed ) / float64 (total )
659658 }
660659
661- avgRtt := server .rtt .Value ()
662660 lastUpdate := server .lastUpdateTime
663661 lastAction := server .lastActionTS
664662 score := mc .proxy .serversInfo .calculateServerScore (server )
@@ -678,7 +676,6 @@ func (mc *MetricsCollector) collectResolverSnapshots() ([]resolverSnapshot, map[
678676 total : total ,
679677 failed : failed ,
680678 success : successRate ,
681- avgRttMs : avgRtt ,
682679 lastUpdate : lastUpdate ,
683680 lastAction : lastAction ,
684681 status : status ,
@@ -857,70 +854,26 @@ func (mc *MetricsCollector) GetMetrics() map[string]interface{} {
857854 cacheStats := mc .collectCacheStats (cacheHitRatio , cacheHits , cacheMisses )
858855 resolverSnapshots , resolverIndex := mc .collectResolverSnapshots ()
859856
860- // Calculate per-server metrics sorted by increasing average response time
861- serverMetrics := make ([]map [string ]interface {}, 0 )
862-
863- // Create a slice of server performance data
864- type serverPerf struct {
865- name string
866- queries uint64
867- avgTime float64
868- }
869-
870- // Read server data with its own lock
857+ // Update resolver snapshots with observed average response times.
871858 mc .serverMutex .RLock ()
872- serverPerfs := make ([]serverPerf , 0 , len (mc .serverQueryCount ))
873859 for server , count := range mc .serverQueryCount {
874860 avgTime := float64 (0 )
875861 if count > 0 {
876862 avgTime = float64 (mc .serverResponseTime [server ]) / float64 (count )
877863 }
878- serverPerfs = append (serverPerfs , serverPerf {
879- name : server ,
880- queries : count ,
881- avgTime : avgTime ,
882- })
864+ if snapshot , ok := resolverIndex [server ]; ok {
865+ snapshot .avgObservedMs = avgTime
866+ resolverIndex [server ] = snapshot
867+ }
883868 }
884869 mc .serverMutex .RUnlock ()
885870
886- // Sort by increasing average response time (faster servers first)
887- sort .Slice (serverPerfs , func (i , j int ) bool {
888- if serverPerfs [i ].avgTime != serverPerfs [j ].avgTime {
889- return serverPerfs [i ].avgTime < serverPerfs [j ].avgTime
890- }
891- return serverPerfs [i ].name < serverPerfs [j ].name
892- })
893-
894- for _ , sp := range serverPerfs {
895- if snapshot , ok := resolverIndex [sp .name ]; ok {
896- snapshot .avgObservedMs = sp .avgTime
897- resolverIndex [sp .name ] = snapshot
898- }
899- }
900871 for i , snapshot := range resolverSnapshots {
901872 if updated , ok := resolverIndex [snapshot .name ]; ok {
902873 resolverSnapshots [i ] = updated
903874 }
904875 }
905876
906- // Convert to map for JSON output
907- for _ , sp := range serverPerfs {
908- entry := map [string ]interface {}{
909- "name" : sp .name ,
910- "queries" : sp .queries ,
911- "avg_response_ms" : sp .avgTime ,
912- }
913- if snapshot , ok := resolverIndex [sp .name ]; ok {
914- entry ["status" ] = snapshot .status
915- entry ["success_rate" ] = snapshot .success
916- entry ["failed_queries" ] = snapshot .failed
917- entry ["total_queries" ] = snapshot .total
918- entry ["score" ] = snapshot .score
919- entry ["avg_rtt_ms" ] = snapshot .avgRttMs
920- }
921- serverMetrics = append (serverMetrics , entry )
922- }
923-
924877 // Get top domains (limited to 20) sorted by decreasing count
925878 topDomainsList := make ([]map [string ]interface {}, 0 )
926879 if mc .privacyLevel < 2 {
@@ -1011,7 +964,6 @@ func (mc *MetricsCollector) GetMetrics() map[string]interface{} {
1011964 "success_rate" : snapshot .success ,
1012965 "total_queries" : snapshot .total ,
1013966 "failed_queries" : snapshot .failed ,
1014- "avg_rtt_ms" : snapshot .avgRttMs ,
1015967 "score" : snapshot .score ,
1016968 }
1017969 if snapshot .avgObservedMs > 0 {
@@ -1042,7 +994,6 @@ func (mc *MetricsCollector) GetMetrics() map[string]interface{} {
1042994 "cache_misses" : cacheMisses ,
1043995 "avg_response_time" : avgResponseTime ,
1044996 "blocked_queries" : blockCount ,
1045- "servers" : serverMetrics ,
1046997 "top_domains" : topDomainsList ,
1047998 "query_types" : queryTypesList ,
1048999 "recent_queries" : recentQueries ,
0 commit comments