update concurrently

This commit is contained in:
Ryan McGuire 2025-03-23 12:33:58 -04:00
parent 4a1a8fe8a0
commit a02e8c5061

View File

@ -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(