summaryrefslogtreecommitdiff
path: root/database/backups.go
diff options
context:
space:
mode:
Diffstat (limited to 'database/backups.go')
-rw-r--r--database/backups.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/database/backups.go b/database/backups.go
new file mode 100644
index 0000000..ab2155f
--- /dev/null
+++ b/database/backups.go
@@ -0,0 +1,51 @@
+package database
+
+import (
+ "database/sql"
+ "log"
+ "time"
+)
+
+type Backup struct {
+ Hostname string
+ ReceivedOn time.Time
+}
+
+func ListBackups(dbConn *sql.DB) ([]Backup, error) {
+ log.Println("listing backups")
+
+ rows, err := dbConn.Query(`SELECT hostname, received_on FROM backups;`)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ backups := []Backup{}
+ for rows.Next() {
+ var backup Backup
+ err := rows.Scan(&backup.Hostname, &backup.ReceivedOn)
+ if err != nil {
+ return nil, err
+ }
+ backups = append(backups, backup)
+ }
+
+ return backups, nil
+}
+
+func DeleteOldBackups(dbConn *sql.DB, days int) error {
+ log.Println("deleting old backups")
+
+ duration := time.Duration(days) * 24 * time.Hour
+ _, err := dbConn.Exec(`DELETE FROM backups WHERE received_on < ?;`, time.Now().Add(-duration))
+
+ return err
+}
+
+func ReceivedBackup(dbConn *sql.DB, hostname string) error {
+ log.Println("received backup for", hostname)
+
+ _, err := dbConn.Exec(`INSERT INTO backups (hostname) VALUES (?);`, hostname)
+
+ return err
+}