-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdebug.go
More file actions
114 lines (107 loc) · 2.58 KB
/
debug.go
File metadata and controls
114 lines (107 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main
import(
"fmt"
"log"
"net/http"
"slices"
"strconv"
"time"
"cloud.google.com/go/datastore"
"google.golang.org/api/iterator"
)
func handleDebug(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
out := func(t string, args ...any) {
fmt.Fprintf(w, t+"\n", args...)
}
w.Header().Set("Content-Type", "text/html")
if err := r.ParseForm(); err != nil {
out("Error parsing form data: %v", err)
}
if r.FormValue("delete") == "Submit" {
t := r.FormValue("type")
var key *datastore.Key
if t == "User" {
key = datastore.NameKey(t, r.FormValue("id"), nil)
} else {
id, err := strconv.Atoi(r.FormValue("id"))
if err != nil {
out("Can't parse %q: %v", r.FormValue("key"), err)
}
key = datastore.IDKey(t, int64(id), nil)
}
if err := dsClient.Delete(ctx, key); err != nil {
out("Error deleting %v: %v", key, err)
} else {
out("Deleted %v", key)
}
}
out("<form>Delete:<br/>kind <input name=\"type\"/> ")
out("id <input name=\"id\"/> ")
out("<input name=\"delete\" type=\"submit\"/></form><hr/>")
out("<pre>")
out("Gamenights:")
it := dsClient.Run(ctx,
datastore.NewQuery("Gamenight").
FilterField("d", ">", time.Now()).
Order("-d"))
for {
var gn Gamenight
k, err := it.Next(&gn)
if err == iterator.Done {
break
}
if err != nil {
out("iterator error: %v", err)
continue
}
if err := gn.Load(ctx); err != nil {
log.Printf("error loading gn %v: %v", k, err)
}
var id string
if gn.InviteKey == nil {
id = "N/A"
} else {
id = fmt.Sprintf("%d", gn.InviteKey.ID)
}
out("%20d | %s | %10s | %s", gn.ID.ID, gn.When(), id, gn.EventID)
}
invs, err := getAllInvitations(ctx, time.Now(), false)
if err != nil {
out("inv query err: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
out("\nInvitations (%d):", len(invs))
slices.SortFunc(invs, func(a, b *Invitation) int {
return int(b.When().Unix()-a.When().Unix())
})
for _, i := range invs {
if err := i.Load(ctx); err != nil {
out("Error loading invite: %v", err)
}
gnid := int64(-1)
gn, err := i.GetGamenight(ctx)
if err != nil {
out("error getting gn: %v", err)
}
if gn != nil {
gnid = gn.ID.ID
}
out("%20d | %s | %15s | %20d | %s: %s", i.Key.ID, i.When(), i.GetOwner().Name, gnid, i.Location, i.Notes)
}
it = dsClient.Run(ctx, datastore.NewQuery("User"))
out("\nUsers:")
for {
var u User
k, err := it.Next(&u)
if err == iterator.Done {
break
}
if err != nil {
out("error getting user: %v", err)
continue
}
out("%30s | %20s | %s", k.Name, u.Name, u.DefaultLocation)
}
}