Initial commit
Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
commit
ef9aca1f3b
26 changed files with 1668 additions and 0 deletions
89
src/cmd/collerd/main.go
Normal file
89
src/cmd/collerd/main.go
Normal 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())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue