feat: simplify SOP to immediate-effect configuration
This commit is contained in:
28
main.go
28
main.go
@@ -17,6 +17,7 @@ import (
|
||||
"git.iwork-ai.com/xdc/iqudo-top1/internal/httpserver"
|
||||
"git.iwork-ai.com/xdc/iqudo-top1/internal/logger"
|
||||
"git.iwork-ai.com/xdc/iqudo-top1/internal/migration"
|
||||
"git.iwork-ai.com/xdc/iqudo-top1/internal/multitable"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
@@ -26,6 +27,9 @@ var migrationFiles embed.FS
|
||||
//go:embed web/dist/*
|
||||
var frontendFiles embed.FS
|
||||
|
||||
//go:embed sdk/dist/*
|
||||
var sdkFiles embed.FS
|
||||
|
||||
func main() {
|
||||
environment := flag.String("env", "", "runtime environment: development, test, prod")
|
||||
configDir := flag.String("config-dir", "configs", "configuration directory")
|
||||
@@ -55,13 +59,29 @@ func main() {
|
||||
if err := auth.Seed(db, cfg.Seed); err != nil {
|
||||
log.Fatal("seed administrator", zap.Error(err))
|
||||
}
|
||||
workerDone := make(chan struct{})
|
||||
workerCtx, stopWorker := context.WithCancel(context.Background())
|
||||
if cfg.MultiTable.Enabled {
|
||||
worker := multitable.NewWorker(db, cfg.MultiTable, log)
|
||||
go func() {
|
||||
defer close(workerDone)
|
||||
log.Info("multitable synchronization started", zap.String("worker", worker.String()))
|
||||
worker.Run(workerCtx)
|
||||
}()
|
||||
} else {
|
||||
close(workerDone)
|
||||
}
|
||||
|
||||
frontend, err := fs.Sub(frontendFiles, "web/dist")
|
||||
if err != nil {
|
||||
log.Fatal("load embedded frontend", zap.Error(err))
|
||||
}
|
||||
sdk, err := fs.Sub(sdkFiles, "sdk/dist")
|
||||
if err != nil {
|
||||
log.Fatal("load embedded sdk", zap.Error(err))
|
||||
}
|
||||
authService := auth.NewService(db, cfg.Auth)
|
||||
handler := httpserver.New(db, authService, frontend, log, cfg.App.Env)
|
||||
handler := httpserver.New(db, authService, frontend, sdk, log, cfg.App.Env)
|
||||
server := &http.Server{Addr: cfg.Server.Address(), Handler: handler, ReadTimeout: cfg.Server.ReadTimeout, WriteTimeout: cfg.Server.WriteTimeout}
|
||||
|
||||
go func() {
|
||||
@@ -74,10 +94,16 @@ func main() {
|
||||
stop := make(chan os.Signal, 1)
|
||||
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-stop
|
||||
stopWorker()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), cfg.Server.ShutdownTimeout)
|
||||
defer cancel()
|
||||
if err := server.Shutdown(ctx); err != nil {
|
||||
log.Error("graceful shutdown failed", zap.Error(err))
|
||||
}
|
||||
select {
|
||||
case <-workerDone:
|
||||
case <-ctx.Done():
|
||||
log.Warn("multitable worker did not stop before shutdown timeout")
|
||||
}
|
||||
log.Info("server stopped")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user