mirror of
https://github.com/airlabspl/uptimemonitor.git
synced 2025-11-17 06:14:12 +01:00
initial commit
This commit is contained in:
69
handler/check_handler.go
Normal file
69
handler/check_handler.go
Normal file
@@ -0,0 +1,69 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user