mirror of
https://github.com/tess1o/go-ecoflow-exporter.git
synced 2025-11-03 13:33:19 +00:00
79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
"github.com/tess1o/go-ecoflow"
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
defaultMetricPrefix = "ecoflow"
|
|
defaultInterval = 30
|
|
)
|
|
|
|
func main() {
|
|
setLoggerLevel()
|
|
|
|
accessKey := os.Getenv("ECOFLOW_ACCESS_KEY")
|
|
secretKey := os.Getenv("ECOFLOW_SECRET_KEY")
|
|
|
|
if accessKey == "" || secretKey == "" {
|
|
slog.Error("AccessKey and SecretKey are mandatory")
|
|
return
|
|
}
|
|
|
|
client := ecoflow.NewEcoflowClient(accessKey, secretKey)
|
|
|
|
metricPrefix := getStringOrDefault("METRIC_PREFIX", defaultMetricPrefix)
|
|
interval := getIntOrDefault("PROMETHEUS_INTERVAL", defaultInterval)
|
|
|
|
// configure prometheus scrap interval and metric prefix
|
|
config := PrometheusConfig{
|
|
Interval: time.Second * time.Duration(interval),
|
|
Prefix: metricPrefix,
|
|
}
|
|
|
|
RecordPrometheusMetrics(client, &config)
|
|
|
|
// start server with metrics
|
|
slog.Info("Starting server on port 2112. Metrics are available at http://localhost:2112/metrics")
|
|
http.Handle("/metrics", promhttp.Handler())
|
|
err := http.ListenAndServe(":2112", nil)
|
|
if err != nil {
|
|
slog.Error("Unable to start the server", "error", err)
|
|
}
|
|
}
|
|
|
|
func setLoggerLevel() {
|
|
debugEnabled := os.Getenv("DEBUG_ENABLED")
|
|
if debugEnabled == "true" || debugEnabled == "1" {
|
|
slog.SetLogLoggerLevel(slog.LevelDebug)
|
|
} else {
|
|
slog.SetLogLoggerLevel(slog.LevelInfo)
|
|
}
|
|
}
|
|
|
|
func getStringOrDefault(key, def string) string {
|
|
val, exists := os.LookupEnv(key)
|
|
if exists {
|
|
return val
|
|
}
|
|
return def
|
|
}
|
|
|
|
func getIntOrDefault(key string, def int) int {
|
|
val, exists := os.LookupEnv(key)
|
|
if exists {
|
|
intVal, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return def
|
|
}
|
|
return intVal
|
|
}
|
|
return def
|
|
}
|