package master
|
|
import (
|
"analysis/app"
|
"analysis/logo"
|
"analysis/util"
|
"context"
|
"io/ioutil"
|
|
"basic.com/libgowrapper/sdkstruct.git"
|
)
|
|
func reaper(ctxt context.Context) {
|
pidChan := make(chan int, 1)
|
Reap(pidChan)
|
go waitForRestart(ctxt, pidChan)
|
}
|
|
// Run run
|
func Run(ctx context.Context, configPath string) bool {
|
reaper(ctx)
|
|
rPath := configPath
|
configFile := configPath
|
var fetcher *Fetcher
|
|
fs, _ := ioutil.ReadDir(rPath)
|
for _, file := range fs {
|
if !file.IsDir() {
|
if rPath[len(rPath)-1] != '/' {
|
configFile = rPath + "/" + file.Name()
|
} else {
|
configFile = rPath + file.Name()
|
}
|
|
cfg, err := app.ReadConfig(configFile)
|
if err != nil {
|
logo.Errorln("Run Fetcher Master Read From File: ", configFile, " Config Error: ", err)
|
continue
|
}
|
fetcher = NewFetcher(cfg.SoFile)
|
if fetcher == nil {
|
logo.Errorln("New Fetcher Load so File Funcs Error From File: ", cfg.SoFile)
|
continue
|
}
|
}
|
}
|
if fetcher == nil {
|
logo.Errorln("!!!!!!Read All So File, But Can't Init DB Fetcher")
|
return false
|
}
|
|
logo.Infoln("~~~~~~Created Fetcher, Now Sync From DB")
|
|
// fetcher.fnInitDBAPI(util.FSI.IP, util.FSI.HTTPort, util.FSI.HBPort, util.FSI.DataPort, logo.Infoln)
|
fetcher.fnInitDBAPI("192.168.20.10", util.FSI.HTTPort, util.FSI.HBPort, util.FSI.DataPort, logo.Infoln)
|
sdks := fetcher.fnSDKInfo()
|
|
return manualStart(ctx, sdks, configPath)
|
}
|
|
func manualStart(ctx context.Context, sdks []sdkstruct.SDKInfo, configPath string) bool {
|
rPath := configPath
|
|
for _, v := range sdks {
|
|
file := rPath + v.SdkType + ".json"
|
if rPath[len(rPath)-1] != '/' {
|
file = rPath + "/" + v.SdkType + ".json"
|
}
|
|
cfg, err := app.ReadConfig(file)
|
if err != nil {
|
logo.Errorln("Master Read: ", file, " Config Error: ", err)
|
continue
|
}
|
|
logo.Infoln(file, " CONFIG: ", cfg)
|
|
args := []string{
|
`-role=slave`,
|
"-sdk=" + v.SdkType,
|
"-id=" + v.IpcID,
|
"-" + util.ConfigPath + "=" + file,
|
}
|
|
args = append(args, app.GetParams(util.ConfigPath, file)...)
|
pid, err := runProc(ctx, "./analysis", args, &cfg.Env)
|
|
if err != nil {
|
logo.Errorf("ANALYSIS START SLAVE PROC %s IPC: %s error %+v\n", v.SdkType, v.IpcID, err)
|
}
|
logo.Infof("START SDK %s ID %s PID %d Env: %s\n", v.SdkType, v.IpcID, pid, cfg.Env)
|
}
|
return true
|
|
}
|