package main
|
|
import (
|
"context"
|
"flag"
|
"fmt"
|
_ "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, "sync-proc-message-to-serf"},
|
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
|
funcMap[urlPrefix+"/cluster/status"] = clusterController.GetClusterStat
|
|
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) {
|
fmt.Println("dealSubMsg")
|
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)
|
}
|
}
|
}
|