diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 63 |
1 files changed, 63 insertions, 0 deletions
@@ -0,0 +1,63 @@ +package main + +import ( + _ "embed" + "fmt" + "html/template" + "log" + "net/http" + "sync/atomic" +) + +//go:embed index.html +var indexTemplate string + +var pageTemplate *template.Template + +var open atomic.Uint64 +var done atomic.Uint64 + +func pageHandler(w http.ResponseWriter, r *http.Request) { + tempData := struct { + Open uint64 + Done uint64 + IsAdmin bool + }{open.Load(), done.Load() + 1, r.URL.Query().Has("admin")} + + if err := pageTemplate.Execute(w, tempData); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } +} + +func newHandler(w http.ResponseWriter, r *http.Request) { + ticket := open.Add(1) + log.Printf("Create ticket %d\n", ticket) + if _, err := fmt.Fprintf(w, "%d", ticket); err != nil { + log.Printf("Writing response failed: %v", err) + } +} + +func doneHandler(w http.ResponseWriter, r *http.Request) { + ticket := done.Add(1) + log.Printf("Finished ticket %d\n", ticket) + if _, err := fmt.Fprintf(w, "%d", ticket); err != nil { + log.Printf("Writing response failed: %v", err) + } +} + +func setupRoutes() { + http.HandleFunc("/", pageHandler) + http.HandleFunc("/new", newHandler) + http.HandleFunc("/done", doneHandler) +} + +func main() { + setupRoutes() + + pageTemplate = template.Must(template.New("index").Parse(indexTemplate)) + + log.Printf("Serving http on %d", 8080) + err := http.ListenAndServe(fmt.Sprintf(":%d", 8080), nil) + log.Panicf("Serving http failed with %s", err) +} |
