pac3100-exporter/main.go

73 lines
1.5 KiB
Go

package main
import (
"fmt"
"git.entr0py.de/garionion/pac3100-exporter/exporter"
"git.entr0py.de/garionion/pac3100-exporter/scraper"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"os"
"sync"
"time"
)
func main() {
zerolog.TimeFieldFormat = time.RFC1123Z
consoleWriter := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC1123Z}
log.Logger = log.Output(consoleWriter).With().Timestamp().Logger()
exp := exporter.New()
usb0, err := scraper.New("/dev/ttyUSB0", log.Logger)
if err != nil {
log.Panic().Err(err)
}
usb1, err := scraper.New("/dev/ttyUSB1", log.Logger)
if err != nil {
log.Panic().Err(err)
}
log.Info().Msg("starting")
go scrape(exp, usb0, usb1)
app := echo.New()
app.Use(middleware.Recover())
app.GET("/metrics", echo.WrapHandler(promhttp.Handler()))
log.Fatal().Err(app.Start(":9555"))
}
func scrape(exp exporter.Exporter, devices ...*scraper.Scraper) {
var wg sync.WaitGroup
ticker := time.NewTicker(1 * time.Second)
for {
wg.Add(2)
go func() {
defer wg.Done()
measurement, err := devices[0].GetMeasurments()
if err != nil {
fmt.Println(err.Error())
}
exp.SetMeasurements(measurement, "device0")
}()
go func() {
defer wg.Done()
measurement, err := devices[1].GetMeasurments()
if err != nil {
fmt.Println(err.Error())
}
exp.SetMeasurements(measurement, "device1")
}()
wg.Wait()
<-ticker.C
}
}