mirror of
https://github.com/steinhobelgruen/netatmo-exporter.git
synced 2024-11-21 17:03:56 +00:00
Make stale age configurable
This commit is contained in:
parent
adb91d1992
commit
3d98195772
13
collector.go
13
collector.go
|
@ -8,10 +8,6 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
staleDataThreshold = 30 * time.Minute
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
netatmoUp = prometheus.NewGauge(prometheus.GaugeOpts{
|
netatmoUp = prometheus.NewGauge(prometheus.GaugeOpts{
|
||||||
Name: "netatmo_up",
|
Name: "netatmo_up",
|
||||||
|
@ -97,8 +93,9 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
type netatmoCollector struct {
|
type netatmoCollector struct {
|
||||||
log logrus.FieldLogger
|
log logrus.FieldLogger
|
||||||
client *netatmo.Client
|
staleThreshold time.Duration
|
||||||
|
client *netatmo.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *netatmoCollector) Describe(dChan chan<- *prometheus.Desc) {
|
func (c *netatmoCollector) Describe(dChan chan<- *prometheus.Desc) {
|
||||||
|
@ -140,8 +137,8 @@ func (c *netatmoCollector) collectData(ch chan<- prometheus.Metric, device *neta
|
||||||
}
|
}
|
||||||
|
|
||||||
date := time.Unix(*data.LastMeasure, 0)
|
date := time.Unix(*data.LastMeasure, 0)
|
||||||
if time.Since(date) > staleDataThreshold {
|
if time.Since(date) > c.staleThreshold {
|
||||||
c.log.Warnf("Data is stale: %s > %s", time.Since(date), staleDataThreshold)
|
c.log.Warnf("Data is stale: %s > %s", time.Since(date), c.staleThreshold)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
27
config.go
27
config.go
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
netatmo "github.com/exzz/netatmo-api-go"
|
netatmo "github.com/exzz/netatmo-api-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -12,6 +13,7 @@ import (
|
||||||
const (
|
const (
|
||||||
envVarListenAddress = "NETATMO_EXPORTER_ADDR"
|
envVarListenAddress = "NETATMO_EXPORTER_ADDR"
|
||||||
envVarLogLevel = "NETATMO_LOG_LEVEL"
|
envVarLogLevel = "NETATMO_LOG_LEVEL"
|
||||||
|
envVarStaleDuration = "NETATMO_AGE_STALE"
|
||||||
envVarNetatmoClientID = "NETATMO_CLIENT_ID"
|
envVarNetatmoClientID = "NETATMO_CLIENT_ID"
|
||||||
envVarNetatmoClientSecret = "NETATMO_CLIENT_SECRET"
|
envVarNetatmoClientSecret = "NETATMO_CLIENT_SECRET"
|
||||||
envVarNetatmoUsername = "NETATMO_CLIENT_USERNAME"
|
envVarNetatmoUsername = "NETATMO_CLIENT_USERNAME"
|
||||||
|
@ -19,16 +21,20 @@ const (
|
||||||
|
|
||||||
flagListenAddress = "addr"
|
flagListenAddress = "addr"
|
||||||
flagLogLevel = "log-level"
|
flagLogLevel = "log-level"
|
||||||
|
flagStaleDuration = "age-stale"
|
||||||
flagNetatmoClientID = "client-id"
|
flagNetatmoClientID = "client-id"
|
||||||
flagNetatmoClientSecret = "client-secret"
|
flagNetatmoClientSecret = "client-secret"
|
||||||
flagNetatmoUsername = "username"
|
flagNetatmoUsername = "username"
|
||||||
flagNetatmoPassword = "password"
|
flagNetatmoPassword = "password"
|
||||||
|
|
||||||
|
defaultStaleDuration = 30 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
defaultConfig = config{
|
defaultConfig = config{
|
||||||
Addr: ":9210",
|
Addr: ":9210",
|
||||||
LogLevel: logLevel(logrus.InfoLevel),
|
LogLevel: logLevel(logrus.InfoLevel),
|
||||||
|
StaleDuration: defaultStaleDuration,
|
||||||
}
|
}
|
||||||
|
|
||||||
errNoBinaryName = errors.New("need the binary name as first argument")
|
errNoBinaryName = errors.New("need the binary name as first argument")
|
||||||
|
@ -60,9 +66,10 @@ func (l *logLevel) Set(value string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
Addr string
|
Addr string
|
||||||
LogLevel logLevel
|
LogLevel logLevel
|
||||||
Netatmo netatmo.Config
|
StaleDuration time.Duration
|
||||||
|
Netatmo netatmo.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseConfig(args []string, getenv func(string) string) (config, error) {
|
func parseConfig(args []string, getenv func(string) string) (config, error) {
|
||||||
|
@ -75,6 +82,7 @@ func parseConfig(args []string, getenv func(string) string) (config, error) {
|
||||||
flagSet := pflag.NewFlagSet(args[0], pflag.ExitOnError)
|
flagSet := pflag.NewFlagSet(args[0], pflag.ExitOnError)
|
||||||
flagSet.StringVarP(&cfg.Addr, flagListenAddress, "a", cfg.Addr, "Address to listen on.")
|
flagSet.StringVarP(&cfg.Addr, flagListenAddress, "a", cfg.Addr, "Address to listen on.")
|
||||||
flagSet.Var(&cfg.LogLevel, flagLogLevel, "Sets the minimum level output through logging.")
|
flagSet.Var(&cfg.LogLevel, flagLogLevel, "Sets the minimum level output through logging.")
|
||||||
|
flagSet.DurationVar(&cfg.StaleDuration, flagStaleDuration, cfg.StaleDuration, "Data age to consider as stale. Stale data does not create metrics anymore.")
|
||||||
flagSet.StringVarP(&cfg.Netatmo.ClientID, flagNetatmoClientID, "i", cfg.Netatmo.ClientID, "Client ID for NetAtmo app.")
|
flagSet.StringVarP(&cfg.Netatmo.ClientID, flagNetatmoClientID, "i", cfg.Netatmo.ClientID, "Client ID for NetAtmo app.")
|
||||||
flagSet.StringVarP(&cfg.Netatmo.ClientSecret, flagNetatmoClientSecret, "s", cfg.Netatmo.ClientSecret, "Client secret for NetAtmo app.")
|
flagSet.StringVarP(&cfg.Netatmo.ClientSecret, flagNetatmoClientSecret, "s", cfg.Netatmo.ClientSecret, "Client secret for NetAtmo app.")
|
||||||
flagSet.StringVarP(&cfg.Netatmo.Username, flagNetatmoUsername, "u", cfg.Netatmo.Username, "Username of NetAtmo account.")
|
flagSet.StringVarP(&cfg.Netatmo.Username, flagNetatmoUsername, "u", cfg.Netatmo.Username, "Username of NetAtmo account.")
|
||||||
|
@ -119,6 +127,15 @@ func applyEnvironment(cfg *config, getenv func(string) string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if envStaleDuration := getenv(envVarStaleDuration); envStaleDuration != "" {
|
||||||
|
duration, err := time.ParseDuration(envStaleDuration)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.StaleDuration = duration
|
||||||
|
}
|
||||||
|
|
||||||
if envClientID := getenv(envVarNetatmoClientID); envClientID != "" {
|
if envClientID := getenv(envVarNetatmoClientID); envClientID != "" {
|
||||||
cfg.Netatmo.ClientID = envClientID
|
cfg.Netatmo.ClientID = envClientID
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
netatmo "github.com/exzz/netatmo-api-go"
|
netatmo "github.com/exzz/netatmo-api-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -38,8 +39,9 @@ func TestParseConfig(t *testing.T) {
|
||||||
},
|
},
|
||||||
env: map[string]string{},
|
env: map[string]string{},
|
||||||
wantConfig: config{
|
wantConfig: config{
|
||||||
Addr: defaultConfig.Addr,
|
Addr: defaultConfig.Addr,
|
||||||
LogLevel: logLevel(logrus.InfoLevel),
|
LogLevel: logLevel(logrus.InfoLevel),
|
||||||
|
StaleDuration: defaultStaleDuration,
|
||||||
Netatmo: netatmo.Config{
|
Netatmo: netatmo.Config{
|
||||||
ClientID: "id",
|
ClientID: "id",
|
||||||
ClientSecret: "secret",
|
ClientSecret: "secret",
|
||||||
|
@ -57,14 +59,16 @@ func TestParseConfig(t *testing.T) {
|
||||||
env: map[string]string{
|
env: map[string]string{
|
||||||
envVarListenAddress: ":8080",
|
envVarListenAddress: ":8080",
|
||||||
envVarLogLevel: "debug",
|
envVarLogLevel: "debug",
|
||||||
|
envVarStaleDuration: "10m",
|
||||||
envVarNetatmoClientID: "id",
|
envVarNetatmoClientID: "id",
|
||||||
envVarNetatmoClientSecret: "secret",
|
envVarNetatmoClientSecret: "secret",
|
||||||
envVarNetatmoUsername: "username",
|
envVarNetatmoUsername: "username",
|
||||||
envVarNetatmoPassword: "password",
|
envVarNetatmoPassword: "password",
|
||||||
},
|
},
|
||||||
wantConfig: config{
|
wantConfig: config{
|
||||||
Addr: ":8080",
|
Addr: ":8080",
|
||||||
LogLevel: logLevel(logrus.DebugLevel),
|
LogLevel: logLevel(logrus.DebugLevel),
|
||||||
|
StaleDuration: 10 * time.Minute,
|
||||||
Netatmo: netatmo.Config{
|
Netatmo: netatmo.Config{
|
||||||
ClientID: "id",
|
ClientID: "id",
|
||||||
ClientSecret: "secret",
|
ClientSecret: "secret",
|
||||||
|
|
Loading…
Reference in a new issue