Files
crawlab/backend/services/rpc/uninstall_dep.go
2020-03-11 10:22:39 +08:00

97 lines
2.1 KiB
Go

package rpc
import (
"crawlab/constants"
"crawlab/entity"
"crawlab/utils"
"errors"
"fmt"
"github.com/apex/log"
"os/exec"
"runtime/debug"
)
type UninstallDepService struct {
msg entity.RpcMessage
}
func (s *UninstallDepService) ServerHandle() (entity.RpcMessage, error) {
lang := utils.GetRpcParam("lang", s.msg.Params)
depName := utils.GetRpcParam("dep_name", s.msg.Params)
if err := UninstallDepLocal(lang, depName); err != nil {
s.msg.Error = err.Error()
return s.msg, err
}
s.msg.Result = "success"
return s.msg, nil
}
func (s *UninstallDepService) ClientHandle() (o interface{}, err error) {
// 发起 RPC 请求,获取服务端数据
_, err = ClientFunc(s.msg)()
if err != nil {
return
}
return
}
func UninstallDepLocal(lang string, depName string) error {
if lang == constants.Python {
output, err := UninstallPythonDepLocal(depName)
if err != nil {
log.Debugf(output)
return err
}
} else if lang == constants.Nodejs {
output, err := UninstallNodejsDepLocal(depName)
if err != nil {
log.Debugf(output)
return err
}
} else {
return errors.New(fmt.Sprintf("%s is not implemented", lang))
}
return nil
}
func UninstallPythonDepLocal(depName string) (string, error) {
cmd := exec.Command("pip", "uninstall", "-y", depName)
outputBytes, err := cmd.Output()
if err != nil {
log.Errorf(string(outputBytes))
log.Errorf(err.Error())
debug.PrintStack()
return fmt.Sprintf("error: %s", err.Error()), err
}
return string(outputBytes), nil
}
func UninstallNodejsDepLocal(depName string) (string, error) {
cmd := exec.Command("npm", "uninstall", depName, "-g")
outputBytes, err := cmd.Output()
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return fmt.Sprintf("error: %s", err.Error()), err
}
return string(outputBytes), nil
}
func UninstallDepRemote(nodeId string, lang string, depName string) (err error) {
params := make(map[string]string)
params["lang"] = lang
params["dep_name"] = depName
s := GetService(entity.RpcMessage{
NodeId: nodeId,
Method: constants.RpcUninstallDep,
Params: params,
Timeout: 300,
})
_, err = s.ClientHandle()
if err != nil {
return
}
return
}