diff options
| author | Xe <me@christine.website> | 2023-01-21 15:36:23 -0500 |
|---|---|---|
| committer | Xe <me@christine.website> | 2023-01-21 15:36:30 -0500 |
| commit | 24f2c9cbfea35c1ccb2588109185156ea8c0f921 (patch) | |
| tree | 0b9ca4a837a551ab9727caa4bfe9ee65a53bf1b9 /cmd | |
| parent | 255d527c651c2a5b1ba82969d13b6df7a33517c7 (diff) | |
| download | x-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.go | 70 | ||||
| -rw-r--r-- | cmd/xedn/main.go | 4 |
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) |
