aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorXe <me@christine.website>2023-01-21 15:36:23 -0500
committerXe <me@christine.website>2023-01-21 15:36:30 -0500
commit24f2c9cbfea35c1ccb2588109185156ea8c0f921 (patch)
tree0b9ca4a837a551ab9727caa4bfe9ee65a53bf1b9 /cmd
parent255d527c651c2a5b1ba82969d13b6df7a33517c7 (diff)
downloadx-24f2c9cbfea35c1ccb2588109185156ea8c0f921.tar.xz
x-24f2c9cbfea35c1ccb2588109185156ea8c0f921.zip
add debug routes
Signed-off-by: Xe <me@christine.website>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/xedn/imgoptimize.go70
-rw-r--r--cmd/xedn/main.go4
2 files changed, 74 insertions, 0 deletions
diff --git a/cmd/xedn/imgoptimize.go b/cmd/xedn/imgoptimize.go
index 8a16408..ed2d465 100644
--- a/cmd/xedn/imgoptimize.go
+++ b/cmd/xedn/imgoptimize.go
@@ -2,6 +2,7 @@ package main
import (
"bytes"
+ "encoding/json"
"errors"
"fmt"
"image"
@@ -16,6 +17,7 @@ import (
"github.com/chai2010/webp"
"github.com/disintegration/imaging"
"go.etcd.io/bbolt"
+ "tailscale.com/metrics"
"within.website/ln"
"within.website/x/internal/avif"
)
@@ -26,6 +28,11 @@ type OptimizedImageServer struct {
PNGEnc *png.Encoder
}
+var (
+ OISFileConversions = metrics.LabelMap{Label: "format"}
+ OISFileHits = metrics.LabelMap{Label: "path"}
+)
+
func (ois *OptimizedImageServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// /sticker/character/mood/width
acc := strings.Split(r.Header.Get("Accept"), ",")
@@ -77,6 +84,7 @@ func (ois *OptimizedImageServer) ServeHTTP(w http.ResponseWriter, r *http.Reques
w.Header().Set("Etag", fmt.Sprintf(`W/"%s"`, Hash(r.URL.Path)))
w.WriteHeader(http.StatusOK)
w.Write(data)
+ OISFileHits.Add(r.URL.Path, 1)
}
func (ois *OptimizedImageServer) ResizeTo(widthPixels int, character, mood, format string) ([]byte, error) {
@@ -138,6 +146,8 @@ func (ois *OptimizedImageServer) ResizeTo(widthPixels int, character, mood, form
return nil, fmt.Errorf("I don't know how to render to %s yet, sorry", format)
}
+ OISFileConversions.Add(format, 1)
+
err = ois.DB.Update(func(tx *bbolt.Tx) error {
bkt, err := tx.CreateBucketIfNotExists([]byte("sticker_cache"))
if err != nil {
@@ -156,3 +166,63 @@ func (ois *OptimizedImageServer) ResizeTo(widthPixels int, character, mood, form
return result.Bytes(), nil
}
+
+func (ois *OptimizedImageServer) ListFiles(w http.ResponseWriter, r *http.Request) {
+ var data []string
+
+ err := ois.DB.Update(func(tx *bbolt.Tx) error {
+ bkt, err := tx.CreateBucketIfNotExists([]byte("sticker_cache"))
+ if err != nil {
+ return err
+ }
+
+ err = bkt.ForEach(func(key, _ []byte) error {
+ data = append(data, string(key))
+ return nil
+ })
+ if err != nil {
+ return err
+ }
+
+ return nil
+ })
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ json.NewEncoder(w).Encode(data)
+}
+
+func (ois *OptimizedImageServer) Purge(w http.ResponseWriter, r *http.Request) {
+ if r.Method != http.MethodPost {
+ http.Error(w, "must POST", http.StatusMethodNotAllowed)
+ return
+ }
+
+ var data []string
+
+ if err := json.NewDecoder(r.Body).Decode(&data); err != nil {
+ http.Error(w, "must be JSON", http.StatusBadRequest)
+ return
+ }
+
+ err := ois.DB.Update(func(tx *bbolt.Tx) error {
+ bkt, err := tx.CreateBucketIfNotExists([]byte("sticker_cache"))
+ if err != nil {
+ return err
+ }
+
+ for _, key := range data {
+ if err := bkt.Delete([]byte(key)); err != nil {
+ return err
+ }
+ }
+
+ return nil
+ })
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+}
diff --git a/cmd/xedn/main.go b/cmd/xedn/main.go
index c663967..c2c7834 100644
--- a/cmd/xedn/main.go
+++ b/cmd/xedn/main.go
@@ -326,6 +326,8 @@ func main() {
http.DefaultServeMux.HandleFunc("/debug/varz", tsweb.VarzHandler)
http.DefaultServeMux.HandleFunc("/xedn/files", dc.ListFiles)
http.DefaultServeMux.HandleFunc("/xedn/purge", dc.Purge)
+ http.DefaultServeMux.HandleFunc("/sticker/files", ois.ListFiles)
+ http.DefaultServeMux.HandleFunc("/sticker/purge", ois.Purge)
defer srv.Close()
defer lis.Close()
@@ -380,6 +382,8 @@ func main() {
expvar.Publish("gauge_xedn_file_hits", &fileHits)
expvar.Publish("gauge_xedn_file_deaths", &fileDeaths)
expvar.Publish("gauge_xedn_file_mime_type", &fileMimeTypes)
+ expvar.Publish("gauge_xedn_ois_file_conversions", &OISFileConversions)
+ expvar.Publish("gauge_xedn_ois_file_hits", &OISFileHits)
mux.HandleFunc("/file/christine-static/", hdlr)
mux.HandleFunc("/file/xeserv-akko/", hdlr)