feat: improve hook UX and execution model (#357)

This commit is contained in:
Gareth
2024-07-11 01:28:23 -07:00
committed by GitHub
parent fe0e2b9d5e
commit 4d0d13e398
46 changed files with 1141 additions and 992 deletions

View File

@@ -9,7 +9,6 @@ import (
"time"
v1 "github.com/garethgeorge/backrest/gen/go/v1"
"github.com/garethgeorge/backrest/internal/hook"
"github.com/garethgeorge/backrest/internal/protoutil"
"github.com/garethgeorge/backrest/pkg/restic"
"go.uber.org/zap"
@@ -106,16 +105,10 @@ func (t *BackupTask) Run(ctx context.Context, st ScheduledTask, runner TaskRunne
return err
}
if err := runner.ExecuteHooks([]v1.Hook_Condition{
if err := runner.ExecuteHooks(ctx, []v1.Hook_Condition{
v1.Hook_CONDITION_SNAPSHOT_START,
}, hook.HookVars{}); err != nil {
var cancelErr *hook.HookErrorRequestCancel
if errors.As(err, &cancelErr) {
op.Status = v1.OperationStatus_STATUS_USER_CANCELLED // user visible cancelled status
op.DisplayMessage = err.Error()
return nil
}
return fmt.Errorf("hook failed: %w", err)
}, HookVars{}); err != nil {
return fmt.Errorf("snapshot start hook: %w", err)
}
var sendWg sync.WaitGroup
@@ -169,7 +162,7 @@ func (t *BackupTask) Run(ctx context.Context, st ScheduledTask, runner TaskRunne
summary = &restic.BackupProgressEntry{}
}
vars := hook.HookVars{
vars := HookVars{
Task: t.Name(),
SnapshotStats: summary,
SnapshotId: summary.SnapshotId,
@@ -178,7 +171,7 @@ func (t *BackupTask) Run(ctx context.Context, st ScheduledTask, runner TaskRunne
if err != nil {
vars.Error = err.Error()
if !errors.Is(err, restic.ErrPartialBackup) {
runner.ExecuteHooks([]v1.Hook_Condition{
runner.ExecuteHooks(ctx, []v1.Hook_Condition{
v1.Hook_CONDITION_SNAPSHOT_ERROR,
v1.Hook_CONDITION_ANY_ERROR,
v1.Hook_CONDITION_SNAPSHOT_END,
@@ -190,12 +183,12 @@ func (t *BackupTask) Run(ctx context.Context, st ScheduledTask, runner TaskRunne
op.Status = v1.OperationStatus_STATUS_WARNING
op.DisplayMessage = "Partial backup, some files may not have been read completely."
runner.ExecuteHooks([]v1.Hook_Condition{
runner.ExecuteHooks(ctx, []v1.Hook_Condition{
v1.Hook_CONDITION_SNAPSHOT_WARNING,
v1.Hook_CONDITION_SNAPSHOT_END,
}, vars)
} else {
runner.ExecuteHooks([]v1.Hook_Condition{
runner.ExecuteHooks(ctx, []v1.Hook_Condition{
v1.Hook_CONDITION_SNAPSHOT_SUCCESS,
v1.Hook_CONDITION_SNAPSHOT_END,
}, vars)