Initial commit

Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
Julien Riou 2025-08-21 16:22:03 +02:00
commit ef9aca1f3b
Signed by: jriou
GPG key ID: 9A099EDA51316854
26 changed files with 1668 additions and 0 deletions

89
src/cmd/collerd/main.go Normal file
View file

@ -0,0 +1,89 @@
package main
import (
"flag"
"log/slog"
"os"
"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")
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)
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())
}