Compare commits

...

2 Commits

Author SHA1 Message Date
44bf293eab Proxy observability updates
All checks were successful
Build and Publish / release (push) Successful in 2m51s
2025-01-12 19:14:24 -05:00
f87b35b306 Perform proxy updates in goroutines 2025-01-12 19:10:30 -05:00
3 changed files with 45 additions and 18 deletions

View File

@ -7,6 +7,7 @@ import (
"context" "context"
"fmt" "fmt"
"net/http" "net/http"
"sync"
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel" "gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel"
"github.com/rs/zerolog" "github.com/rs/zerolog"
@ -120,26 +121,40 @@ func (aw *AmbientWeather) handleProviderRequest(
// Uses a weather update to allow awn to publish to wunderground and // Uses a weather update to allow awn to publish to wunderground and
// visa versa. // visa versa.
if station := update.StationConfig; station != nil { if station := update.StationConfig; station != nil {
// Perform proxy updates in parallel if enabled
var proxyWg sync.WaitGroup
if station.ProxyToAWN { if station.ProxyToAWN {
err := aw.awnProvider.ProxyReq(ctx, update) proxyWg.Add(1)
if err != nil { go func() {
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather") defer proxyWg.Done()
return err := aw.awnProvider.ProxyReq(ctx, update)
} if err != nil {
zerolog.Ctx(aw.appCtx).Debug(). zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
Str("station", station.Name). return
Msg("proxied weather update to awn") }
zerolog.Ctx(aw.appCtx).Debug().
Str("station", station.Name).
Msg("proxied weather update to awn")
}()
} }
if station.ProxyToWunderground { if station.ProxyToWunderground {
err := aw.wuProvider.ProxyReq(ctx, update) proxyWg.Add(1)
if err != nil { go func() {
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather") defer proxyWg.Done()
return err := aw.wuProvider.ProxyReq(ctx, update)
} if err != nil {
zerolog.Ctx(aw.appCtx).Debug(). zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
Str("station", station.Name). return
Msg("proxied weather update to wunderground") }
zerolog.Ctx(aw.appCtx).Debug().
Str("station", station.Name).
Msg("proxied weather update to wunderground")
}()
} }
proxyWg.Wait()
} }
} }

View File

@ -8,6 +8,7 @@ import (
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel" "gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
"github.com/rs/zerolog/log"
"go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/codes"
@ -43,12 +44,18 @@ func (awn *AWNProvider) ProxyReq(ctx context.Context, update *weather.WeatherUpd
Get(awnURL) Get(awnURL)
if err != nil { if err != nil {
span.RecordError(err) span.RecordError(err)
span.SetAttributes(
attribute.String("query", resp.Request.QueryParam.Encode()),
attribute.String("body", string(resp.Body())),
)
span.SetStatus(codes.Error, err.Error()) span.SetStatus(codes.Error, err.Error())
log.Err(err).Any("query", resp.Request.PathParams).
Int("statusCode", resp.StatusCode()).
Msg("awn proxy failed")
} }
span.SetAttributes( span.SetAttributes(
attribute.Int("statusCode", resp.StatusCode()), attribute.Int("statusCode", resp.StatusCode()),
attribute.String("body", string(resp.Body())),
) )
return err return err

View File

@ -6,6 +6,7 @@ import (
"net/url" "net/url"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
"github.com/rs/zerolog/log"
"go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/codes"
"k8s.io/utils/ptr" "k8s.io/utils/ptr"
@ -40,13 +41,17 @@ func (wu *WUProvider) ProxyReq(ctx context.Context, update *weather.WeatherUpdat
span.SetStatus(codes.Error, err.Error()) span.SetStatus(codes.Error, err.Error())
span.SetAttributes( span.SetAttributes(
attribute.String("query", resp.Request.QueryParam.Encode()), attribute.String("query", resp.Request.QueryParam.Encode()),
attribute.String("body", string(resp.Body())),
) )
span.RecordError(err) span.RecordError(err)
log.Err(err).
Int("statusCode", resp.StatusCode()).
Any("query", resp.Request.PathParams).
Msg("wunderground proxy failed")
} }
span.SetAttributes( span.SetAttributes(
attribute.Int("statusCode", resp.StatusCode()), attribute.Int("statusCode", resp.StatusCode()),
attribute.String("body", string(resp.Body())),
) )
return err return err