68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package handlers
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
"processSupervisor/models"
|
|
)
|
|
|
|
func HtopHandler(w http.ResponseWriter, r *http.Request) {
|
|
table, err := models.GetTable()
|
|
if err != nil {
|
|
http.Error(w, "Failed to get processes", 500)
|
|
return
|
|
}
|
|
table.Sort(r)
|
|
|
|
funcMap := template.FuncMap{
|
|
"div": divide,
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
|
|
|
// Detect HTMX request via the HX-Request header
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
tmpl := template.Must(
|
|
template.New("table.html").Funcs(funcMap).ParseFiles("templates/partials/table.html"),
|
|
)
|
|
tmpl.Execute(w, table)
|
|
return
|
|
}
|
|
|
|
tmpl := template.Must(
|
|
template.New("htop.html").Funcs(funcMap).ParseFiles(
|
|
"templates/htop.html",
|
|
"templates/partials/table.html",
|
|
),
|
|
)
|
|
tmpl.Execute(w, table)
|
|
}
|
|
|
|
func divide(a any, b any) float64 {
|
|
af := toFloat64(a)
|
|
bf := toFloat64(b)
|
|
if bf == 0 {
|
|
return 0
|
|
}
|
|
return af / bf
|
|
}
|
|
|
|
func toFloat64(v any) float64 {
|
|
switch val := v.(type) {
|
|
case int:
|
|
return float64(val)
|
|
case int32:
|
|
return float64(val)
|
|
case int64:
|
|
return float64(val)
|
|
case uint64:
|
|
return float64(val)
|
|
case float32:
|
|
return float64(val)
|
|
case float64:
|
|
return val
|
|
default:
|
|
return 0
|
|
}
|
|
}
|