package dashboard import ( "html/template" "log/slog" "net/http" "nonsense-time/api" "path/filepath" ) var Logger *slog.Logger var templates map[string]*template.Template func getStatuses() { } func Index(w http.ResponseWriter, req *http.Request) { t, ok := templates["dashboard"] if !ok { panic(t) } // TODO: poll database data := struct { ServerStatus api.ServerStatus }{ ServerStatus: api.ServerStatus{}, } err := t.Execute(w, data) if err != nil { Logger.Error("Unable to execute template", slog.Any("err", err)) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } } func StaticHandler(w http.ResponseWriter, req *http.Request) { http.StripPrefix("/static", http.FileServer(http.Dir("static"))).ServeHTTP(w, req) } func init() { Logger = slog.Default() templates = make(map[string]*template.Template) templates["dashboard"] = template.Must(template.New("base.html").ParseFiles( filepath.Join("templates", "base.html"), filepath.Join("templates", "dashboard", "dashboard.html"), filepath.Join("templates", "dashboard", "server_status.html"), filepath.Join("templates", "dashboard", "server_controls.html"), filepath.Join("templates", "dashboard", "server_logs.html"), )) }