Adds /status endpoint for self-checks
parent
0743113cef
commit
e7e135318c
44
main.go
44
main.go
|
@ -46,6 +46,12 @@ type Claims struct {
|
||||||
jwt.StandardClaims
|
jwt.StandardClaims
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StatusData holds the status of the agent and its endpoints
|
||||||
|
type StatusData struct {
|
||||||
|
AgentStatus string `json:"agent_status"`
|
||||||
|
Endpoints map[string]string `json:"endpoints"`
|
||||||
|
}
|
||||||
|
|
||||||
// NginxData holds the nginx data structure for the API response to /nginx
|
// NginxData holds the nginx data structure for the API response to /nginx
|
||||||
type NginxData struct {
|
type NginxData struct {
|
||||||
NginxState string `json:"nginx_state"`
|
NginxState string `json:"nginx_state"`
|
||||||
|
@ -217,6 +223,41 @@ func authenticationJWT(next http.Handler) http.Handler {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// statusHandler handles the /status endpoint
|
||||||
|
func statusHandler(config Config, w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Check if the agent is running
|
||||||
|
// FIXME add logic here to check if the agent is running OK, with no errors
|
||||||
|
agentStatus := "running"
|
||||||
|
|
||||||
|
// Prepare the endpoint status map
|
||||||
|
endpointStatuses := make(map[string]string)
|
||||||
|
|
||||||
|
// Check if each endpoint is available or not
|
||||||
|
endpoints := []string{"nginx", "prosody", "jicofo", "jvb", "jibri"}
|
||||||
|
for _, endpoint := range endpoints {
|
||||||
|
endpointURL := fmt.Sprintf("http://localhost:%d/%s", config.AgentPort, endpoint)
|
||||||
|
resp, err := http.Get(endpointURL)
|
||||||
|
if err != nil {
|
||||||
|
endpointStatuses[endpoint] = "not available"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode == http.StatusOK {
|
||||||
|
endpointStatuses[endpoint] = "available"
|
||||||
|
} else {
|
||||||
|
endpointStatuses[endpoint] = "not available"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare the response data and send back the JSON
|
||||||
|
statusData := StatusData{
|
||||||
|
AgentStatus: agentStatus,
|
||||||
|
Endpoints: endpointStatuses,
|
||||||
|
}
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
json.NewEncoder(w).Encode(statusData)
|
||||||
|
}
|
||||||
|
|
||||||
// nginxHandler handles the /nginx endpoint
|
// nginxHandler handles the /nginx endpoint
|
||||||
func nginxHandler(config Config, w http.ResponseWriter, r *http.Request) {
|
func nginxHandler(config Config, w http.ResponseWriter, r *http.Request) {
|
||||||
data := NginxData {
|
data := NginxData {
|
||||||
|
@ -310,6 +351,9 @@ func main() {
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
|
|
||||||
// endpoints
|
// endpoints
|
||||||
|
mux.Handle("/status", authenticationJWT(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
statusHandler(config, w, r)
|
||||||
|
})))
|
||||||
mux.Handle("/nginx", authenticationJWT(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
mux.Handle("/nginx", authenticationJWT(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
nginxHandler(config, w, r)
|
nginxHandler(config, w, r)
|
||||||
})))
|
})))
|
||||||
|
|
Loading…
Reference in New Issue