From a02e8c5061bcc631fb7b7538740dbe0f7d9e944d Mon Sep 17 00:00:00 2001 From: Ryan McGuire Date: Sun, 23 Mar 2025 12:33:58 -0400 Subject: [PATCH] update concurrently --- pkg/ambient/ambient.go | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/pkg/ambient/ambient.go b/pkg/ambient/ambient.go index 8289e4e..8855358 100644 --- a/pkg/ambient/ambient.go +++ b/pkg/ambient/ambient.go @@ -163,24 +163,43 @@ func (aw *AmbientWeather) handleProviderRequest( updateSpan.SetAttributes(attribute.String("stationName", update.StationConfig.Name)) } + // Concurrently record the now enriched update + // to the configured recorder and to otel, and proxy + // to enabled downstream providers + var updateWg sync.WaitGroup + // Record state - aw.weatherRecorder.Set(ctx, update) + updateWg.Add(1) + go func() { + defer updateWg.Done() + aw.weatherRecorder.Set(ctx, update) + }() // Update metrics - aw.metricsUpdate(ctx, p, update) + updateWg.Add(1) + go func() { + defer updateWg.Done() + aw.metricsUpdate(ctx, p, update) + }() + + // Proxy update to one or both services if configured to do so + // Uses a weather update to allow awn to publish to wunderground and + // visa versa. + if update.StationConfig != nil { + updateWg.Add(1) + go func() { + defer updateWg.Done() + aw.proxyUpdate(ctx, p, update) + }() + } + + updateWg.Wait() l.Debug(). Str("provider", p.Name()). Any("update", update). Msg("successfully handled update") w.Write([]byte("ok")) - - // Proxy update to one or both services if configured to do so - // Uses a weather update to allow awn to publish to wunderground and - // visa versa. - if update.StationConfig != nil { - aw.proxyUpdate(ctx, p, update) - } } func (aw *AmbientWeather) enrichUpdate(