package main import ( "basic.com/valib/logger.git" "bee-config/api" "bee-config/models" "bee-config/monitor" "context" "flag" "os" "os/signal" "path" "path/filepath" "sync" "syscall" ) func init() { flag.Parse() executable := filepath.Base(os.Args[0]) dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if nil != err { dir = "./" } dir = path.Join(dir, "logs") if _, err := os.Stat(dir); os.IsNotExist(err) { _ = os.MkdirAll(dir, os.ModePerm) } var logFile = path.Join(dir, executable + ".log") logger.InitLogger(logFile, logger.InfoLevel, 128, 10, 3) logger.Info("log init success !") } func main() { models.Init() defer models.CloseDB() wg := &sync.WaitGroup{} q := make(chan os.Signal, 1) signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM) ctx, cancel := context.WithCancel(context.Background()) monitor.Init(ctx, wg) server := api.InitRouter(wg) <-q logger.Info("user signalled...") // shutdown http service gracefully if err := server.Shutdown(ctx); nil != err { logger.Fatal("server shutdown failed, err:", err) } cancel() wg.Wait() logger.Info("all sub threads exited...") }