fixed worker node failure issue

This commit is contained in:
marvzhang
2020-07-08 11:36:35 +08:00
parent 8399597d2f
commit f09d9b3e6e
8 changed files with 153 additions and 74 deletions

View File

@@ -76,6 +76,8 @@ func GetService(msg entity.RpcMessage) Service {
return &GetInstalledDepsService{msg: msg}
case constants.RpcCancelTask:
return &CancelTaskService{msg: msg}
case constants.RpcGetSystemInfoService:
return &GetSystemInfoService{msg: msg}
}
return nil
}

View File

@@ -0,0 +1,67 @@
package rpc
import (
"crawlab/constants"
"crawlab/entity"
"crawlab/model"
"encoding/json"
)
type GetSystemInfoService struct {
msg entity.RpcMessage
}
func (s *GetSystemInfoService) ServerHandle() (entity.RpcMessage, error) {
sysInfo, err := GetSystemInfoServiceLocal()
if err != nil {
s.msg.Error = err.Error()
return s.msg, err
}
// 序列化
resultStr, _ := json.Marshal(sysInfo)
s.msg.Result = string(resultStr)
return s.msg, nil
}
func (s *GetSystemInfoService) ClientHandle() (o interface{}, err error) {
// 发起 RPC 请求,获取服务端数据
s.msg, err = ClientFunc(s.msg)()
if err != nil {
return o, err
}
var output entity.SystemInfo
if err := json.Unmarshal([]byte(s.msg.Result), &output); err != nil {
return o, err
}
o = output
return
}
func GetSystemInfoServiceLocal() (sysInfo entity.SystemInfo, err error) {
// 获取环境信息
sysInfo, err = model.GetLocalSystemInfo()
if err != nil {
return sysInfo, err
}
return sysInfo, nil
}
func GetSystemInfoServiceRemote(nodeId string) (sysInfo entity.SystemInfo, err error) {
params := make(map[string]string)
params["node_id"] = nodeId
s := GetService(entity.RpcMessage{
NodeId: nodeId,
Method: constants.RpcGetSystemInfoService,
Params: params,
Timeout: 60,
})
o, err := s.ClientHandle()
if err != nil {
return
}
sysInfo = o.(entity.SystemInfo)
return
}

View File

@@ -0,0 +1,62 @@
package rpc
import (
"crawlab/constants"
"crawlab/entity"
"crawlab/model"
"crawlab/utils"
"github.com/globalsign/mgo/bson"
"github.com/spf13/viper"
"path/filepath"
)
type RemoveSpiderService struct {
msg entity.RpcMessage
}
func (s *RemoveSpiderService) ServerHandle() (entity.RpcMessage, error) {
spiderId := utils.GetRpcParam("spider_id", s.msg.Params)
if err := RemoveSpiderServiceLocal(spiderId); err != nil {
s.msg.Error = err.Error()
return s.msg, err
}
s.msg.Result = "success"
return s.msg, nil
}
func (s *RemoveSpiderService) ClientHandle() (o interface{}, err error) {
// 发起 RPC 请求,获取服务端数据
_, err = ClientFunc(s.msg)()
if err != nil {
return
}
return
}
func RemoveSpiderServiceLocal(spiderId string) error {
// 移除本地的爬虫目录
spider, err := model.GetSpider(bson.ObjectIdHex(spiderId))
if err != nil {
return err
}
path := filepath.Join(viper.GetString("spider.path"), spider.Name)
utils.RemoveFiles(path)
return nil
}
func RemoveSpiderServiceRemote(spiderId string, nodeId string) (err error) {
params := make(map[string]string)
params["spider_id"] = spiderId
s := GetService(entity.RpcMessage{
NodeId: nodeId,
Method: constants.RpcRemoveSpider,
Params: params,
Timeout: 60,
})
_, err = s.ClientHandle()
if err != nil {
return
}
return
}