|
|
@@ -0,0 +1,81 @@
|
|
|
+package cleanup
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "io/ioutil"
|
|
|
+ "os"
|
|
|
+ "path"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "golang.org/x/sync/errgroup"
|
|
|
+
|
|
|
+ "github.com/grafana/grafana/pkg/bus"
|
|
|
+ "github.com/grafana/grafana/pkg/log"
|
|
|
+ m "github.com/grafana/grafana/pkg/models"
|
|
|
+ "github.com/grafana/grafana/pkg/setting"
|
|
|
+)
|
|
|
+
|
|
|
+type CleanUpService struct {
|
|
|
+ log log.Logger
|
|
|
+}
|
|
|
+
|
|
|
+func NewCleanUpService() *CleanUpService {
|
|
|
+ return &CleanUpService{
|
|
|
+ log: log.New("cleanup"),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (service *CleanUpService) Run(ctx context.Context) error {
|
|
|
+ service.log.Info("Initializing CleanUpService")
|
|
|
+
|
|
|
+ g, _ := errgroup.WithContext(ctx)
|
|
|
+ g.Go(func() error { return service.start(ctx) })
|
|
|
+
|
|
|
+ err := g.Wait()
|
|
|
+ service.log.Info("Stopped CleanUpService", "reason", err)
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+func (service *CleanUpService) start(ctx context.Context) error {
|
|
|
+ service.cleanUpTmpFiles()
|
|
|
+
|
|
|
+ ticker := time.NewTicker(time.Hour * 1)
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case <-ticker.C:
|
|
|
+ service.cleanUpTmpFiles()
|
|
|
+ service.deleteExpiredSnapshots()
|
|
|
+ case <-ctx.Done():
|
|
|
+ return ctx.Err()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (service *CleanUpService) cleanUpTmpFiles() {
|
|
|
+ files, err := ioutil.ReadDir(setting.ImagesDir)
|
|
|
+ if err != nil {
|
|
|
+ service.log.Error("Problem reading image dir", "error", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var toDelete []os.FileInfo
|
|
|
+ for _, file := range files {
|
|
|
+ if file.ModTime().AddDate(0, 0, 1).Before(time.Now()) {
|
|
|
+ toDelete = append(toDelete, file)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, file := range toDelete {
|
|
|
+ fullPath := path.Join(setting.ImagesDir, file.Name())
|
|
|
+ err := os.Remove(fullPath)
|
|
|
+ if err != nil {
|
|
|
+ service.log.Error("Failed to delete temp file", "file", file.Name(), "error", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ service.log.Debug("Found old rendered image to delete", "deleted", len(toDelete), "keept", len(files))
|
|
|
+}
|
|
|
+
|
|
|
+func (service *CleanUpService) deleteExpiredSnapshots() {
|
|
|
+ bus.Dispatch(&m.DeleteExpiredSnapshotsCommand{})
|
|
|
+}
|