diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 6c6049156..c7e8bcfeb 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -170,6 +170,22 @@ func (op *BackupOperation) Run(ctx context.Context) (err error) { events.BackupID: op.Results.BackupID, }) + defer func() { + op.bus.Event( + ctx, + events.BackupEnd, + map[string]any{ + events.BackupID: op.Results.BackupID, + events.DataStored: op.Results.BytesUploaded, + events.Duration: op.Results.CompletedAt.Sub(op.Results.StartedAt), + events.EndTime: dttm.Format(op.Results.CompletedAt), + events.Resources: op.Results.ResourceOwners, + events.Service: op.Selectors.PathService().String(), + events.StartTime: dttm.Format(op.Results.StartedAt), + events.Status: op.Status.String(), + }) + }() + // ----- // Execution // ----- @@ -871,19 +887,5 @@ func (op *BackupOperation) createBackupModels( return clues.Wrap(err, "creating backup model").WithClues(ctx) } - op.bus.Event( - ctx, - events.BackupEnd, - map[string]any{ - events.BackupID: b.ID, - events.DataStored: op.Results.BytesUploaded, - events.Duration: op.Results.CompletedAt.Sub(op.Results.StartedAt), - events.EndTime: dttm.Format(op.Results.CompletedAt), - events.Resources: op.Results.ResourceOwners, - events.Service: op.Selectors.PathService().String(), - events.StartTime: dttm.Format(op.Results.StartedAt), - events.Status: op.Status.String(), - }) - return nil } diff --git a/src/internal/operations/restore.go b/src/internal/operations/restore.go index 28dbb5e1a..30bd08363 100644 --- a/src/internal/operations/restore.go +++ b/src/internal/operations/restore.go @@ -140,6 +140,25 @@ func (op *RestoreOperation) Run(ctx context.Context) (restoreDetails *details.De "service", op.Selectors.Service, "destination_container", clues.Hide(op.Destination.ContainerName)) + defer func() { + op.bus.Event( + ctx, + events.RestoreEnd, + map[string]any{ + events.BackupID: op.BackupID, + events.DataRetrieved: op.Results.BytesRead, + events.Duration: op.Results.CompletedAt.Sub(op.Results.StartedAt), + events.EndTime: dttm.Format(op.Results.CompletedAt), + events.ItemsRead: op.Results.ItemsRead, + events.ItemsWritten: op.Results.ItemsWritten, + events.Resources: op.Results.ResourceOwners, + events.RestoreID: opStats.restoreID, + events.Service: op.Selectors.Service.String(), + events.StartTime: dttm.Format(op.Results.StartedAt), + events.Status: op.Status.String(), + }) + }() + // ----- // Execution // ----- @@ -283,24 +302,6 @@ func (op *RestoreOperation) persistResults( op.Results.ItemsWritten = opStats.gc.Successes - op.bus.Event( - ctx, - events.RestoreEnd, - map[string]any{ - events.BackupID: op.BackupID, - events.DataRetrieved: op.Results.BytesRead, - events.Duration: op.Results.CompletedAt.Sub(op.Results.StartedAt), - events.EndTime: dttm.Format(op.Results.CompletedAt), - events.ItemsRead: op.Results.ItemsRead, - events.ItemsWritten: op.Results.ItemsWritten, - events.Resources: op.Results.ResourceOwners, - events.RestoreID: opStats.restoreID, - events.Service: op.Selectors.Service.String(), - events.StartTime: dttm.Format(op.Results.StartedAt), - events.Status: op.Status.String(), - }, - ) - return op.Errors.Failure() } diff --git a/src/internal/operations/restore_test.go b/src/internal/operations/restore_test.go index ea42a5c4f..5eac8852c 100644 --- a/src/internal/operations/restore_test.go +++ b/src/internal/operations/restore_test.go @@ -458,7 +458,7 @@ func (suite *RestoreOpIntegrationSuite) TestRestore_Run() { } } -func (suite *RestoreOpIntegrationSuite) TestRestore_Run_errorNoResults() { +func (suite *RestoreOpIntegrationSuite) TestRestore_Run_errorNoBackup() { ctx, flush := tester.NewContext() defer flush() @@ -495,6 +495,7 @@ func (suite *RestoreOpIntegrationSuite) TestRestore_Run_errorNoResults() { require.Nil(t, ds, "restoreOp.Run() should not produce details") assert.Zero(t, ro.Results.ResourceOwners, "resource owners") assert.Zero(t, ro.Results.BytesRead, "bytes read") - assert.Zero(t, mb.TimesCalled[events.RestoreStart], "restore-start events") - assert.Zero(t, mb.TimesCalled[events.RestoreEnd], "restore-end events") + // no restore start, because we'd need to find the backup first. + assert.Equal(t, 0, mb.TimesCalled[events.RestoreStart], "restore-start events") + assert.Equal(t, 1, mb.TimesCalled[events.RestoreEnd], "restore-end events") }