aboutsummaryrefslogtreecommitdiff
path: root/cmd/xedn
diff options
context:
space:
mode:
authorXe <me@christine.website>2023-01-26 09:03:27 -0500
committerXe <me@christine.website>2023-01-26 09:15:05 -0500
commit567fdc2f4c92786bc6149a3d243b79498415f5e3 (patch)
treea1a2eb28b88db704e67a2275ec0be08f826ba58c /cmd/xedn
parent76c2a0ad8041537b6f894557c729e80205d202bb (diff)
downloadx-567fdc2f4c92786bc6149a3d243b79498415f5e3.tar.xz
x-567fdc2f4c92786bc6149a3d243b79498415f5e3.zip
add cronjob for purging dead files
Signed-off-by: Xe <me@christine.website>
Diffstat (limited to 'cmd/xedn')
-rw-r--r--cmd/xedn/main.go46
1 files changed, 45 insertions, 1 deletions
diff --git a/cmd/xedn/main.go b/cmd/xedn/main.go
index c2c7834..2c91081 100644
--- a/cmd/xedn/main.go
+++ b/cmd/xedn/main.go
@@ -264,7 +264,49 @@ func (dc *Cache) GetFile(w http.ResponseWriter, r *http.Request) error {
return dc.Load(dir, w)
}
-func (dc *Cache) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+func (dc *Cache) CronPurgeDead() {
+ ctx := opname.With(context.Background(), "cronpurgedead")
+
+ for range time.Tick(30 * time.Minute) {
+ ln.Log(ctx, ln.Action("starting"))
+
+ if err := dc.DB.Update(func(tx *bbolt.Tx) error {
+ if err := tx.ForEach(func(name []byte, b *bbolt.Bucket) error {
+ if string(name) == "sticker_cache" {
+ return nil
+ }
+
+ ctx := ln.WithF(ctx, ln.F{"path": string(name)})
+ diesAtBytes := b.Get([]byte("diesAt"))
+ if diesAtBytes == nil {
+ ln.Log(ctx, ln.Info("no diesAt key"))
+ return nil
+ }
+
+ diesAt, err := time.Parse(http.TimeFormat, string(diesAtBytes))
+ if err != nil {
+ return fmt.Errorf("when parsing diesAt for %s (%q): %w", string(name), string(diesAtBytes), err)
+ }
+
+ if diesAt.Before(time.Now()) {
+ if err := tx.DeleteBucket(name); err != nil {
+ return fmt.Errorf("when trying to delete bucket %s: %w", string(name), err)
+ }
+
+ fileDeaths.Add(string(name), 1)
+ ln.Log(ctx, ln.Info("deleted"), ln.F{"diesAt": diesAt.Format(time.RFC3339)})
+ }
+
+ return nil
+ }); err != nil {
+ return err
+ }
+
+ return nil
+ }); err != nil {
+ ln.Error(ctx, err)
+ }
+ }
}
var (
@@ -304,6 +346,8 @@ func main() {
DB: db,
}
+ go dc.CronPurgeDead()
+
ois := &OptimizedImageServer{
DB: db,
Cache: dc,