This commit is contained in:
illustris
2026-03-11 15:01:20 +05:30
commit d8f4a77657
30 changed files with 3164 additions and 0 deletions

66
src/main.go Normal file
View 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)
}
}