aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..fb69638
--- /dev/null
+++ b/main.go
@@ -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)
+}