Skip to content

Commit

Permalink
adds environment-based config for alerts retry delays
Browse files Browse the repository at this point in the history
BACK-2559
  • Loading branch information
ewollesen committed Feb 12, 2025
1 parent 0586c46 commit 8f3d3ab
Showing 1 changed file with 32 additions and 5 deletions.
37 changes: 32 additions & 5 deletions data/service/service/standard.go
Original file line number Diff line number Diff line change
Expand Up @@ -523,12 +523,19 @@ func (s *Standard) initializeAlertsEventsHandler() error {
},
}

retryDelays := []time.Duration{0, 1 * time.Second}
if strings.Contains(commonConfig.KafkaTopicPrefix, "tidepool-prod") {
// Kakfa topics/partitions aren't cheap, so minimize costs outside of production.
retryDelays = append(retryDelays, 2*time.Second, 3*time.Second, 5*time.Second)
cfg := &alertsEventsHandlerConfig{Config: platform.NewConfig()}
cfg.UserAgent = s.UserAgent()
reporter := s.ConfigReporter().WithScopes("alerts", "retry")
loader := platform.NewConfigReporterLoader(reporter)
if err := cfg.Load(loader); err != nil {
return errors.Wrap(err, "unable to alerts retry delays config")
}
eventsRunner := dataEvents.NewCascadingSaramaEventsRunner(runnerCfg, s.Logger(), retryDelays)
delays, err := parseCommaSeparatedDurations(reporter.GetWithDefault("delays", "1s"))
if err != nil {
return errors.Wrap(err, "Unable to read configured alerts retry delays")
}

eventsRunner := dataEvents.NewCascadingSaramaEventsRunner(runnerCfg, s.Logger(), delays)
runner := dataEvents.NewSaramaRunner(eventsRunner)
if err := runner.Initialize(); err != nil {
return errors.Wrap(err, "Unable to initialize alerts events handler runner")
Expand All @@ -537,3 +544,23 @@ func (s *Standard) initializeAlertsEventsHandler() error {

return nil
}

type alertsEventsHandlerConfig struct {
*platform.Config
RetryDelaysConfig string `envconfig:"TIDEPOOL_DATA_SERVICE_ALERTS_RETRY_DELAYS" default:"1s"`
}

func parseCommaSeparatedDurations(s string) ([]time.Duration, error) {
out := []time.Duration{}
for _, d := range strings.Split(s, ",") {
if d == "" {
continue
}
dur, err := time.ParseDuration(d)
if err != nil {
return nil, err
}
out = append(out, dur)
}
return out, nil
}

0 comments on commit 8f3d3ab

Please sign in to comment.