75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
package httpapi
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"net/http"
|
||
|
|
|
||
|
|
"cloudipvalidator/internal/db"
|
||
|
|
)
|
||
|
|
|
||
|
|
func (s *Server) handleHealthz(w http.ResponseWriter, r *http.Request) {
|
||
|
|
writeJSON(w, http.StatusOK, okResponse{OK: true})
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Server) handleAdminStatus(w http.ResponseWriter, r *http.Request) {
|
||
|
|
ips, err := s.DB.ListIPs(r.Context())
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
validators, err := s.DB.ListValidators(r.Context())
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
byState := map[string]int{}
|
||
|
|
for _, ip := range ips {
|
||
|
|
byState[ip.State]++
|
||
|
|
}
|
||
|
|
writeJSON(w, http.StatusOK, map[string]interface{}{
|
||
|
|
"total_ips": len(ips),
|
||
|
|
"ips_by_state": byState,
|
||
|
|
"total_validators": len(validators),
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Server) handleAdminIPs(w http.ResponseWriter, r *http.Request) {
|
||
|
|
ips, err := s.DB.ListIPs(r.Context())
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
writeJSON(w, http.StatusOK, ips)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Server) handleAdminIPDetail(w http.ResponseWriter, r *http.Request) {
|
||
|
|
address := r.PathValue("ip")
|
||
|
|
item, err := s.DB.GetIPByAddress(r.Context(), address)
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusNotFound, "unknown ip: "+address)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
checks, err := s.DB.ListChecksForAttempt(r.Context(), item.ID, item.AttemptNumber)
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
events, err := s.DB.ListEventsForIP(r.Context(), item.ID)
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
writeJSON(w, http.StatusOK, struct {
|
||
|
|
IP *db.IPQueueItem `json:"ip"`
|
||
|
|
Checks []db.Check `json:"checks"`
|
||
|
|
Events []db.Event `json:"events"`
|
||
|
|
}{item, checks, events})
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Server) handleAdminValidators(w http.ResponseWriter, r *http.Request) {
|
||
|
|
validators, err := s.DB.ListValidators(r.Context())
|
||
|
|
if err != nil {
|
||
|
|
writeError(w, http.StatusInternalServerError, err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
writeJSON(w, http.StatusOK, validators)
|
||
|
|
}
|