github.com/projecteru2/core@v0.0.0-20240321043226-06bcc1c23f58/metrics/handler.go (about) 1 package metrics 2 3 import ( 4 "context" 5 "net/http" 6 7 "github.com/projecteru2/core/cluster" 8 "github.com/projecteru2/core/log" 9 "github.com/projecteru2/core/types" 10 ) 11 12 // ResourceMiddleware to make sure update resource correct 13 func (m *Metrics) ResourceMiddleware(cluster cluster.Cluster) func(http.Handler) http.Handler { 14 logger := log.WithFunc("metrics.ResourceMiddleware") 15 return func(h http.Handler) http.Handler { 16 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 17 ctx, cancel := context.WithTimeout(r.Context(), m.Config.GlobalTimeout) 18 defer cancel() 19 nodes, err := cluster.ListPodNodes(ctx, &types.ListNodesOptions{All: true}) 20 if err != nil { 21 logger.Error(ctx, err, "Get all nodes err") 22 } 23 for node := range nodes { 24 m.SendPodNodeStatus(ctx, node) 25 metrics, err := m.rmgr.GetNodeMetrics(ctx, node) 26 if err != nil { 27 logger.Error(ctx, err, "Get metrics failed") 28 continue 29 } 30 m.SendMetrics(ctx, metrics...) 31 } 32 33 h.ServeHTTP(w, r) 34 }) 35 } 36 }