46 lines
809 B
Go
46 lines
809 B
Go
package gc
|
|
|
|
import (
|
|
"os"
|
|
"sort"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type GC interface {
|
|
List() ([]os.FileInfo, error)
|
|
Delete(id string) error
|
|
}
|
|
|
|
func Start(g GC, maxSize int, interval time.Duration) {
|
|
ticker := time.NewTicker(interval)
|
|
for {
|
|
<-ticker.C
|
|
log.Debug().Msg("running GC")
|
|
infos, err := g.List()
|
|
if err != nil {
|
|
log.Err(err).Msg("could not run GC")
|
|
continue
|
|
}
|
|
|
|
var size int
|
|
for _, info := range infos {
|
|
size += int(info.Size())
|
|
}
|
|
|
|
sort.Sort(sorter(infos))
|
|
for size > maxSize {
|
|
fi := infos[0]
|
|
log.Debug().Msgf("deleting file %s", fi.Name())
|
|
if err := g.Delete(fi.Name()); err != nil {
|
|
log.Err(err).Msgf("could not delete file %s", fi.Name())
|
|
break
|
|
}
|
|
size -= int(fi.Size())
|
|
infos = infos[1:]
|
|
}
|
|
log.Debug().Msg("finished GC")
|
|
}
|
|
}
|