From 6929a86485a1a92b433ffac56a17bf90d40bd200 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sun, 5 Dec 2021 13:38:36 +0100 Subject: [PATCH] feat: cleanup old backups --- cleanup.go | 35 +++++++++++++++++++++++++++++++++++ config.go | 7 ++++--- main.go | 7 +++++-- 3 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 cleanup.go diff --git a/cleanup.go b/cleanup.go new file mode 100644 index 0000000..120a91b --- /dev/null +++ b/cleanup.go @@ -0,0 +1,35 @@ +package main + +import ( + "io/ioutil" + "log" + "os" + "sort" +) + +func cleanupOldBackups() error { + files, err := ioutil.ReadDir(config.Folder) + if err != nil { + return err + } + + if len(files) < config.MaxBackups { + return nil + } + + sort.Slice(files, func(i, j int) bool { + return files[i].ModTime().Unix() < files[j].ModTime().Unix() + }) + + oldest := files[:len(files)-config.MaxBackups] + + for _, file := range oldest { + log.Printf("Removing old backup folder %s...\n", file.Name()) + err = os.RemoveAll(config.Folder + file.Name()) + if err != nil { + return err + } + } + + return nil +} diff --git a/config.go b/config.go index f64ebe1..8c9b668 100644 --- a/config.go +++ b/config.go @@ -16,7 +16,7 @@ type conf struct { Folder string // Backup folder _with_ trailing slash fullCurrentBackupPath string Interval time.Duration - MaxBackups int64 + MaxBackups int } var ( @@ -34,7 +34,7 @@ func init() { config = &conf{ Folder: "/backups/", Interval: time.Hour * 6, - MaxBackups: 24, + MaxBackups: 10, } folder, has := os.LookupEnv(envBackupFolder) @@ -58,10 +58,11 @@ func init() { max, has := os.LookupEnv(envMax) if has { - config.MaxBackups, err = strconv.ParseInt(max, 10, 64) + maxBackups, err := strconv.ParseInt(max, 10, 32) if err != nil { log.Fatalf("Invalid max: %s\n", err) } + config.MaxBackups = int(maxBackups) } updateFullBackupPath() diff --git a/main.go b/main.go index 6769237..ce3a820 100644 --- a/main.go +++ b/main.go @@ -19,12 +19,15 @@ func main() { storeContainers(c, containers) + err = cleanupOldBackups() + if err != nil { + log.Fatalf("Could not clean old backups: %s", err) + } + err = dumpAllDatabases(c) if err != nil { - // TODO: Only log errors while dumping dbs log.Fatalf("Could not dump databases: %s", err) } // TODO: Cron - // TODO: Cleanup old }