From 6ff9615664382e973aa6fe328e4d6678fc47a950 Mon Sep 17 00:00:00 2001 From: Karim Radhouani Date: Mon, 13 Apr 2026 08:07:35 -0700 Subject: [PATCH] Add cluster endpoints middleware --- pkg/collector/api/server/cluster.go | 11 +++++++++++ pkg/collector/api/server/routes.go | 16 +++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pkg/collector/api/server/cluster.go b/pkg/collector/api/server/cluster.go index 2601a7b8..961c1c92 100644 --- a/pkg/collector/api/server/cluster.go +++ b/pkg/collector/api/server/cluster.go @@ -29,6 +29,17 @@ type clusterMember struct { LockedTargets []string `json:"locked-targets,omitempty"` } +func (s *Server) requireClustering(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if s.locker == nil { + w.WriteHeader(http.StatusServiceUnavailable) + json.NewEncoder(w).Encode(APIErrors{Errors: []string{"clustering is not enabled"}}) + return + } + next.ServeHTTP(w, r) + }) +} + func (s *Server) handleClusteringGet(w http.ResponseWriter, r *http.Request) { // clusteringResponse clusteringCfg, ok, err := s.store.Config.Get("clustering", "clustering") diff --git a/pkg/collector/api/server/routes.go b/pkg/collector/api/server/routes.go index 0ed42864..1dd89e80 100644 --- a/pkg/collector/api/server/routes.go +++ b/pkg/collector/api/server/routes.go @@ -33,13 +33,15 @@ func (s *Server) adminRoutes(r *mux.Router) { } func (s *Server) clusterRoutes(r *mux.Router) { - r.HandleFunc("/cluster", s.handleClusteringGet).Methods(http.MethodGet) - r.HandleFunc("/cluster/rebalance", s.handleClusterRebalance).Methods(http.MethodPost) - r.HandleFunc("/cluster/leader", s.handleClusteringLeaderGet).Methods(http.MethodGet) - r.HandleFunc("/cluster/leader", s.handleClusteringLeaderDelete).Methods(http.MethodDelete) - r.HandleFunc("/cluster/members", s.handleClusteringMembersGet).Methods(http.MethodGet) - r.HandleFunc("/cluster/members/{id}/drain", s.handleClusteringDrainInstance).Methods(http.MethodPost) - r.HandleFunc("/cluster/move", s.handleClusterMove).Methods(http.MethodPost) // TODO: implement move target + cluster := r.PathPrefix("/cluster").Subrouter() + cluster.Use(s.requireClustering) + cluster.HandleFunc("", s.handleClusteringGet).Methods(http.MethodGet) + cluster.HandleFunc("/rebalance", s.handleClusterRebalance).Methods(http.MethodPost) + cluster.HandleFunc("/leader", s.handleClusteringLeaderGet).Methods(http.MethodGet) + cluster.HandleFunc("/leader", s.handleClusteringLeaderDelete).Methods(http.MethodDelete) + cluster.HandleFunc("/members", s.handleClusteringMembersGet).Methods(http.MethodGet) + cluster.HandleFunc("/members/{id}/drain", s.handleClusteringDrainInstance).Methods(http.MethodPost) + cluster.HandleFunc("/move", s.handleClusterMove).Methods(http.MethodPost) } func (s *Server) configRoutes(r *mux.Router) {