All checks were successful
/ pre-commit (push) Successful in 1m40s
Fixes #7. Signed-off-by: Julien Riou <julien@riou.xyz>
100 lines
2.3 KiB
Go
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())
|
|
}
|