package main import ( "context" "flag" _ "net/http/pprof" "os" "os/signal" "syscall" "vamicro/config" //"vamicro/extend/util" "vamicro/system-service/broadcast" "vamicro/system-service/controllers" "vamicro/system-service/models" "vamicro/system-service/serf" "vamicro/system-service/service" "vamicro/system-service/sys" versionControlS "vamicro/version-control/service" "basic.com/valib/bhomeclient.git" "basic.com/valib/bhomedbapi.git" "basic.com/valib/logger.git" vaversion "basic.com/valib/version.git" ) var ( procName = service.ProcName proc = &bhomeclient.ProcInfo{ Name: procName, //进程名称 ID: procName, //进程id Info: "", //进程的描述信息,用于区分同一进程名称下多个进程 } env = flag.String("e", "pro", "") ) 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() { // pprof 用于分析性能 //go func() { // logger.Info(http.ListenAndServe("0.0.0.0:6078", nil)) //}() models.Init() defer models.CloseDB() models.GetDB().SetLogger(&serf.DbLogger{}) fm, pubTopics := initFuncMap() ctx, cancel := context.WithCancel(context.Background()) var reg = &bhomeclient.RegisterInfo{ Proc: *proc, Channel: nil, PubTopic: pubTopics, SubTopic: []string{versionControlS.AuthorizationUpdateTopic}, SubNetTopic: []string{}, } q := make(chan os.Signal, 1) signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM) 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) //util.AuthCheck(ctx) //授权检查 go ms.StartServer(fm) go dealSubMsg(ctx, ms) serf.InitBusH(ms) serf.InitAgent(ctx) //go service.WatchEsAndWeedfsIp(ms) go serf.StartSyncSqlToSerf() //go service.StartSyncDev() go broadcast.StartServer() //设备可以被广播搜索 //go service.CollectDeviceInfo(ctx, ms) //go service.WatchAuthSetChange(ms) //根据授权文件监视通道数量变化 //统计系统运行状态 go sys.GatherStat() <-q ms.DeRegister() cancel() ms.Free() } const urlPrefix = "/data/api-v" func initFuncMap() (map[string]bhomeclient.MicroFunc, []string) { funcMap := make(map[string]bhomeclient.MicroFunc) ssController := new(controllers.SysSetController) clusterController := new(controllers.ClusterController) voiceC := new(controllers.VoiceController) dictionaryC := new(controllers.DictionaryController) icController := new(controllers.InfoController) licenseController := new(controllers.LicenseController) syncSWFSNodeController := new(controllers.SyncSWFSNodeController) syncEsNodeController := new(controllers.SyncEsNodeController) funcMap[urlPrefix+"/sysset/alarmServerShow"] = ssController.AlarmServerShow funcMap[urlPrefix+"/sysset/alarmEdit"] = ssController.AlarmEdit funcMap[urlPrefix+"/sysset/videoLenShow"] = ssController.VideoLenShow funcMap[urlPrefix+"/sysset/videoLenEdit"] = ssController.VideoLenEdit funcMap[urlPrefix+"/sysset/getServerInfo"] = ssController.GetServerInfo funcMap[urlPrefix+"/sysset/getDevInfo"] = ssController.GetDevInfo funcMap[urlPrefix+"/sysset/saveDeviceInfo"] = ssController.SaveDevInfo funcMap[urlPrefix+"/sysset/getFullDevInfo"] = ssController.GetFullDevInfo funcMap[urlPrefix+"/sysset/getResourceConfig"] = ssController.GetResourceConfig funcMap[urlPrefix+"/sysset/saveResourceConfig"] = ssController.SaveResourceConfig funcMap[urlPrefix+"/sysset/patchUpdate"] = ssController.PatchUpdateCheck funcMap[urlPrefix+"/sysset/patchUpdatePack"] = ssController.PatchUpdatePack funcMap[urlPrefix+"/sysset/clockInfo"] = ssController.GetClockInfo funcMap[urlPrefix+"/sysset/updateClock"] = ssController.SetSysClock funcMap[urlPrefix+"/sysset/ntpTest"] = ssController.TestNTPServer funcMap[urlPrefix+"/sysset/sysinfo"] = ssController.GetSysInfo funcMap[urlPrefix+"/sysset/sysThresholds"] = ssController.GetSysThresholds funcMap[urlPrefix+"/sysset/reboot"] = ssController.RebootOS funcMap[urlPrefix+"/sysset/rebootTask"] = ssController.GetRebootTask funcMap[urlPrefix+"/sysset/setRebootTask"] = ssController.SetRebootTask funcMap[urlPrefix+"/sysset/getNetWorkCards"] = ssController.GetNetWorkCards funcMap[urlPrefix+"/sysset/setNetWorkCard"] = ssController.SetNetWorkCard funcMap[urlPrefix+"/sysset/setSerName"] = ssController.SetSerName funcMap[urlPrefix+"/sysset/getLangs"] = ssController.GetLangs funcMap[urlPrefix+"/sysset/getLang"] = ssController.GetLang funcMap[urlPrefix+"/sysset/setLang"] = ssController.SetLang funcMap[urlPrefix+"/sysset/getKeyboardLayouts"] = ssController.GetKeyboardLayouts funcMap[urlPrefix+"/sysset/setKeyboardLayout"] = ssController.SetKeyboardLayout funcMap[urlPrefix+"/sysset/downNetCard"] = ssController.DownNetCard funcMap[urlPrefix+"/sysset/upNetCard"] = ssController.UpNetCard funcMap[urlPrefix+"/sysset/getSerInfo"] = ssController.GetSerInfo funcMap[urlPrefix+"/sysset/getNetWorkCardInfo"] = ssController.GetNetWorkCardInfo funcMap[urlPrefix+"/sysset/getWifiList"] = ssController.GetWifiList funcMap[urlPrefix+"/sysset/getDefKeyboardLayout"] = ssController.GetDefKeyboardLayout funcMap[urlPrefix+"/sysset/connectWifi"] = ssController.ConnectWifi funcMap[urlPrefix+"/sysset/disconnectWifi"] = ssController.DisonnectWifi funcMap[urlPrefix+"/sysset/getSysSetting"] = ssController.GetSysSetting funcMap[urlPrefix+"/sysset/updateSysSetting"] = ssController.UpdateSysSetting funcMap[urlPrefix+"/sysset/freedisk"] = ssController.DiskInfo funcMap[urlPrefix+"/sysset/showAuthInfo"] = ssController.ShowAuthInfo funcMap[urlPrefix+"/sysset/setAuthInfo"] = ssController.SetAuthInfo funcMap[urlPrefix+"/sysset/getDeviceInfo"] = ssController.GetDeviceInfo funcMap[urlPrefix+"/sysset/getDeviceAuthInfo"] = ssController.GetDeviceAuthInfo // 设置远程服务器 funcMap[urlPrefix+"/sysset/getRemoteServer"] = ssController.GetRemoteServer funcMap[urlPrefix+"/sysset/setRemoteServer"] = ssController.SetRemoteServer funcMap[urlPrefix+"/cluster/findCluster"] = clusterController.FindCluster funcMap[urlPrefix+"/cluster/create"] = clusterController.Create funcMap[urlPrefix+"/cluster/search"] = clusterController.Search funcMap[urlPrefix+"/cluster/stopSearching"] = clusterController.StopSearching funcMap[urlPrefix+"/cluster/getSearchNodes"] = clusterController.GetSearchNodes funcMap[urlPrefix+"/cluster/joinCluster"] = clusterController.JoinCluster funcMap[urlPrefix+"/cluster/testSyncSql"] = clusterController.TestSyncSql funcMap[urlPrefix+"/cluster/updateClusterName"] = clusterController.UpdateClusterName funcMap[urlPrefix+"/cluster/leave"] = clusterController.Leave funcMap[urlPrefix+"/cluster/findIpByNode"] = clusterController.FindIpByNode sysMenuC := new(controllers.SysMenuController) funcMap["/data/api-u/sysmenus/tree"] = sysMenuC.MenuTree funcMap["/data/api-u/sysmenus/save"] = sysMenuC.Save roleC := new(controllers.SysRoleController) funcMap[urlPrefix+"/role/save"] = roleC.Save funcMap[urlPrefix+"/role/findAll"] = roleC.FindAll userC := new(controllers.UserController) funcMap["/data/api-u/sys/login"] = userC.Login funcMap["/data/api-v/user/login"] = userC.Login funcMap["/data/api-u/sys/logout"] = userC.Logout funcMap["/data/api-u/sys/refresh_token"] = userC.RefreshToken funcMap["/data/api-u/users/add"] = userC.Add funcMap["/data/api-u/users/findAllUser"] = userC.FindAllUser funcMap["/data/api-u/users/findById"] = userC.FindById funcMap["/data/api-u/users/saveAuth"] = userC.SaveAuth funcMap["/data/api-u/users/updatePwd"] = userC.UpdatePwd funcMap["/data/api-u/users/delUser"] = userC.DelUser funcMap["/data/api-u/users/uploadHeadPic"] = userC.UploadHeadPic funcMap["/data/api-u/users/updateProfile"] = userC.UpdateProfile funcMap["/data/api-u/users/defHeadPics"] = userC.DefHeadPics funcMap["/data/api-u/users/profile"] = userC.Profile funcMap[urlPrefix+"/voice/findAll"] = voiceC.FindAll funcMap[urlPrefix+"/voice/add"] = voiceC.Add funcMap[urlPrefix+"/voice/del"] = voiceC.Del funcMap[urlPrefix+"/voice/upload"] = voiceC.Upload funcMap[urlPrefix+"/dictionary/save"] = dictionaryC.Save funcMap[urlPrefix+"/dictionary/findByType"] = dictionaryC.FindByType funcMap[urlPrefix+"/dictionary/findByParentId"] = dictionaryC.FindByParentId funcMap[urlPrefix+"/dictionary/listByType"] = dictionaryC.ListByType funcMap[urlPrefix+"/info/getServerName"] = icController.GetServerName funcMap[urlPrefix+"/license/getRegisterCode"] = licenseController.GetRegisterCode funcMap[urlPrefix+"/license/save"] = licenseController.Save funcMap[urlPrefix+"/license/show"] = licenseController.Show funcMap[urlPrefix+"/swfs/syncSWFSNode"] = syncSWFSNodeController.SyncSWFSNode funcMap[urlPrefix+"/swfs/getSWFSPeers"] = syncSWFSNodeController.GetSWFSPeers funcMap[urlPrefix+"/es/node/synchronizeHosts"] = syncEsNodeController.SynchronizeHosts testController := new(controllers.TestControllers) funcMap[urlPrefix+"/test/createOriginalClusterT"] = testController.CreateOriginalClusterT funcMap[urlPrefix+"/test/addClusterT"] = testController.AddClusterT funcMap[urlPrefix+"/test/exitClusterT"] = testController.ExitClusterT funcMap[urlPrefix+"/test/createServer"] = testController.CreateServer funcMap[urlPrefix+"/test/addServer"] = testController.AddServer funcMap[urlPrefix+"/test/exitServer"] = testController.ExitServer deleteDataController := new(controllers.DeleteDataController) funcMap[urlPrefix+"/clearData/deleteData"] = deleteDataController.DeleteEsData var dac controllers.DevAuthController funcMap[urlPrefix+"/devAuth/authConfig"] = dac.AuthConfig funcMap[urlPrefix+"/devAuth/saveAuthConfig"] = dac.SaveAuthConfig funcMap[urlPrefix+"/devAuth/apply"] = dac.Apply funcMap[urlPrefix+"/devAuth/applyShow"] = dac.ApplyShow funcMap[urlPrefix+"/devAuth/approve"] = dac.Approve funcMap[urlPrefix+"/devAuth/authedList"] = dac.AuthedList var mqttc controllers.MqttController funcMap[urlPrefix+"/mqtt/conf"] = mqttc.GetConfig funcMap[urlPrefix+"/mqtt/saveConf"] = mqttc.SaveConfig var lorac controllers.LoraController funcMap[urlPrefix+"/lora/conf"] = lorac.GetConfig funcMap[urlPrefix+"/lora/saveConf"] = lorac.SaveConf var wific controllers.WifiController funcMap[urlPrefix+"/wifi/conf"] = wific.GetConfig funcMap[urlPrefix+"/wifi/saveConf"] = wific.SaveConf var sic controllers.SysInitController funcMap[urlPrefix+"/sysinit/getInitInfo"] = sic.GetInitInfo funcMap[urlPrefix+"/sysinit/savePassword"] = sic.SavePassword funcMap[urlPrefix+"/sysinit/networkList"] = sic.NetworkList funcMap[urlPrefix+"/sysinit/initNetwork"] = sic.InitNetwork funcMap[urlPrefix+"/sysinit/saveRegInfo"] = sic.SaveRegInfo funcMap[urlPrefix+"/sysinit/getRegInfo"] = sic.GetRegInfo psync := new(controllers.ProxySync) funcMap["/data/system/serf/sync"] = psync.Sync var pubTopics []string for key, _ := range funcMap { pubTopics = append(pubTopics, key) } return funcMap, pubTopics } // 测试接收全网消息 func dealSubMsg(ctx context.Context, ms *bhomeclient.MicroNode) { for { select { case <-ctx.Done(): return case msg := <-ms.SubCh: logger.Debug("recv sub msg topic:", string(msg.Topic), " data:", string(msg.Data)) service.PersistentWrapper(string(msg.Topic), msg.Data) } } }