mirror of
https://github.com/airlabspl/uptimemonitor.git
synced 2025-08-14 20:29:16 +02:00
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
"uptimemonitor"
|
|
"uptimemonitor/html"
|
|
)
|
|
|
|
func (h *Handler) ListChecks() http.HandlerFunc {
|
|
tmpl := template.Must(template.New("check.html").Funcs(template.FuncMap{
|
|
"sub": func(a, b int) int {
|
|
return a - b
|
|
},
|
|
}).ParseFS(html.FS, "check.html"))
|
|
|
|
type data struct {
|
|
Monitor uptimemonitor.Monitor
|
|
Checks []uptimemonitor.Check
|
|
Skeletons []int
|
|
MaxTime int64
|
|
StartTime string
|
|
EndTime string
|
|
}
|
|
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
monitorID, err := strconv.Atoi(r.PathValue("monitor"))
|
|
if err != nil {
|
|
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
monitor, err := h.Store.GetMonitorByID(r.Context(), monitorID)
|
|
if err != nil || monitor.ID == 0 {
|
|
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
checks, err := h.Store.ListChecks(r.Context(), int64(monitorID), 60)
|
|
if err != nil {
|
|
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
maxTime := int64(0)
|
|
for _, check := range checks {
|
|
if check.ResponseTimeMs > maxTime {
|
|
maxTime = check.ResponseTimeMs
|
|
}
|
|
}
|
|
|
|
err = tmpl.ExecuteTemplate(w, "check_list", data{
|
|
Monitor: monitor,
|
|
Checks: checks,
|
|
Skeletons: make([]int, 60),
|
|
MaxTime: maxTime,
|
|
StartTime: time.Now().Add(-1 * time.Hour).Format("15:04"),
|
|
EndTime: time.Now().Format("15:04"),
|
|
})
|
|
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("%v", err), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
}
|