squash merge from dev branch
This commit is contained in:
92
main.go
Normal file
92
main.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
||||
"github.com/nshttpd/mikrotik-exporter/exporter"
|
||||
"github.com/prometheus/common/log"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// single device can be defined via CLI flags, mutliple via config file.
|
||||
var (
|
||||
device = flag.String("device", "", "single device to monitor")
|
||||
address = flag.String("address", "", "address of the device to monitor")
|
||||
user = flag.String("user", "", "user for authentication with single device")
|
||||
password = flag.String("password", "", "password for authentication for single device")
|
||||
cfgFile = flag.String("config", "", "config file for multiple devices")
|
||||
logLevel = flag.String("log-level", "info", "log level")
|
||||
port = flag.String("port", ":9090", "port number to listen on")
|
||||
currentLogLevel = zap.NewAtomicLevelAt(zap.InfoLevel)
|
||||
)
|
||||
|
||||
// (nshttpd) TODO figure out if we need a caching option
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
// override default log level of info
|
||||
if *logLevel != "info" {
|
||||
err := currentLogLevel.UnmarshalText([]byte(*logLevel))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// setup logger
|
||||
l, err := newLogger(currentLogLevel)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer l.Sync()
|
||||
|
||||
var cfg exporter.Config
|
||||
if *cfgFile == "" {
|
||||
if err := cfg.FromFlags(device, address, user, password); err != nil {
|
||||
l.Sugar().Errorw("could not create configuration",
|
||||
"error", err,
|
||||
)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
l.Sugar().Info("config file not supported yet")
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
cfg.Logger = l.Sugar()
|
||||
|
||||
cfg.Metrics = exporter.PromMetrics{}
|
||||
mh, err := cfg.Metrics.SetupPrometheus(*cfg.Logger)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
s := &exporter.Server{}
|
||||
|
||||
if err := s.Run(cfg, mh, port); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
sigchan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigchan, os.Interrupt, os.Kill)
|
||||
<-sigchan
|
||||
cfg.Logger.Info("stopping server")
|
||||
err = s.Stop()
|
||||
if err != nil {
|
||||
cfg.Logger.Errorw("error while stopping service",
|
||||
"error", err,
|
||||
)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
os.Exit(0)
|
||||
|
||||
}
|
||||
|
||||
func newLogger(lvl zap.AtomicLevel) (*zap.Logger, error) {
|
||||
config := zap.NewProductionConfig()
|
||||
config.Level = lvl
|
||||
return config.Build()
|
||||
}
|
||||
Reference in New Issue
Block a user