Add healthy indicator for raft status

This commit is contained in:
Patrick Schmidt 2022-07-30 19:26:56 +02:00
parent 0f50fcb96a
commit 1a4a36d510
No known key found for this signature in database
GPG key ID: 671175E37C0DA371
2 changed files with 14 additions and 2 deletions

View file

@ -2,19 +2,21 @@ package command
import ( import (
"fmt" "fmt"
"golang.org/x/exp/slices"
"net/http" "net/http"
"os" "os"
"path" "path"
"strings" "strings"
"time" "time"
"golang.org/x/exp/slices"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/seaweedfs/raft/protobuf" "github.com/seaweedfs/raft/protobuf"
stats_collect "github.com/seaweedfs/seaweedfs/weed/stats"
"github.com/spf13/viper" "github.com/spf13/viper"
"google.golang.org/grpc/reflection" "google.golang.org/grpc/reflection"
stats_collect "github.com/seaweedfs/seaweedfs/weed/stats"
"github.com/seaweedfs/seaweedfs/weed/util/grace" "github.com/seaweedfs/seaweedfs/weed/util/grace"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
@ -179,6 +181,7 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) {
} }
ms.SetRaftServer(raftServer) ms.SetRaftServer(raftServer)
r.HandleFunc("/cluster/status", raftServer.StatusHandler).Methods("GET") r.HandleFunc("/cluster/status", raftServer.StatusHandler).Methods("GET")
r.HandleFunc("/cluster/healthz", raftServer.HealthzHandler).Methods("GET", "HEAD")
if *m.raftHashicorp { if *m.raftHashicorp {
r.HandleFunc("/raft/stats", raftServer.StatsRaftHandler).Methods("GET") r.HandleFunc("/raft/stats", raftServer.StatsRaftHandler).Methods("GET")
} }

View file

@ -26,6 +26,15 @@ func (s *RaftServer) StatusHandler(w http.ResponseWriter, r *http.Request) {
writeJsonQuiet(w, r, http.StatusOK, ret) writeJsonQuiet(w, r, http.StatusOK, ret)
} }
func (s *RaftServer) HealthzHandler(w http.ResponseWriter, r *http.Request) {
_, err := s.topo.Leader()
if err != nil {
w.WriteHeader(http.StatusServiceUnavailable)
} else {
w.WriteHeader(http.StatusOK)
}
}
func (s *RaftServer) StatsRaftHandler(w http.ResponseWriter, r *http.Request) { func (s *RaftServer) StatsRaftHandler(w http.ResponseWriter, r *http.Request) {
if s.RaftHashicorp == nil { if s.RaftHashicorp == nil {
writeJsonQuiet(w, r, http.StatusNotFound, nil) writeJsonQuiet(w, r, http.StatusNotFound, nil)