Weather service proxy support
All checks were successful
Build and Publish / release (push) Successful in 3m51s
All checks were successful
Build and Publish / release (push) Successful in 3m51s
This commit is contained in:
@ -13,6 +13,7 @@ import (
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/ambient/config"
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/provider"
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/provider/awn"
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/provider/wunderground"
|
||||
@ -24,7 +25,7 @@ type AmbientWeather struct {
|
||||
// when either "AmbientWeather" or "Wunderground" are selected
|
||||
// in the "Custom" section of the AWNet app, or the web UI
|
||||
// of an Ambient WeatherHub
|
||||
config *AmbientLocalExporterConfig
|
||||
config *config.AmbientLocalExporterConfig
|
||||
awnProvider provider.AmbientProvider
|
||||
wuProvider provider.AmbientProvider
|
||||
appCtx context.Context
|
||||
@ -32,7 +33,7 @@ type AmbientWeather struct {
|
||||
l *zerolog.Logger
|
||||
}
|
||||
|
||||
func New(appCtx context.Context, awConfig *AmbientLocalExporterConfig) *AmbientWeather {
|
||||
func New(appCtx context.Context, awConfig *config.AmbientLocalExporterConfig) *AmbientWeather {
|
||||
return &AmbientWeather{
|
||||
config: awConfig,
|
||||
appCtx: appCtx,
|
||||
@ -118,7 +119,7 @@ func (aw *AmbientWeather) handleProviderRequest(
|
||||
// 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 station := aw.config.GetStation(update.GetStationName()); station != nil {
|
||||
if station := update.StationConfig; station != nil {
|
||||
if station.ProxyToAWN {
|
||||
err := aw.awnProvider.ProxyReq(ctx, update)
|
||||
if err != nil {
|
||||
@ -126,14 +127,12 @@ func (aw *AmbientWeather) handleProviderRequest(
|
||||
}
|
||||
}
|
||||
if station.ProxyToWunderground {
|
||||
err := aw.awnProvider.ProxyReq(ctx, update)
|
||||
err := aw.wuProvider.ProxyReq(ctx, update)
|
||||
if err != nil {
|
||||
zerolog.Ctx(aw.appCtx).Err(err).Msg("failed to proxy to ambient weather")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (aw *AmbientWeather) InitMetrics() {
|
||||
@ -147,13 +146,7 @@ func (aw *AmbientWeather) enrichStation(update *weather.WeatherUpdate) {
|
||||
if update != nil && update.StationID != nil && *update.StationID != "" {
|
||||
for _, station := range aw.config.WeatherStations {
|
||||
if *update.StationID == station.AWNPassKey || *update.StationID == station.WundergroundID {
|
||||
update.StationInfo = &weather.StationInfo{
|
||||
Type: update.StationType,
|
||||
Equipment: &station.Equipment,
|
||||
Name: &station.Name,
|
||||
Keep: station.KeepMetrics,
|
||||
Drop: station.DropMetrics,
|
||||
}
|
||||
update.StationConfig = &station
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
package ambient
|
||||
package config
|
||||
|
||||
import (
|
||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/config"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/weather"
|
||||
)
|
||||
|
||||
// This configuration includes all config from go-app/config.AppConfig
|
||||
@ -17,11 +15,10 @@ type WeatherStation struct {
|
||||
Name string `yaml:"name"` // Human Friendly Name (e.g. Back Yard Weather)
|
||||
Equipment string `yaml:"equipment"` // Equipment Type (e.g. WS-5000)
|
||||
|
||||
// One of these is required, based on the type
|
||||
// set in the "Custom" weather service on your
|
||||
// console, weather station, or weather hub
|
||||
WundergroundID string `yaml:"wundergroundID"`
|
||||
AWNPassKey string `yaml:"awnPassKey"`
|
||||
// Required if proxying to awn/wu is enabled
|
||||
WundergroundID string `yaml:"wundergroundID"`
|
||||
WundergroundPassword string `yaml:"wundergroundPassword"`
|
||||
AWNPassKey string `yaml:"awnPassKey"`
|
||||
|
||||
// Proxy updates to AWN or Wunderground
|
||||
ProxyToAWN bool `yaml:"proxyToAWN"`
|
||||
@ -31,16 +28,9 @@ type WeatherStation struct {
|
||||
// will be excluded if present in discardMetrics
|
||||
//
|
||||
// If anything is present in keepMetrics, it is solely applied,
|
||||
// ignoring discardMetrics
|
||||
KeepMetrics []weather.WeatherUpdateField `yaml:"keepMetrics"`
|
||||
DropMetrics []weather.WeatherUpdateField `yaml:"dropMetrics"`
|
||||
}
|
||||
|
||||
func (wc *AmbientLocalExporterConfig) GetStation(name string) *WeatherStation {
|
||||
for _, station := range wc.WeatherStations {
|
||||
if station.Name == name {
|
||||
return &station
|
||||
}
|
||||
}
|
||||
return nil
|
||||
// ignoring discardMetrics.
|
||||
//
|
||||
// Check weather.WeatherUpdateField for options
|
||||
KeepMetrics []string `yaml:"keepMetrics"`
|
||||
DropMetrics []string `yaml:"dropMetrics"`
|
||||
}
|
Reference in New Issue
Block a user