mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-24 17:41:03 +01:00
97 lines
2.1 KiB
Go
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
|
|
}
|