generated from rmcguire/go-server-with-otel
add ui, new config opts
This commit is contained in:
@@ -34,11 +34,12 @@ const (
|
||||
// It is safe for concurrent use: Refresh swaps the device map under a lock,
|
||||
// and readers take a read lock.
|
||||
type Client struct {
|
||||
email string
|
||||
password string
|
||||
costPerKWH float64
|
||||
http *http.Client
|
||||
log *zerolog.Logger
|
||||
email string
|
||||
password string
|
||||
costPerKWH float64
|
||||
disableWaterUsage bool
|
||||
http *http.Client
|
||||
log *zerolog.Logger
|
||||
|
||||
mu sync.RWMutex
|
||||
token string
|
||||
@@ -52,12 +53,13 @@ func New(cfg *config.ServiceConfig, log *zerolog.Logger) *Client {
|
||||
transport := http.DefaultTransport.(*http.Transport).Clone()
|
||||
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: cfg.EconetTLSInsecure} //nolint:gosec // opt-in via EconetTLSInsecure
|
||||
return &Client{
|
||||
email: cfg.EconetEmail,
|
||||
password: cfg.EconetPassword,
|
||||
costPerKWH: cfg.CostPerKWH,
|
||||
http: &http.Client{Transport: transport, Timeout: 15 * time.Second},
|
||||
log: log,
|
||||
devices: map[string]*Device{},
|
||||
email: cfg.EconetEmail,
|
||||
password: cfg.EconetPassword,
|
||||
costPerKWH: cfg.CostPerKWH,
|
||||
disableWaterUsage: cfg.DisableWaterUsage,
|
||||
http: &http.Client{Transport: transport, Timeout: 15 * time.Second},
|
||||
log: log,
|
||||
devices: map[string]*Device{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,6 +102,7 @@ func (c *Client) Refresh(ctx context.Context) error {
|
||||
devices := make(map[string]*Device, len(equipment))
|
||||
for _, raw := range equipment {
|
||||
d := newDevice(raw, now)
|
||||
c.traceRawEquipment(d.SerialNumber, raw)
|
||||
if d.SerialNumber == "" {
|
||||
continue
|
||||
}
|
||||
@@ -160,6 +163,20 @@ func (c *Client) SetMode(ctx context.Context, serial, mode string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// traceRawEquipment logs one device's undecoded equipment block so the full set
|
||||
// of "@..." datapoints (including fields we don't decode, e.g. any image/model)
|
||||
// can be inspected. The level guard keeps us from marshaling unless trace is on.
|
||||
func (c *Client) traceRawEquipment(serial string, raw map[string]json.RawMessage) {
|
||||
if c.log.GetLevel() > zerolog.TraceLevel {
|
||||
return
|
||||
}
|
||||
b, err := json.Marshal(raw)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c.log.Trace().Str("serial", serial).RawJSON("equipment", b).Msg("econet: raw equipment payload")
|
||||
}
|
||||
|
||||
func (c *Client) clearToken() {
|
||||
c.mu.Lock()
|
||||
c.token = ""
|
||||
@@ -234,6 +251,9 @@ func (c *Client) fetchUsage(ctx context.Context, d *Device) {
|
||||
} else {
|
||||
c.log.Debug().Err(err).Str("serial", d.SerialNumber).Msg("energy usage poll failed")
|
||||
}
|
||||
if c.disableWaterUsage {
|
||||
return
|
||||
}
|
||||
if w, _, err := c.usage(ctx, d, "waterUsage"); err == nil {
|
||||
d.WaterGallons = w
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user