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  }