diff --git a/main.go b/main.go index fedb3d87042a393b6c5fc77cf9e52f0949e014dc..dd0f50bf9d368ae97e9df8d826293dcfb38439ad 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "embed" "errors" "flag" + "fmt" "net/http" "os" "time" @@ -88,37 +89,19 @@ func wrapMiddleware(hdlr http.Handler, sessions session.Provider, logger kitlog. return log.Request(auth.Require(hdlr, authFailed, sessions), logger) } -func main() { - dbPath := flag.String("db", "vino.sqlite", "Path to database file") - dumpPath := flag.String("dump", "dumped", "Path to dump of old database") - listenAddr := flag.String("listen", "127.0.0.1:7878", "Listening address") - debug := flag.Bool("debug", false, "Enable debug logging") - - flag.Parse() - +func setupLogger(debug bool) kitlog.Logger { logger := kitlog.NewLogfmtLogger(kitlog.NewSyncWriter(os.Stdout)) logger = kitlog.With(logger, "ts", kitlog.DefaultTimestampUTC) filter := level.AllowInfo() - if *debug { + if debug { filter = level.AllowDebug() } - logger = level.NewFilter(logger, filter) - - level.Info(logger). - Log("commit", commitHash, "build", buildTime) - - ctx, done := context.WithCancel(context.Background()) - defer done() - - db, err := storage.Open(ctx, *dbPath, *dumpPath, logger) - if err != nil { - level.Error(logger).Log("error", err, "msg", "can't open DB") - os.Exit(1) - } - defer db.Close() + return level.NewFilter(logger, filter) +} +func registerHTTPHandlers(ctx context.Context, db query.DBTX, logger kitlog.Logger) error { logged404 := log.Request(http.HandlerFunc(http.NotFound), kitlog.With(logger, "code", 404)) http.Handle("/favicon.ico", logged404) @@ -128,8 +111,7 @@ func main() { sessions, err := session.NewProvider(ctx, query.New(db)) if err != nil { - level.Error(logger).Log("error", err, "msg", "can't initialize session provider") - os.Exit(1) + return fmt.Errorf("setting up session provider: %w", err) } handler := Handler{ @@ -157,6 +139,37 @@ func main() { index.ServeHTTP(w, r) }) + return nil +} + +func main() { + dbPath := flag.String("db", "vino.sqlite", "Path to database file") + dumpPath := flag.String("dump", "dumped", "Path to dump of old database") + listenAddr := flag.String("listen", "127.0.0.1:7878", "Listening address") + debug := flag.Bool("debug", false, "Enable debug logging") + + flag.Parse() + + logger := setupLogger(*debug) + + level.Info(logger).Log("commit", commitHash, "build", buildTime) + + ctx, done := context.WithCancel(context.Background()) + defer done() + + db, err := storage.Open(ctx, *dbPath, *dumpPath, logger) + if err != nil { + level.Error(logger).Log("error", err, "msg", "can't open DB") + os.Exit(1) + } + defer db.Close() + + err = registerHTTPHandlers(ctx, db, logger) + if err != nil { + level.Error(logger).Log("error", err) + os.Exit(1) + } + var g run.Group g.Add(run.SignalHandler(ctx, os.Interrupt)) @@ -167,21 +180,18 @@ func main() { } g.Add(func() error { - level.Info(logger). - Log("addr", "http://"+*listenAddr, "msg", "starting http server") + level.Info(logger).Log("addr", "http://"+*listenAddr, "msg", "starting http server") return srv.ListenAndServe() }, func(err error) { - level.Info(logger). - Log("error", err, "msg", "shutting down HTTP listener") + level.Info(logger).Log("error", err, "msg", "shutting down HTTP listener") shutdownCtx, done := context.WithTimeout(context.Background(), 15*time.Second) defer done() err = srv.Shutdown(shutdownCtx) if err != nil { - level.Error(logger). - Log("error", err, "msg", "clean shut down failed") + level.Error(logger).Log("error", err, "msg", "clean shut down failed") } }) }