aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-06-28 15:44:06 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-06-28 15:45:37 +0200
commit2d12f1d9a8ec4a6604dc4de119aace633043b29e (patch)
treefc20e0f9a37d46a0d45d8a3327e6686e9d971a81
parentbf4c9866949a24ebbccdc488a8543a2e4e0f444c (diff)
downloadticket-counter-2d12f1d9a8ec4a6604dc4de119aace633043b29e.tar.gz
ticket-counter-2d12f1d9a8ec4a6604dc4de119aace633043b29e.zip
use the server startup time to drop old cached tickets
-rw-r--r--index.html17
-rw-r--r--main.go13
2 files changed, 22 insertions, 8 deletions
diff --git a/index.html b/index.html
index bb1b6ca..bcda425 100644
--- a/index.html
+++ b/index.html
@@ -80,7 +80,7 @@ button {
function requestHelp() {
new HttpClient().get("new", (myNumber) => {
myTicket = myNumber;
- localStorage.setItem("my-ticket", myTicket);
+ localStorage.setItem("my-ticket", JSON.stringify({"t": myTicket, "e": Date.now()}));
showTicket();
});
}
@@ -119,9 +119,17 @@ button {
var myTicket;
function init() {
- myTicket = localStorage.getItem("my-ticket");
- if (myTicket)
- showTicket();
+ const cached = JSON.parse(localStorage.getItem("my-ticket"));
+ if (!cached) return;
+
+ const serverEpoch = Date.parse(document.getElementById("epoch").textContent);
+ if (cached.e < serverEpoch) {
+ localStorage.removeItem("my-ticket");
+ return;
+ }
+
+ myTicket = cached.t;
+ showTicket();
}
if (document.readyState === "loading") {
@@ -133,6 +141,7 @@ button {
</script>
</head>
<body>
+ <div id="epoch" style="display: none;">{{.StartTime}}</div>
<div id="next">
Nächstes Hilfe Ticket
<span id="done">{{.Done}}</span>
diff --git a/main.go b/main.go
index adcb194..aa5b52b 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,7 @@ import (
"net/http"
"strconv"
"sync/atomic"
+ "time"
)
//go:embed index.html
@@ -18,6 +19,7 @@ var pageTemplate *template.Template
var open atomic.Uint64
var done atomic.Uint64
+var start time.Time
var broker *Broker
@@ -144,10 +146,11 @@ 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(*passwd)}
+ Open uint64
+ Done uint64
+ StartTime string
+ IsAdmin bool
+ }{open.Load(), done.Load() + 1, start.Format(time.RFC3339), r.URL.Query().Has(*passwd)}
if err := pageTemplate.Execute(w, tempData); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -178,6 +181,8 @@ var passwd = flag.String("password", "admin", "the admin password")
func main() {
flag.Parse()
+ start = time.Now()
+
broker = &Broker{
make(map[chan string]bool),
make(chan (chan string)),