diff --git a/sisyphus/sisyphus.go b/sisyphus/sisyphus.go index 6522b64..8862bcc 100644 --- a/sisyphus/sisyphus.go +++ b/sisyphus/sisyphus.go @@ -1,6 +1,7 @@ package main import ( + "bufio" "fmt" "os" "strings" @@ -159,6 +160,7 @@ COPYRIGHT: } learn(maildirs, dbs) + backup(maildirs, dbs) time.Sleep(duration) } }() @@ -250,3 +252,35 @@ func learn(maildirs []sisyphus.Maildir, dbs map[sisyphus.Maildir]*bolt.DB) { return } + +func backup(maildirs []sisyphus.Maildir, dbs map[sisyphus.Maildir]*bolt.DB) { + for _, d := range maildirs { + db := dbs[d] + + backup, err := os.Create(string(d) + "/sisyphus.db.backup") + if err != nil { + log.WithFields(log.Fields{ + "err": err, + }).Error("Backup creation") + } + defer backup.Close() + + w := bufio.NewWriter(backup) + + err := db.View(func(tx *bolt.Tx) error { + _, err := tx.WriteTo(w) + return err + }) + if err != nil { + log.WithFields(log.Fields{ + "err": err, + }).Error("Backup creation") + } + + w.Flush() + } + + log.Info("All databases backed up successfully.") + + return +}