feat: simplify SOP to immediate-effect configuration

This commit is contained in:
Eric 1549169735@qq.com
2026-08-18 16:27:02 +08:00
parent c5ab886b70
commit 8de48fb05e
150 changed files with 6764 additions and 1626 deletions

28
main.go
View File

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