mirror of
https://github.com/garethgeorge/backrest.git
synced 2025-12-13 09:15:39 +00:00
feat: improve hook UX and execution model (#357)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user