outbox for gateways

This commit is contained in:
Stephan D
2026-02-18 01:35:28 +01:00
parent 974caf286c
commit 69531cee73
221 changed files with 12172 additions and 782 deletions

View File

@@ -0,0 +1,64 @@
package reliable
import (
"time"
"github.com/mitchellh/mapstructure"
"github.com/tech/sendico/pkg/model"
)
const SettingsBlockKey = "reliable_publisher"
type Settings struct {
Enabled bool `mapstructure:"enabled" yaml:"enabled"`
BatchSize int `mapstructure:"batch_size" yaml:"batch_size"`
PollIntervalSeconds int `mapstructure:"poll_interval_seconds" yaml:"poll_interval_seconds"`
MaxAttempts int `mapstructure:"max_attempts" yaml:"max_attempts"`
}
func DefaultSettings() Settings {
return Settings{
Enabled: true,
BatchSize: defaultBatchSize,
PollIntervalSeconds: int(defaultPollInterval.Seconds()),
MaxAttempts: defaultMaxAttempts,
}
}
func ParseSettings(driverSettings model.SettingsT) (Settings, error) {
settings := DefaultSettings()
if len(driverSettings) == 0 {
return settings, nil
}
raw, ok := driverSettings[SettingsBlockKey]
if !ok || raw == nil {
return settings, nil
}
if err := mapstructure.Decode(raw, &settings); err != nil {
return Settings{}, err
}
settings.applyDefaults()
return settings, nil
}
func (s *Settings) PollInterval() time.Duration {
if s == nil || s.PollIntervalSeconds <= 0 {
return defaultPollInterval
}
return time.Duration(s.PollIntervalSeconds) * time.Second
}
func (s *Settings) applyDefaults() {
if s.BatchSize <= 0 {
s.BatchSize = defaultBatchSize
}
if s.PollIntervalSeconds <= 0 {
s.PollIntervalSeconds = int(defaultPollInterval.Seconds())
}
if s.MaxAttempts <= 0 {
s.MaxAttempts = defaultMaxAttempts
}
}