feat: add init

This commit is contained in:
Paul Pan 2023-12-19 01:09:02 +08:00
parent a9106ed363
commit bcf2699feb
Signed by: Paul
GPG Key ID: D639BDF5BA578AF4
4 changed files with 41 additions and 34 deletions

View File

@ -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)
}
}

View File

@ -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 {
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)
}
}()
injector := prepareServices(c)
logger := do.MustInvoke[log.Service](injector)
defer func() { _ = logger.GetRawLogger().Sync() }()
logger.GetRawLogger().Info("starting...")
return appServer.RunServer(injector)
return f(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)
}

View File

@ -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

View File

@ -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")