All checks were successful
/ pre-commit (push) Successful in 1m17s
Fixes #40. Signed-off-by: Julien Riou <julien@riou.xyz>
101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
"git.riou.xyz/jriou/coller/internal"
|
|
"git.riou.xyz/jriou/coller/server"
|
|
)
|
|
|
|
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")
|
|
jsonFormat := flag.Bool("json", false, "Print logs in JSON format")
|
|
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
|
|
}
|
|
|
|
var logger *slog.Logger
|
|
if *jsonFormat {
|
|
logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: level}))
|
|
} else {
|
|
logger = slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level}))
|
|
}
|
|
|
|
if *configFileName != "" {
|
|
err = internal.ReadConfig(*configFileName, config)
|
|
if err != nil {
|
|
return internal.ReturnError(logger, "could not parse configuration file", err)
|
|
}
|
|
logger.Debug("configuration file parsed", slog.Any("file", *configFileName))
|
|
}
|
|
|
|
if err = config.Check(); err != nil {
|
|
return internal.ReturnError(logger, "invalid configuration", err)
|
|
}
|
|
|
|
db, err := server.NewDatabase(logger, config)
|
|
if err != nil {
|
|
return internal.ReturnError(logger, "could not connect to the database", err)
|
|
}
|
|
|
|
srv, err := server.NewServer(logger, db, config, AppVersion)
|
|
if err != nil {
|
|
return internal.ReturnError(logger, "could not create server", err)
|
|
}
|
|
|
|
srv.SetEncryptionKeyLength(config.EncryptionKeyLength)
|
|
|
|
if config.EnableMetrics {
|
|
reg := prometheus.NewRegistry()
|
|
metrics, err := server.NewMetrics(logger, reg, config, db)
|
|
if err != nil {
|
|
return internal.ReturnError(logger, "could not register metrics", err)
|
|
}
|
|
srv.SetMetrics(metrics)
|
|
}
|
|
|
|
err = srv.Start()
|
|
if err != nil {
|
|
return internal.ReturnError(logger, "could not start server", err)
|
|
}
|
|
|
|
return internal.RC_OK
|
|
}
|
|
|
|
func main() {
|
|
os.Exit(handleMain())
|
|
}
|