68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package web
|
|
|
|
import (
|
|
"embed"
|
|
"html/template"
|
|
"io/fs"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
//go:embed templates/* static/*
|
|
var content embed.FS
|
|
|
|
var pageTemplate = template.Must(template.New("view.html").Funcs(template.FuncMap{
|
|
"statusClass": statusClass,
|
|
"joinLines": joinLines,
|
|
}).ParseFS(content, "templates/view.html"))
|
|
|
|
var uploadTemplate = template.Must(template.New("upload.html").ParseFS(content, "templates/upload.html"))
|
|
|
|
func Render(data any) ([]byte, error) {
|
|
var out strings.Builder
|
|
if err := pageTemplate.ExecuteTemplate(&out, "view.html", data); err != nil {
|
|
return nil, err
|
|
}
|
|
return []byte(out.String()), nil
|
|
}
|
|
|
|
func RenderUpload(data any) ([]byte, error) {
|
|
var out strings.Builder
|
|
if err := uploadTemplate.ExecuteTemplate(&out, "upload.html", data); err != nil {
|
|
return nil, err
|
|
}
|
|
return []byte(out.String()), nil
|
|
}
|
|
|
|
func Static() http.Handler {
|
|
sub, err := fs.Sub(content, "static")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return http.FileServer(http.FS(sub))
|
|
}
|
|
|
|
func statusClass(value string) string {
|
|
switch strings.ToUpper(strings.TrimSpace(value)) {
|
|
case "OK":
|
|
return "status-ok"
|
|
case "WARNING":
|
|
return "status-warning"
|
|
case "CRITICAL":
|
|
return "status-critical"
|
|
case "UNKNOWN":
|
|
return "status-unknown"
|
|
case "EMPTY":
|
|
return "status-empty"
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
func joinLines(value string) []string {
|
|
if strings.TrimSpace(value) == "" {
|
|
return nil
|
|
}
|
|
return strings.Split(value, "\n")
|
|
}
|