diff options
| author | Xe <me@christine.website> | 2023-01-26 09:03:27 -0500 |
|---|---|---|
| committer | Xe <me@christine.website> | 2023-01-26 09:15:05 -0500 |
| commit | 567fdc2f4c92786bc6149a3d243b79498415f5e3 (patch) | |
| tree | a1a2eb28b88db704e67a2275ec0be08f826ba58c /cmd/xedn | |
| parent | 76c2a0ad8041537b6f894557c729e80205d202bb (diff) | |
| download | x-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.go | 46 |
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, |
