| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- package main
- import (
- "fwh-toolbox-server/cache"
- "fwh-toolbox-server/config"
- "fwh-toolbox-server/controllers"
- "fwh-toolbox-server/database"
- "fwh-toolbox-server/repositories"
- "fwh-toolbox-server/repositories/api/fwh_pro"
- "fwh-toolbox-server/task"
- "fwh-toolbox-server/utils/casdoor"
- "fwh-toolbox-server/utils/minio"
- "log"
- "net/http"
- "os"
- "os/signal"
- // "fwh-toolbox-server/database"
- _ "fwh-toolbox-server/docs" // swag 自动生成文档
- "fwh-toolbox-server/logger"
- "fwh-toolbox-server/routes"
- "fwh-toolbox-server/scheduler"
- "fwh-toolbox-server/networkEvents"
- "github.com/gofiber/fiber/v2"
- "github.com/gofiber/swagger"
- "github.com/hibiken/asynq"
- "github.com/hibiken/asynqmon"
- "go.uber.org/zap"
- "golang.org/x/sys/unix"
- )
- func main() {
- var cfg *config.Config
- var err error
- cfg, err = config.LoadConfig()
- if err != nil {
- panic(err)
- }
- err = logger.Init(cfg.App.AppEnv)
- if err != nil {
- panic(err)
- }
- defer logger.Log.Sync() // 退出前同步zap缓冲区
- // 初始化数据库
- err = database.Init(&cfg.App)
- if err != nil {
- zap.L().Error("database init failed.", zap.String("err", err.Error()))
- panic(err)
- }
- // 初始化缓存
- cache.Init(cfg.App.RedisAddr)
- // 初始化Minio
- minio.InitClient(&cfg.App)
- // 初始化FwhApi
- repositories.FwhHttpInit(&cfg.FwhApi)
- // 初始化PlaneApi
- repositories.PlaneHttpInit(&cfg.PlaneApi)
- // 初始化PlaneWebApi
- repositories.PlaneWebHttpInit(&cfg.PlaneWebApi)
- // 初始化计划任务
- scheduler.Init()
- // 初始化任务
- task.InitTask(task.TaskRedisOpt{
- Addr: cfg.App.RedisAddr,
- DB: 12,
- })
- // 初始化Casdoor
- casdoor.InitAuthConfig()
- // 初始化FWH MQTT客户端
- repositories.FwhMqttInit(&cfg.FwhMqtt)
- // repositories.FwhMqttFaultRecordChargeChannel(context.Background(), "10060005A03X25160385")
- app := fiber.New()
- app.Use(func(c *fiber.Ctx) error {
- logger.Log.Info("请求", zap.String("path", c.Path()))
- return c.Next()
- })
- // 注册 Swagger 路由
- app.Get("/swagger/*", swagger.HandlerDefault)
- routes.Setup(app)
- // 初始化 AI Chat (ACP Client)
- controllers.InitAIChat(".")
- // 启动第一个监听
- go func() {
- if err := networkEvents.InitEvio(); err != nil {
- zap.L().Error("networkEvents init failed.", zap.String("err", err.Error()))
- panic(err)
- }
- }()
- // 启动Asynqmon界面
- go func() {
- h := asynqmon.New(asynqmon.Options{
- RootPath: "/asynqmon", // RootPath specifies the root for asynqmon app
- RedisConnOpt: asynq.RedisClientOpt{Addr: cfg.App.RedisAddr, DB: 12},
- })
- // Note: We need the tailing slash when using net/http.ServeMux.
- http.Handle("/", h)
- listenAddr := "0.0.0.0:" + cfg.App.AsynqmonPort
- // Go to http://localhost:8080/asynqmon to see asynqmon homepage.
- err = http.ListenAndServe(listenAddr, nil)
- if err != nil {
- zap.L().Error("Asynqmon port listening failed.", zap.String("err", err.Error()))
- panic(err)
- }
- log.Println("asynqmon shutdown finished")
- zap.L().Info("Asynqmon started successfully.", zap.String("addr", listenAddr))
- }()
- // 提前登录FWH
- err = fwh_pro.Login()
- if err != nil {
- zap.L().Error("FWH login failed.", zap.String("err", err.Error()))
- // panic(err)
- }
- // TEST
- // err = task.CreateTaskSimCardCollect()
- // if err != nil {
- // zap.L().Error("CreateTaskSimCardCollect failed.", zap.String("err", err.Error()), zap.String("time(UTC)", time.Now().UTC().Format(time.DateTime)))
- // }
- go func() {
- sigs := make(chan os.Signal, 1)
- signal.Notify(sigs, unix.SIGTERM, unix.SIGINT)
- <-sigs
- log.Println("fiber shutdown")
- app.Shutdown()
- }()
- err = app.Listen("localhost:" + cfg.App.AppPort)
- if err != nil {
- zap.L().Error("Port listening failed.", zap.String("err", err.Error()))
- panic(err)
- }
- }
|