Hooks

Observe actions, errors, and retries from one client-level configuration point.

Add hooks

Hooks are fire-and-forget. A panic inside a hook is recovered and does not fail the storage operation.

client := files.MustNew(files.Options{
	Adapter: memory.New(memory.Options{}),
	Hooks: files.Hooks{
		OnAction: func(event files.ActionEvent) {
			fmt.Println(event.Type, event.Status, event.Key)
		},
		OnError: func(event files.ErrorEvent) {
			fmt.Println(event.Type, event.Error.Code)
		},
		OnRetry: func(event files.RetryEvent) {
			fmt.Println(event.Type, event.Attempt, event.Delay)
		},
	},
})

Action events

Action events fire when an operation succeeds or fails.

_, err := client.Upload(ctx, "reports/q1.txt", files.StringBody("ready"), files.UploadOptions{})
if err != nil {
	return err
}
// OnAction receives Type: upload, Status: success, Key: reports/q1.txt.

Retry events

Retry events fire before each scheduled retry.

client := files.MustNew(files.Options{
	Adapter: adapter,
	Retries: &files.RetryOptions{Max: 2},
	Hooks: files.Hooks{
		OnRetry: func(event files.RetryEvent) {
			fmt.Println(event.Attempt, event.MaxRetries)
		},
	},
})

Use hooks for logs, metrics, tracing, and audit records.

On this page