Moved code to top-level.

This commit is contained in:
Jay
2026-01-26 10:28:39 -05:00
parent 17fb1c6c9a
commit 5ee9ef500e
16 changed files with 95 additions and 90 deletions

66
retry.go Normal file
View File

@@ -0,0 +1,66 @@
package honeybee
import (
"math"
"math/rand"
"time"
)
type RetryManager struct {
config *RetryConfig
retryCount int
}
func NewRetryManager(config *RetryConfig) *RetryManager {
return &RetryManager{
config: config,
retryCount: 0,
}
}
func (r *RetryManager) ShouldRetry() bool {
if r.config == nil {
return false
}
if r.config.MaxRetries > 0 && r.retryCount >= r.config.MaxRetries {
return false
}
return true
}
func (r *RetryManager) CalculateDelay() time.Duration {
if r.config == nil {
return time.Second
}
// First attempt: immediate retry
if r.retryCount == 0 {
return 0
}
// Exponential backoff: InitialDelay * 2^(attempts-1)
backoffMultiplier := math.Pow(2, float64(r.retryCount-1))
baseDelay := float64(r.config.InitialDelay) * backoffMultiplier
// Apply jitter: delay * (1 + jitterFactor * (random - 0.5))
random := rand.Float64()
jitterMultiplier := 1 + r.config.JitterFactor*(random-0.5)
delay := time.Duration(baseDelay * jitterMultiplier)
// Cap at MaxDelay
if delay > r.config.MaxDelay {
delay = r.config.MaxDelay
}
return delay
}
func (m *RetryManager) RecordRetry() {
m.retryCount++
}
func (m *RetryManager) RetryCount() int {
return m.retryCount
}