-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexecuter.go
More file actions
107 lines (96 loc) · 2.47 KB
/
executer.go
File metadata and controls
107 lines (96 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Some high-level functions to perform backups, track their status, clean old backups, and upload to remote storage.
package main
import (
"log"
"os"
"time"
)
// A high-level function to perform a full backup and handle tracking and uploading.
func PerformFullBackup(drive string, comment string) error {
backupTime := time.Now()
err := CreateFullBackup(backupTime)
if err != nil {
log.Println(err)
return err
}
track := DatabaseTrack{
BackupTime: backupTime,
Status: Saved,
Type: "full",
Comment: comment,
Path: FormatBackupRelativePath(backupTime, false),
}
err = tracker.TrackBackup(track)
if err != nil {
return err
}
go func() {
err = UploadToRClone(track, drive)
if err != nil {
log.Println(err)
return
}
tracker.UpdateBackupStatus(backupTime, Uploaded)
}()
fullBackupTicker.Reset(config.FullBackupInterval)
return nil
}
// A high-level function to perform an incremental backup and handle tracking and uploading.
func PerformIncrementalBackup(drive string, comment string) error {
backupTime := time.Now()
lastTrack, err := tracker.GetLastBackup()
if err != nil {
return err
}
err = CreateIncrementalBackup(backupTime, lastTrack)
if err != nil {
log.Println(err)
return err
}
track := DatabaseTrack{
BackupTime: backupTime,
Status: Saved,
Type: "incremental",
Comment: comment,
Path: FormatBackupRelativePath(backupTime, true),
}
err = tracker.TrackBackup(track)
if err != nil {
return err
}
go func() {
err = UploadToRClone(track, drive)
if err != nil {
log.Println(err)
return
}
tracker.UpdateBackupStatus(backupTime, Uploaded)
}()
incrementalBackupTicker.Reset(config.IncrementalBackupInterval)
return nil
}
// Delete old backup.
func DeleteLocalBackup(track DatabaseTrack) error {
err := os.RemoveAll(track.GetBackupPath())
if err != nil {
return err
}
tracker.UpdateBackupStatus(track.BackupTime, Archived)
log.Printf("Deleted local backup %s\n", track.GetBackupPath())
// If this is a full backup, also delete incremental backups based on it.
if track.IsFullBackup() {
incrementalTracks, err := tracker.GetIncrementalTracks(track)
if err != nil {
return err
}
for _, incTrack := range incrementalTracks {
err := os.RemoveAll(incTrack.GetBackupPath())
if err != nil {
return err
}
tracker.UpdateBackupStatus(incTrack.BackupTime, Archived)
log.Printf("Deleted local incremental backup %s\n", incTrack.GetBackupPath())
}
}
return nil
}