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)
|
}
|
|
}()
|
}
|