Implemented basic functions

This commit is contained in:
Magnus Åhall 2024-04-30 08:04:16 +02:00
parent 89f483171a
commit 965e2daeb3
22 changed files with 711 additions and 58 deletions

109
main.go
View file

@ -20,6 +20,7 @@ import (
"path"
"sort"
"strconv"
"time"
)
const VERSION = "v1"
@ -88,8 +89,23 @@ func main() { // {{{
service.SetDatabase(sqlProvider)
service.SetStaticFS(staticFS, "static")
service.SetStaticDirectory("static", flagDev)
service.InitDatabaseConnection()
err = service.Db.Connect()
if err != nil {
logger.Error("application", "error", err)
return
}
_, err = service.Db.Conn.Exec(`SET TIMEZONE TO 'Europe/Stockholm'`)
if err != nil {
logger.Error("application", "error", err)
return
}
service.Register("/", false, false, staticHandler)
service.Register("/problems", false, false, pageProblems)
service.Register("/datapoints", false, false, pageDatapoints)
service.Register("/datapoint/edit/{id}", false, false, pageDatapointEdit)
service.Register("/datapoint/update/{id}", false, false, pageDatapointUpdate)
service.Register("/triggers", false, false, pageTriggers)
service.Register("/trigger/edit/{id}", false, false, pageTriggerEdit)
service.Register("/trigger/update/{id}", false, false, pageTriggerUpdate)
@ -187,21 +203,26 @@ func getPage(layout, page string) (tmpl *template.Template, err error) { // {{{
return tmpl, nil
}
funcMap := template.FuncMap{
"format_time": func(t time.Time) string {
return t.Local().Format("2006-01-02 15:04:05")
},
}
filenames := []string{layoutFilename, pageFilename}
filenames = append(filenames, componentFilenames...)
logger.Info("template", "op", "parse", "layout", layout, "page", page, "filenames", filenames)
if flagDev {
parsedTemplates[page], err = template.ParseFS(os.DirFS("."), filenames...)
tmpl, err = template.New("main.gotmpl").Funcs(funcMap).ParseFS(os.DirFS("."), filenames...)
} else {
parsedTemplates[page], err = template.ParseFS(viewFS, filenames...)
tmpl, err = template.New("main.gotmpl").ParseFS(viewFS, filenames...)
}
tmpl = parsedTemplates[page]
if err != nil {
err = we.Wrap(err).Log()
return
}
parsedTemplates[page] = tmpl
return
} // }}}
@ -237,6 +258,80 @@ func pageProblems(w http.ResponseWriter, _ *http.Request, _ *session.T) { // {{{
page.Render(w)
return
} // }}}
func pageDatapoints(w http.ResponseWriter, _ *http.Request, _ *session.T) { // {{{
page := Page{
LAYOUT: "main",
PAGE: "datapoints",
}
datapoints, err := DatapointsRetrieve()
if err != nil {
httpError(w, we.Wrap(err).Log())
return
}
logger.Info("FOO", "dps", datapoints)
page.Data = map[string]any{
"Datapoints": datapoints,
}
page.Render(w)
return
} // }}}
func pageDatapointEdit(w http.ResponseWriter, r *http.Request, _ *session.T) { // {{{
idStr := r.PathValue("id")
id, err := strconv.Atoi(idStr)
if err != nil {
httpError(w, we.Wrap(err).Log())
return
}
var datapoint Datapoint
if id == 0 {
datapoint.Name = "new_datapoint"
datapoint.Datatype = "INT"
} else {
datapoint, err = DatapointRetrieve(id, "")
if err != nil {
httpError(w, we.Wrap(err).Log())
return
}
}
page := Page{
LAYOUT: "main",
PAGE: "datapoint_edit",
MENU: "datapoints",
Icon: "datapoints",
Label: "Datapoint",
}
page.Data = map[string]any{
"Datapoint": datapoint,
}
page.Render(w)
return
} // }}}
func pageDatapointUpdate(w http.ResponseWriter, r *http.Request, _ *session.T) { // {{{
idStr := r.PathValue("id")
id, err := strconv.Atoi(idStr)
if err != nil {
httpError(w, we.Wrap(err).Log())
return
}
var dp Datapoint
dp.ID = id
dp.Name = r.FormValue("name")
dp.Datatype = DatapointType(r.FormValue("datatype"))
err = dp.Update()
if err != nil {
httpError(w, we.Wrap(err).Log())
return
}
w.Header().Add("Location", "/datapoints")
w.WriteHeader(302)
} // }}}
func pageTriggers(w http.ResponseWriter, _ *http.Request, _ *session.T) { // {{{
areas, err := TriggersRetrieve()
if err != nil {
@ -275,7 +370,7 @@ func pageTriggerEdit(w http.ResponseWriter, r *http.Request, _ *session.T) { //
datapoints := make(map[string]Datapoint)
for _, dpname := range trigger.Datapoints {
dp, err := DatapointRetrieve(dpname)
dp, err := DatapointRetrieve(0, dpname)
if err != nil {
httpError(w, we.Wrap(err).Log())
return
@ -320,7 +415,7 @@ func pageTriggerUpdate(w http.ResponseWriter, r *http.Request, _ *session.T) { /
return
}
w.Header().Add("Location", fmt.Sprintf("/trigger/edit/%d", id))
w.Header().Add("Location", "/triggers")
w.WriteHeader(302)
} // }}}
func pageTriggerRun(w http.ResponseWriter, r *http.Request, _ *session.T) { // {{{
@ -343,7 +438,7 @@ func pageTriggerRun(w http.ResponseWriter, r *http.Request, _ *session.T) { // {
datapoints := make(map[string]Datapoint)
for _, dpname := range trigger.Datapoints {
dp, err := DatapointRetrieve(dpname)
dp, err := DatapointRetrieve(0, dpname)
if err != nil {
httpError(w, we.Wrap(err).Log())
return