zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
version-control/main.go
@@ -1,132 +1,132 @@
package main
import (
   "context"
   "flag"
   "fmt"
   "os"
   "os/signal"
   "sync"
   "syscall"
   "vamicro/config"
   "vamicro/version-control/api"
   "vamicro/version-control/controller"
   "vamicro/version-control/service"
   "basic.com/valib/bhomeclient.git"
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/logger.git"
   "basic.com/valib/version.git"
)
var (
   env      = flag.String("e", "pro", "")
   procName = service.ProcName
   proc     = &bhomeclient.ProcInfo{
      Name: procName, //进程名称
      ID:   procName, //进程id
      Info: "",       //进程的描述信息,用于区分同一进程名称下多个进程
   }
)
func init() {
   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() {
   //防止多进程运行
   lockFile := "/tmp/run/version-control.lock"
   var lock *os.File
   lock, err := os.Create(lockFile)
   if err != nil {
      fmt.Println("create lock file error", err)
      os.Exit(1)
   }
   defer os.Remove(lockFile)
   defer lock.Close()
   err = syscall.Flock(int(lock.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
   if err != nil {
      fmt.Println("report service is running ")
      os.Exit(1)
   }
   defer syscall.Flock(int(lock.Fd()), syscall.LOCK_UN)
   wg := &sync.WaitGroup{}
   q := make(chan os.Signal, 1)
   signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM)
   fm, pubTopics := initFuncMap()
   ctx, cancel := context.WithCancel(context.Background())
   var reg = &bhomeclient.RegisterInfo{
      Proc:     *proc,
      Channel:  nil,
      PubTopic: pubTopics,
      SubTopic: []string{},
   }
   ms, err := bhomeclient.NewMicroNode(ctx, q, config.Server.AnalyServerId, reg, nil)
   if err != nil {
      return
   }
   bhomedbapi.InitGetNetNode(ms.GetLocalNetNodeByTopic)
   bhomedbapi.InitDoReq(ms.RequestOnly)
   bhomedbapi.InitLog(logger.Debug)
   server := api.InitRouter(wg, ms)
   go ms.StartServer(fm)
   go service.SelfUpdateStart(ctx, ms) //自动更新
   go service.NoticeTick(ctx) //更新提醒
   go service.AuthorizationUpdate(ctx, ms) //更新授权
   go service.BakSchedule(ctx)
   <-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...")
   //upgrade.CheckVersion()
   //fmt.Println("appver.BuildTime:", appver.BuildTime, "IvyTest:", IvyTest)
   //ctx, cancel := context.WithCancel(context.Background())
}
const urlPrefix = "/data/api-v"
func initFuncMap() (map[string]bhomeclient.MicroFunc, []string) {
   funcMap := make(map[string]bhomeclient.MicroFunc)
   vController := new(controller.VersionController)
   funcMap[urlPrefix+"/version/check"] = vController.VersionCheck
   funcMap[urlPrefix+"/version/upgrade"] = vController.UpgradeVersion
   funcMap[urlPrefix+"/version/snBus"] = vController.SnWithBus
   var pubTopics []string
   for key, _ := range funcMap {
      pubTopics = append(pubTopics, key)
   }
   return funcMap, pubTopics
}
package main
import (
   "context"
   "flag"
   "fmt"
   "os"
   "os/signal"
   "sync"
   "syscall"
   "vamicro/config"
   "vamicro/version-control/api"
   "vamicro/version-control/controller"
   "vamicro/version-control/service"
   "basic.com/valib/bhomeclient.git"
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/logger.git"
   "basic.com/valib/version.git"
)
var (
   env      = flag.String("e", "pro", "")
   procName = service.ProcName
   proc     = &bhomeclient.ProcInfo{
      Name: procName, //进程名称
      ID:   procName, //进程id
      Info: "",       //进程的描述信息,用于区分同一进程名称下多个进程
   }
)
func init() {
   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() {
   //防止多进程运行
   lockFile := "/tmp/run/version-control.lock"
   var lock *os.File
   lock, err := os.Create(lockFile)
   if err != nil {
      fmt.Println("create lock file error", err)
      os.Exit(1)
   }
   defer os.Remove(lockFile)
   defer lock.Close()
   err = syscall.Flock(int(lock.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
   if err != nil {
      fmt.Println("report service is running ")
      os.Exit(1)
   }
   defer syscall.Flock(int(lock.Fd()), syscall.LOCK_UN)
   wg := &sync.WaitGroup{}
   q := make(chan os.Signal, 1)
   signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM)
   fm, pubTopics := initFuncMap()
   ctx, cancel := context.WithCancel(context.Background())
   var reg = &bhomeclient.RegisterInfo{
      Proc:     *proc,
      Channel:  nil,
      PubTopic: pubTopics,
      SubTopic: []string{},
   }
   ms, err := bhomeclient.NewMicroNode(ctx, q, config.Server.AnalyServerId, reg, nil)
   if err != nil {
      return
   }
   bhomedbapi.InitGetNetNode(ms.GetLocalNetNodeByTopic)
   bhomedbapi.InitDoReq(ms.RequestOnly)
   bhomedbapi.InitLog(logger.Debug)
   server := api.InitRouter(wg, ms)
   go ms.StartServer(fm)
   go service.SelfUpdateStart(ctx, ms) //自动更新
   go service.NoticeTick(ctx) //更新提醒
   go service.AuthorizationUpdate(ctx, ms) //更新授权
   go service.BakSchedule(ctx)
   <-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...")
   //upgrade.CheckVersion()
   //fmt.Println("appver.BuildTime:", appver.BuildTime, "IvyTest:", IvyTest)
   //ctx, cancel := context.WithCancel(context.Background())
}
const urlPrefix = "/data/api-v"
func initFuncMap() (map[string]bhomeclient.MicroFunc, []string) {
   funcMap := make(map[string]bhomeclient.MicroFunc)
   vController := new(controller.VersionController)
   funcMap[urlPrefix+"/version/check"] = vController.VersionCheck
   funcMap[urlPrefix+"/version/upgrade"] = vController.UpgradeVersion
   funcMap[urlPrefix+"/version/snBus"] = vController.SnWithBus
   var pubTopics []string
   for key, _ := range funcMap {
      pubTopics = append(pubTopics, key)
   }
   return funcMap, pubTopics
}