ing
This commit is contained in:
parent
e9be910057
commit
b4a05fc617
|
@ -9,9 +9,9 @@
|
|||
"key": "95d8bcdc739741dca74c4a0e489e0774"
|
||||
},
|
||||
"paths": {
|
||||
"bin": "bin",
|
||||
"config": "config",
|
||||
"pid": "pid",
|
||||
"root": ""
|
||||
"bin": "/bin",
|
||||
"config": "/config",
|
||||
"pid": "/pid",
|
||||
"root": "/project/overFlow/probe"
|
||||
}
|
||||
}
|
2
main.go
2
main.go
|
@ -62,7 +62,7 @@ func main() {
|
|||
var instance interface{}
|
||||
|
||||
go func() {
|
||||
if ooccp.ProbeStateTypeNotAuthorized != config.Config.Probe.State() {
|
||||
if ooccp.ProbeStateTypeNotAuthorized == config.Config.Probe.State() {
|
||||
var err error
|
||||
instance = auth.New()
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ func (pm *probeManagers) Start() error {
|
|||
}
|
||||
|
||||
probeRPCRegistry := crr.NewRPCRegistry()
|
||||
|
||||
centralProbeClient := oopccp.New(probeRPCRegistry)
|
||||
centralDataClient := oopccd.New()
|
||||
centralClients := map[string]oogwc.Client{
|
||||
|
|
|
@ -1,11 +1,21 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
cda "git.loafle.net/commons_go/di/annotation"
|
||||
cdr "git.loafle.net/commons_go/di/registry"
|
||||
"git.loafle.net/commons_go/logging"
|
||||
crc "git.loafle.net/commons_go/rpc/client"
|
||||
oopcc "git.loafle.net/overflow/overflow_probe_container/client"
|
||||
"git.loafle.net/overflow/overflow_probes/config"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -17,9 +27,9 @@ type ContainerService struct {
|
|||
}
|
||||
|
||||
type containerState struct {
|
||||
socketName string
|
||||
pid int
|
||||
client crc.Client
|
||||
pid int
|
||||
port int
|
||||
client crc.Client
|
||||
}
|
||||
|
||||
func (cs *ContainerService) Call(name string, result interface{}, method string, params ...interface{}) error {
|
||||
|
@ -39,7 +49,15 @@ func (cs *ContainerService) Send(name string, method string, params ...interface
|
|||
}
|
||||
|
||||
func (cs *ContainerService) GetClient(name string) (crc.Client, error) {
|
||||
return nil, nil
|
||||
cState, ok := cs.clients[name]
|
||||
if !ok {
|
||||
if err := cs.runProcess(name); nil != err {
|
||||
return nil, err
|
||||
}
|
||||
cState, _ = cs.clients[name]
|
||||
}
|
||||
|
||||
return cState.client, nil
|
||||
}
|
||||
|
||||
func (cs *ContainerService) Connect(name string) error {
|
||||
|
@ -53,47 +71,90 @@ func (cs *ContainerService) runProcess(name string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// runCmd := config.Config.Paths["root"] + "/" + config.Config.Paths["bin"] + "/" + name + "/start"
|
||||
cmdPath := path.Join(config.Config.Paths["root"], config.Config.Paths["bin"], name+".sh")
|
||||
pidPath := path.Join(config.Config.Paths["root"], config.Config.Paths["pid"], name+".pid")
|
||||
|
||||
// sockFile := uuid.NewV4().String()
|
||||
// sockArg := fmt.Sprintf("-sock=\"%s\"", sockFile)
|
||||
cmd := exec.Command(cmdPath, pidPath)
|
||||
if err := cmd.Start(); nil != err {
|
||||
logging.Logger().Error(fmt.Sprintf("Probe: To run container(%s) failed err %v", name, err))
|
||||
return err
|
||||
}
|
||||
|
||||
// cmd := exec.Command(runCmd, sockArg)
|
||||
// if err := cmd.Start(); nil != err {
|
||||
// logging.Logger().Error(fmt.Sprintf("Probe: To run container(%s) failed err %v", name, err))
|
||||
// return err
|
||||
// }
|
||||
// time.Sleep(time.Duration(time.Second * 2))
|
||||
port, err := watchPidFileCreate(pidPath, time.Duration(time.Second*2))
|
||||
if nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
// cs := &containerState{
|
||||
// socketName: sockFile,
|
||||
// pid: cmd.Process.Pid,
|
||||
// }
|
||||
// cs.client = oopmcc.New(sockFile, nil)
|
||||
// // write pid file
|
||||
// cs.containerClients[name] = cs
|
||||
clientAddr := fmt.Sprintf("localhost:%d", port)
|
||||
client := oopcc.New(clientAddr, nil)
|
||||
if err := client.Connect(); nil != err {
|
||||
cmd.Process.Kill()
|
||||
return err
|
||||
}
|
||||
|
||||
cState := &containerState{
|
||||
pid: cmd.Process.Pid,
|
||||
port: port,
|
||||
client: client,
|
||||
}
|
||||
|
||||
cs.clients[name] = cState
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cs *ContainerService) checkProcess(name string) bool {
|
||||
return false
|
||||
cState, ok := cs.clients[name]
|
||||
if !ok || nil == cState || nil == cState.client {
|
||||
return false
|
||||
}
|
||||
|
||||
_, err := os.FindProcess(cState.pid)
|
||||
if nil != err {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (cs *ContainerService) killProcess(name string) error {
|
||||
// cs, ok := cs.containerClients[name]
|
||||
// if !ok || nil == cs || nil == cs.client {
|
||||
// return fmt.Errorf("Probe: Container[%s] is not exist", name)
|
||||
// }
|
||||
cState, ok := cs.clients[name]
|
||||
if !ok || nil == cState || nil == cState.client {
|
||||
return fmt.Errorf("Probe: Container[%s] is not exist", name)
|
||||
}
|
||||
|
||||
// p, err := os.FindProcess(cs.pid)
|
||||
// if nil != err {
|
||||
// return err
|
||||
// }
|
||||
// if err = p.Kill(); nil != err {
|
||||
// return err
|
||||
// }
|
||||
// // remove pid file
|
||||
p, err := os.FindProcess(cState.pid)
|
||||
if nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = p.Kill(); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func watchPidFileCreate(pidFilePath string, waitTime time.Duration) (int, error) {
|
||||
startTime := time.Now()
|
||||
|
||||
for {
|
||||
if _, err := os.Stat(pidFilePath); err == nil {
|
||||
buf, err := ioutil.ReadFile(pidFilePath)
|
||||
if nil != err {
|
||||
return 0, err
|
||||
}
|
||||
portNumber, err := strconv.ParseInt(string(buf), 10, 32)
|
||||
if nil != err {
|
||||
return 0, err
|
||||
}
|
||||
return int(portNumber), nil
|
||||
}
|
||||
|
||||
if time.Since(startTime) > waitTime {
|
||||
return 0, fmt.Errorf("Probe: pid file not exist")
|
||||
}
|
||||
|
||||
time.Sleep(time.Duration(time.Millisecond * 100))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user