Skip to content

Commit

Permalink
Add manual backup possibility.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gerrit91 committed Aug 25, 2023
1 parent 4b5fcfd commit 73773df
Show file tree
Hide file tree
Showing 13 changed files with 514 additions and 315 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/docker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,11 @@ jobs:
go-version: '1.21.x'

- name: Create k8s Kind Cluster
uses: helm/kind-action@v1.5.0
uses: helm/kind-action@v1.8.0
with:
install_only: true

- name: Test
run: |
make test
make kind-cluster-create
make test-integration
147 changes: 147 additions & 0 deletions api/v1/database.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

107 changes: 107 additions & 0 deletions api/v1/database_grpc.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

84 changes: 47 additions & 37 deletions cmd/internal/backup/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package backup

import (
"context"
"fmt"
"os"
"path"

Expand All @@ -21,46 +22,11 @@ func Start(ctx context.Context, log *zap.SugaredLogger, backupSchedule string, d
c := cron.New()

id, err := c.AddFunc(backupSchedule, func() {
err := db.Backup()
err := CreateBackup(log, db, bp, metrics, comp)
if err != nil {
metrics.CountError("create")
log.Errorw("database backup failed", "error", err)
return
log.Errorw("error creating backup", "error", err)
}
log.Infow("successfully backed up database")

backupArchiveName := bp.GetNextBackupName()

backupFilePath := path.Join(constants.BackupDir, backupArchiveName)
if err := os.RemoveAll(backupFilePath + comp.Extension()); err != nil {
metrics.CountError("delete_prior")
log.Errorw("could not delete priorly uploaded backup", "error", err)
return
}

filename, err := comp.Compress(backupFilePath)
if err != nil {
metrics.CountError("compress")
log.Errorw("unable to compress backup", "error", err)
return
}
log.Info("compressed backup")

err = bp.UploadBackup(filename)
if err != nil {
metrics.CountError("upload")
log.Errorw("error uploading backup", "error", err)
return
}
log.Info("uploaded backup to backup provider bucket")
metrics.CountBackup(filename)
err = bp.CleanupBackups()
if err != nil {
metrics.CountError("cleanup")
log.Errorw("cleaning up backups failed", "error", err)
} else {
log.Infow("cleaned up backups")
}
for _, e := range c.Entries() {
log.Infow("scheduling next backup", "at", e.Next.String())
}
Expand All @@ -75,3 +41,47 @@ func Start(ctx context.Context, log *zap.SugaredLogger, backupSchedule string, d
c.Stop()
return nil
}

func CreateBackup(log *zap.SugaredLogger, db database.DatabaseProber, bp backuproviders.BackupProvider, metrics *metrics.Metrics, comp *compress.Compressor) error {
err := db.Backup()
if err != nil {
metrics.CountError("create")
return fmt.Errorf("database backup failed: %w", err)
}

log.Infow("successfully backed up database")

backupArchiveName := bp.GetNextBackupName()

backupFilePath := path.Join(constants.BackupDir, backupArchiveName)
if err := os.RemoveAll(backupFilePath + comp.Extension()); err != nil {
metrics.CountError("delete_prior")
return fmt.Errorf("could not delete priorly uploaded backup: %w", err)
}

filename, err := comp.Compress(backupFilePath)
if err != nil {
metrics.CountError("compress")
return fmt.Errorf("unable to compress backup: %w", err)
}
log.Info("compressed backup")

err = bp.UploadBackup(filename)
if err != nil {
metrics.CountError("upload")
return fmt.Errorf("error uploading backup: %w", err)
}
log.Info("uploaded backup to backup provider bucket")

metrics.CountBackup(filename)

err = bp.CleanupBackups()
if err != nil {
metrics.CountError("cleanup")
log.Errorw("cleaning up backups failed", "error", err)
} else {
log.Infow("cleaned up backups")
}

return nil
}
Loading

0 comments on commit 73773df

Please sign in to comment.