coller/src/cmd/collerd/main.go
Julien Riou 0ce540e92d
All checks were successful
/ pre-commit (push) Successful in 1m40s
feat: Add metrics
Fixes #7.

Signed-off-by: Julien Riou <julien@riou.xyz>
2025-08-26 09:26:15 +02:00

100 lines
2.3 KiB
Go

package main
import (
"flag"
"log/slog"
"os"
"git.riou.xyz/jriou/coller/internal"
"git.riou.xyz/jriou/coller/server"
"github.com/prometheus/client_golang/prometheus"
)
var (
AppName = "collerd"
AppVersion string
GoVersion string
GitCommit string
)
func handleMain() int {
var err error
config := server.NewConfig()
version := flag.Bool("version", false, "Print version and exit")
quiet := flag.Bool("quiet", false, "Log errors only")
verbose := flag.Bool("verbose", false, "Print more logs")
debug := flag.Bool("debug", false, "Print even more logs")
configFileName := flag.String("config", "", "Configuration file name")
flag.Parse()
if *version {
internal.ShowVersion(AppName, AppVersion, GitCommit, GoVersion)
return internal.RC_OK
}
var level slog.Level
if *debug {
level = slog.LevelDebug
}
if *verbose {
level = slog.LevelInfo
}
if *quiet {
level = slog.LevelError
}
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level}))
if *configFileName != "" {
err = internal.ReadConfig(*configFileName, config)
if err != nil {
slog.Error("cannot parse configuration file", slog.Any("error", err))
return internal.RC_ERROR
}
logger.Debug("configuration file parsed", slog.Any("file", *configFileName))
}
if err = config.Check(); err != nil {
logger.Error("invalid configuration", slog.Any("error", err))
return internal.RC_ERROR
}
db, err := server.NewDatabase(logger, config)
if err != nil {
slog.Error("could not connect to the database", slog.Any("error", err))
return internal.RC_ERROR
}
srv, err := server.NewServer(logger, db, config, AppVersion)
if err != nil {
logger.Error("could not create server", slog.Any("error", err))
return internal.RC_ERROR
}
srv.SetIDLength(config.IDLength)
srv.SetPasswordLength(config.PasswordLength)
if config.EnableMetrics {
reg := prometheus.NewRegistry()
metrics, err := server.NewMetrics(logger, reg, config, db)
if err != nil {
logger.Error("could not register metrics", slog.Any("error", err))
return internal.RC_ERROR
}
srv.SetMetrics(metrics)
}
err = srv.Start()
if err != nil {
logger.Error("could not start server", slog.Any("error", err))
return internal.RC_ERROR
}
return internal.RC_OK
}
func main() {
os.Exit(handleMain())
}