init
This commit is contained in:
66
src/main.go
Normal file
66
src/main.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
|
||||
"pve_local_exporter/internal/collector"
|
||||
"pve_local_exporter/internal/config"
|
||||
)
|
||||
|
||||
var version string
|
||||
|
||||
func main() {
|
||||
cfg := config.Parse()
|
||||
|
||||
if cfg.ShowVersion {
|
||||
fmt.Println(version)
|
||||
return
|
||||
}
|
||||
|
||||
level := slog.LevelInfo
|
||||
switch strings.ToUpper(cfg.LogLevel) {
|
||||
case "DEBUG":
|
||||
level = slog.LevelDebug
|
||||
case "WARNING", "WARN":
|
||||
level = slog.LevelWarn
|
||||
case "ERROR", "CRITICAL":
|
||||
level = slog.LevelError
|
||||
}
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: level})))
|
||||
|
||||
reg := prometheus.NewRegistry()
|
||||
c := collector.New(cfg)
|
||||
reg.MustRegister(c)
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
|
||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Write([]byte(`<html><body><a href="/metrics">Metrics</a></body></html>`))
|
||||
})
|
||||
|
||||
addr := fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)
|
||||
server := &http.Server{Addr: addr, Handler: mux}
|
||||
|
||||
sigCh := make(chan os.Signal, 1)
|
||||
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-sigCh
|
||||
slog.Info("shutting down")
|
||||
server.Close()
|
||||
}()
|
||||
|
||||
log.Printf("listening on %s", addr)
|
||||
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user