Documentation
¶
Index ¶
- type DeadLetterStats
- type DeadLetterStore
- func (s *DeadLetterStore) Add(d *Delivery)
- func (s *DeadLetterStore) Count() int
- func (s *DeadLetterStore) Get(id string) (*Delivery, bool)
- func (s *DeadLetterStore) List() []*Delivery
- func (s *DeadLetterStore) Purge() int
- func (s *DeadLetterStore) Remove(id string) (*Delivery, bool)
- func (s *DeadLetterStore) Stats() DeadLetterStats
- type Delivery
- type DeliveryStatus
- type Handler
- type RetryConfig
- type RetryManager
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DeadLetterStats ¶
type DeadLetterStats struct {
Total int `json:"total"`
ByStatus map[string]int `json:"byStatus"`
OldestEntry *time.Time `json:"oldestEntry,omitempty"`
NewestEntry *time.Time `json:"newestEntry,omitempty"`
TotalRetries int `json:"totalRetries"`
}
DeadLetterStats holds aggregate stats for the dead letter store.
type DeadLetterStore ¶
type DeadLetterStore struct {
// contains filtered or unexported fields
}
DeadLetterStore is an in-memory store for failed webhook deliveries.
func NewDeadLetterStore ¶
func NewDeadLetterStore() *DeadLetterStore
NewDeadLetterStore creates a new empty DeadLetterStore.
func (*DeadLetterStore) Add ¶
func (s *DeadLetterStore) Add(d *Delivery)
Add puts a delivery into the dead letter store.
func (*DeadLetterStore) Count ¶
func (s *DeadLetterStore) Count() int
Count returns the number of entries.
func (*DeadLetterStore) Get ¶
func (s *DeadLetterStore) Get(id string) (*Delivery, bool)
Get retrieves a delivery by ID.
func (*DeadLetterStore) List ¶
func (s *DeadLetterStore) List() []*Delivery
List returns all dead letter entries sorted by creation time (newest first).
func (*DeadLetterStore) Purge ¶
func (s *DeadLetterStore) Purge() int
Purge removes all entries and returns the count removed.
func (*DeadLetterStore) Remove ¶
func (s *DeadLetterStore) Remove(id string) (*Delivery, bool)
Remove removes and returns a delivery from the store.
func (*DeadLetterStore) Stats ¶
func (s *DeadLetterStore) Stats() DeadLetterStats
Stats returns aggregate statistics about dead letter entries.
type Delivery ¶
type Delivery struct {
ID string `json:"id"`
URL string `json:"url"`
Payload []byte `json:"payload"`
Headers map[string]string `json:"headers"`
Status DeliveryStatus `json:"status"`
Attempts int `json:"attempts"`
MaxRetries int `json:"maxRetries"`
LastError string `json:"lastError,omitempty"`
StatusCode int `json:"statusCode,omitempty"`
CreatedAt time.Time `json:"createdAt"`
LastAttempt *time.Time `json:"lastAttempt,omitempty"`
DeliveredAt *time.Time `json:"deliveredAt,omitempty"`
}
Delivery tracks a single webhook delivery attempt.
type DeliveryStatus ¶
type DeliveryStatus string
DeliveryStatus represents the status of a webhook delivery.
const ( StatusPending DeliveryStatus = "pending" StatusDelivered DeliveryStatus = "delivered" StatusFailed DeliveryStatus = "failed" StatusDeadLetter DeliveryStatus = "dead_letter" )
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler provides HTTP endpoints for the dead letter dashboard.
func NewHandler ¶
func NewHandler(store *DeadLetterStore, manager *RetryManager) *Handler
NewHandler creates a new webhook HTTP handler.
func (*Handler) RegisterRoutes ¶
RegisterRoutes registers webhook API routes on the given mux.
type RetryConfig ¶
type RetryConfig struct {
MaxRetries int `json:"maxRetries" yaml:"maxRetries"`
InitialBackoff time.Duration `json:"initialBackoff" yaml:"initialBackoff"`
MaxBackoff time.Duration `json:"maxBackoff" yaml:"maxBackoff"`
BackoffMultiplier float64 `json:"backoffMultiplier" yaml:"backoffMultiplier"`
JitterFraction float64 `json:"jitterFraction" yaml:"jitterFraction"`
Timeout time.Duration `json:"timeout" yaml:"timeout"`
}
RetryConfig holds configuration for the retry manager.
func DefaultRetryConfig ¶
func DefaultRetryConfig() RetryConfig
DefaultRetryConfig returns a RetryConfig with sensible defaults.
type RetryManager ¶
type RetryManager struct {
// contains filtered or unexported fields
}
RetryManager handles webhook delivery with configurable exponential backoff and jitter.
func NewRetryManager ¶
func NewRetryManager(config RetryConfig, store *DeadLetterStore) *RetryManager
NewRetryManager creates a new RetryManager with the given config and dead letter store.
func (*RetryManager) Send ¶
func (rm *RetryManager) Send(ctx context.Context, url string, payload []byte, headers map[string]string) (*Delivery, error)
Send delivers a webhook with retry logic. On exhausting retries, the delivery is placed in the dead letter store.
func (*RetryManager) SetClient ¶
func (rm *RetryManager) SetClient(client *http.Client)
SetClient sets a custom HTTP client (useful for testing).