package main import ( "context" "encoding/json" "flag" "basic.com/valib/logc.git" "basic.com/valib/logger.git" vaversion "basic.com/valib/version.git" "github.com/gin-gonic/gin" // "net/http" // _ "net/http/pprof" "os" "os/signal" "syscall" "vamicro/api-gateway/auth" "vamicro/api-gateway/client" "vamicro/api-gateway/models" "vamicro/api-gateway/service" "vamicro/api-gateway/traces" "vamicro/config" "vamicro/extend/util" bh "basic.com/valib/c_bhomebus.git/api/bhsgo" bhmsg "basic.com/valib/c_bhomebus.git/proto/source/bhome_msg" ) var ( procName = service.ProcName env = flag.String("e", "pro", "") VaSystemLogTopic = "VaSystemLogSaveTopic" ) // func init() { func sinit() { flag.Parse() //控制台打印版本 vaversion.Usage() config.Init(*env) // 日志初始化 var logFile = config.LogConf.Path + "vamicro-" + procName + ".log" logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge) logger.Info("log init success !") } func main() { // pprof 用于分析性能 //go func() { // logger.Info(http.ListenAndServe("0.0.0.0:6077", nil)) //}() sinit() models.Init() defer models.CloseDB() ctx, cancel := context.WithCancel(context.Background()) defer func() { logInfo2 := logc.VaSystemLog{ HostName: "localhost", ProcName: "smartai", ProcID: os.Getpid(), Level: logc.LevelInfo, Info: "smartai停止", } LogDecoderInfo(ctx, logInfo2) }() q := make(chan os.Signal, 1) signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM) signal.Ignore(syscall.SIGPIPE) client, err := client.NewClient(ctx, q) logger.Debug("client:", client) if err == nil { traces.Init(func(para *logc.LogRegister) { client.PublishNetTimeout(para.Nodes, para.Topic, para.Payload, 1000) }) auth.Oauth2Init() util.AuthCheck(ctx) //授权检查 //记录日志 logInfo := logc.VaSystemLog{ HostName: "localhost", ProcName: "smartai", ProcID: os.Getpid(), Level: logc.LevelInfo, Info: "smartai启动", } LogDecoderInfo(ctx, logInfo) go func() { r := gin.Default() r.Use(auth.AuthHandler()) r.Any("/data/*any", client.AnyRequest) r.Run("0.0.0.0:8888") }() go client.ModuleMapInit() <-q logger.Debug("exit api-gateway") traces.DeInit() client.DeRegister() cancel() client.Free() logger.Debug("Release done") } else { logger.Debug("client is nil") } } // 保存系统日志 func LogDecoderInfo(ctx context.Context, logInfo logc.VaSystemLog) { logger.Debug("start LogDecoderInfo") go func() { logData, _ := json.Marshal(logInfo) pub := bhmsg.MsgPublish{ Topic: []byte(VaSystemLogTopic), Data: logData, } if !bh.Publish(&pub, 1000) { logger.Error("LogDecoderInfo %s failed\n", VaSystemLogTopic) } }() }