Files
crawlab/backend/services/rpc/cancel_task.go

64 lines
1.4 KiB
Go

package rpc
import (
"crawlab/constants"
"crawlab/entity"
"crawlab/model"
"crawlab/utils"
"errors"
"fmt"
"github.com/globalsign/mgo/bson"
)
type CancelTaskService struct {
msg entity.RpcMessage
}
func (s *CancelTaskService) ServerHandle() (entity.RpcMessage, error) {
taskId := utils.GetRpcParam("task_id", s.msg.Params)
nodeId := utils.GetRpcParam("node_id", s.msg.Params)
if err := CancelTaskLocal(taskId, nodeId); err != nil {
s.msg.Error = err.Error()
return s.msg, err
}
s.msg.Result = "success"
return s.msg, nil
}
func (s *CancelTaskService) ClientHandle() (o interface{}, err error) {
// 发起 RPC 请求,获取服务端数据
_, err = ClientFunc(s.msg)()
if err != nil {
return
}
return
}
func CancelTaskLocal(taskId string, nodeId string) error {
if !utils.TaskExecChanMap.HasChanKey(taskId) {
_ = model.UpdateTaskToAbnormal(bson.ObjectIdHex(nodeId))
return errors.New(fmt.Sprintf("task id (%s) does not exist", taskId))
}
ch := utils.TaskExecChanMap.ChanBlocked(taskId)
ch <- constants.TaskCancel
return nil
}
func CancelTaskRemote(taskId string, nodeId string) (err error) {
params := make(map[string]string)
params["task_id"] = taskId
params["node_id"] = nodeId
s := GetService(entity.RpcMessage{
NodeId: nodeId,
Method: constants.RpcCancelTask,
Params: params,
Timeout: 60,
})
_, err = s.ClientHandle()
if err != nil {
return
}
return
}