feat: add init
This commit is contained in:
parent
a9106ed363
commit
bcf2699feb
@ -86,16 +86,3 @@ func cleanupSentry(*cli.Context) error {
|
|||||||
}
|
}
|
||||||
return nil
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -18,10 +18,12 @@ import (
|
|||||||
"git.0x7f.app/WOJ/woj-server/internal/web/jwt"
|
"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/metrics"
|
||||||
"git.0x7f.app/WOJ/woj-server/internal/web/router"
|
"git.0x7f.app/WOJ/woj-server/internal/web/router"
|
||||||
|
"github.com/getsentry/sentry-go"
|
||||||
"github.com/samber/do"
|
"github.com/samber/do"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
slog "log"
|
slog "log"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -29,16 +31,22 @@ func main() {
|
|||||||
a.Usage = "woj-server"
|
a.Usage = "woj-server"
|
||||||
a.Commands = []*cli.Command{
|
a.Commands = []*cli.Command{
|
||||||
{
|
{
|
||||||
Name: "web",
|
Name: "server",
|
||||||
Aliases: []string{"w"},
|
Aliases: []string{"s"},
|
||||||
Usage: "start web api server",
|
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",
|
Name: "runner",
|
||||||
Aliases: []string{"r"},
|
Aliases: []string{"r"},
|
||||||
Usage: "start runner",
|
Usage: "start runner",
|
||||||
Action: cmd.PanicWrapper(runRunner),
|
Action: wrap(appRunner.RunRunner),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,22 +91,22 @@ func prepareServices(c *cli.Context) *do.Injector {
|
|||||||
return 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)
|
injector := prepareServices(c)
|
||||||
|
|
||||||
logger := do.MustInvoke[log.Service](injector)
|
logger := do.MustInvoke[log.Service](injector)
|
||||||
defer func() { _ = logger.GetRawLogger().Sync() }()
|
defer func() { _ = logger.GetRawLogger().Sync() }()
|
||||||
logger.GetRawLogger().Info("starting...")
|
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)
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ services:
|
|||||||
healthcheck:
|
healthcheck:
|
||||||
test: [ "CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:8000/health" ]
|
test: [ "CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:8000/health" ]
|
||||||
interval: 5s
|
interval: 5s
|
||||||
command: web
|
command: server
|
||||||
environment:
|
environment:
|
||||||
- REDIS_ADDRESS=cache
|
- REDIS_ADDRESS=cache
|
||||||
- DATABASE_HOST=db
|
- DATABASE_HOST=db
|
||||||
|
@ -23,6 +23,18 @@ import (
|
|||||||
"time"
|
"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 {
|
func RunServer(i *do.Injector) error {
|
||||||
conf := do.MustInvoke[config.Service](i).GetConfig()
|
conf := do.MustInvoke[config.Service](i).GetConfig()
|
||||||
slog := do.MustInvoke[log.Service](i).GetLogger("app.server")
|
slog := do.MustInvoke[log.Service](i).GetLogger("app.server")
|
||||||
|
Loading…
Reference in New Issue
Block a user