Compare commits
4 Commits
eaf2cf211d
...
v0.5.4
Author | SHA1 | Date | |
---|---|---|---|
e93c7ec5c0 | |||
c2bde1e1dd | |||
44bf293eab | |||
f87b35b306 |
6
TODO.md
6
TODO.md
@ -2,12 +2,12 @@
|
|||||||
- [ ] Helm Chart
|
- [ ] Helm Chart
|
||||||
- [ ] Update README
|
- [ ] Update README
|
||||||
- [ ] Add Grafana dashboard
|
- [ ] Add Grafana dashboard
|
||||||
- [ ] Add proxy to upstream support
|
|
||||||
- [ ] Add new spans
|
- [ ] Add new spans
|
||||||
- [ ] Fix wunderground 401
|
|
||||||
- [ ] Perform proxy calls in goroutines
|
|
||||||
|
|
||||||
## Done
|
## Done
|
||||||
|
- [x] Add proxy to upstream support
|
||||||
|
- [x] Fix wunderground 401
|
||||||
|
- [x] Perform proxy calls in goroutines
|
||||||
- [x] Configuration for app
|
- [x] Configuration for app
|
||||||
- [x] Configurable metric prefix
|
- [x] Configurable metric prefix
|
||||||
- [x] Add device name field with ID/Key mappings
|
- [x] Add device name field with ID/Key mappings
|
||||||
|
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter
|
|||||||
go 1.23.4
|
go 1.23.4
|
||||||
|
|
||||||
require (
|
require (
|
||||||
gitea.libretechconsulting.com/rmcguire/go-app v0.3.1
|
gitea.libretechconsulting.com/rmcguire/go-app v0.3.2
|
||||||
github.com/go-resty/resty/v2 v2.16.3
|
github.com/go-resty/resty/v2 v2.16.3
|
||||||
github.com/gorilla/schema v1.4.1
|
github.com/gorilla/schema v1.4.1
|
||||||
github.com/rs/zerolog v1.33.0
|
github.com/rs/zerolog v1.33.0
|
||||||
|
4
go.sum
4
go.sum
@ -1,5 +1,5 @@
|
|||||||
gitea.libretechconsulting.com/rmcguire/go-app v0.3.1 h1:jydcJ+Vv8sk+Le7nTI2+b6E7FfV+ShBJo7YdxmdaCYc=
|
gitea.libretechconsulting.com/rmcguire/go-app v0.3.2 h1:zAT6wmEEODYWx+iU3adlmFNW4FCTHzRvIepFIOQZGjk=
|
||||||
gitea.libretechconsulting.com/rmcguire/go-app v0.3.1/go.mod h1:wHOWh4O4AMDATQ3WEUYjq5a5bnICPBpu5G6BsNxqN38=
|
gitea.libretechconsulting.com/rmcguire/go-app v0.3.2/go.mod h1:ug6g+FyEi2LguWTQfd+bZrTd1ECsot8BylxgMFEO5DM=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
|
github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
|
||||||
|
@ -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,7 +121,13 @@ 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 {
|
||||||
|
proxyWg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer proxyWg.Done()
|
||||||
err := aw.awnProvider.ProxyReq(ctx, update)
|
err := aw.awnProvider.ProxyReq(ctx, update)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
|
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
|
||||||
@ -129,8 +136,13 @@ func (aw *AmbientWeather) handleProviderRequest(
|
|||||||
zerolog.Ctx(aw.appCtx).Debug().
|
zerolog.Ctx(aw.appCtx).Debug().
|
||||||
Str("station", station.Name).
|
Str("station", station.Name).
|
||||||
Msg("proxied weather update to awn")
|
Msg("proxied weather update to awn")
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
if station.ProxyToWunderground {
|
if station.ProxyToWunderground {
|
||||||
|
proxyWg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer proxyWg.Done()
|
||||||
err := aw.wuProvider.ProxyReq(ctx, update)
|
err := aw.wuProvider.ProxyReq(ctx, update)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
|
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
|
||||||
@ -139,7 +151,10 @@ func (aw *AmbientWeather) handleProviderRequest(
|
|||||||
zerolog.Ctx(aw.appCtx).Debug().
|
zerolog.Ctx(aw.appCtx).Debug().
|
||||||
Str("station", station.Name).
|
Str("station", station.Name).
|
||||||
Msg("proxied weather update to wunderground")
|
Msg("proxied weather update to wunderground")
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proxyWg.Wait()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user