From bcf2699febc8e328b92ef344d82e50d746631634 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Tue, 19 Dec 2023 01:09:02 +0800 Subject: [PATCH] feat: add init --- cmd/common.go | 13 ---------- cmd/woj/woj.go | 48 ++++++++++++++++++++--------------- docker-compose.yml | 2 +- internal/app/server/server.go | 12 +++++++++ 4 files changed, 41 insertions(+), 34 deletions(-) diff --git a/cmd/common.go b/cmd/common.go index e66eb88..dada415 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -86,16 +86,3 @@ func cleanupSentry(*cli.Context) error { } return nil } - -func PanicWrapper(f func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - defer func() { - if r := recover(); r != nil { - sentry.CaptureException(r.(error)) - sentry.Flush(time.Second * 2) - log.Printf("Panic Captured: %v", r) - } - }() - return f(c) - } -} diff --git a/cmd/woj/woj.go b/cmd/woj/woj.go index ca0a3e0..42fb36a 100644 --- a/cmd/woj/woj.go +++ b/cmd/woj/woj.go @@ -18,10 +18,12 @@ import ( "git.0x7f.app/WOJ/woj-server/internal/web/jwt" "git.0x7f.app/WOJ/woj-server/internal/web/metrics" "git.0x7f.app/WOJ/woj-server/internal/web/router" + "github.com/getsentry/sentry-go" "github.com/samber/do" "github.com/urfave/cli/v2" slog "log" "os" + "time" ) func main() { @@ -29,16 +31,22 @@ func main() { a.Usage = "woj-server" a.Commands = []*cli.Command{ { - Name: "web", - Aliases: []string{"w"}, + Name: "server", + Aliases: []string{"s"}, Usage: "start web api server", - Action: cmd.PanicWrapper(runServer), + Action: wrap(appServer.RunServer), + }, + { + Name: "init", + Aliases: []string{"i"}, + Usage: "init database", + Action: wrap(appServer.RunServerInit), }, { Name: "runner", Aliases: []string{"r"}, Usage: "start runner", - Action: cmd.PanicWrapper(runRunner), + Action: wrap(appRunner.RunRunner), }, } @@ -83,22 +91,22 @@ func prepareServices(c *cli.Context) *do.Injector { return injector } -func runServer(c *cli.Context) error { - injector := prepareServices(c) +func wrap(f func(i *do.Injector) error) func(*cli.Context) error { + return func(c *cli.Context) error { + defer func() { + if r := recover(); r != nil { + sentry.CaptureException(r.(error)) + sentry.Flush(time.Second * 2) + slog.Printf("Panic Captured: %v", r) + } + }() - logger := do.MustInvoke[log.Service](injector) - defer func() { _ = logger.GetRawLogger().Sync() }() - logger.GetRawLogger().Info("starting...") + injector := prepareServices(c) - return appServer.RunServer(injector) -} - -func runRunner(c *cli.Context) error { - injector := prepareServices(c) - - logger := do.MustInvoke[log.Service](injector) - defer func() { _ = logger.GetRawLogger().Sync() }() - logger.GetRawLogger().Info("starting...") - - return appRunner.RunRunner(injector) + logger := do.MustInvoke[log.Service](injector) + defer func() { _ = logger.GetRawLogger().Sync() }() + logger.GetRawLogger().Info("starting...") + + return f(injector) + } } diff --git a/docker-compose.yml b/docker-compose.yml index c68eb99..92641ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: healthcheck: test: [ "CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:8000/health" ] interval: 5s - command: web + command: server environment: - REDIS_ADDRESS=cache - DATABASE_HOST=db diff --git a/internal/app/server/server.go b/internal/app/server/server.go index 0679a36..0ffd98e 100644 --- a/internal/app/server/server.go +++ b/internal/app/server/server.go @@ -23,6 +23,18 @@ import ( "time" ) +func RunServerInit(i *do.Injector) error { + slog := do.MustInvoke[log.Service](i).GetLogger("app.server") + + // Migrate and shutdown database + err := do.MustInvoke[db.Service](i).Close() + if err != nil { + slog.Warn("Database Close Failed", zap.Error(err)) + } + + return err +} + func RunServer(i *do.Injector) error { conf := do.MustInvoke[config.Service](i).GetConfig() slog := do.MustInvoke[log.Service](i).GetLogger("app.server")