From f96944c89d4300b83a75bf7a65c10cfb13edb1a0 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 11:24:47 +0800 Subject: [PATCH 01/63] try to fix java install issue --- backend/scripts/install-java.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index d99b16be..c4138ff2 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -4,7 +4,9 @@ touch /tmp/install-java.lock # install java -apt-get update && apt-get install -y default-jdk --fix-missing +apt-get update +apt-get install -y aptitude +aptitude install -y default-jdk ln -s /usr/bin/java /usr/local/bin/java # unlock From be894bc2193a1244bfdbae1635ca49efd85a00f7 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 11:59:47 +0800 Subject: [PATCH 02/63] try to fix java install issue --- Dockerfile | 2 +- Dockerfile.local | 2 +- backend/scripts/install-java.sh | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 48f41d5b..b257604b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,7 @@ ENV CRAWLAB_IS_DOCKER Y # install packages RUN apt-get update \ - && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget \ + && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget aptitude \ && ln -s /usr/bin/pip3 /usr/local/bin/pip \ && ln -s /usr/bin/python3 /usr/local/bin/python diff --git a/Dockerfile.local b/Dockerfile.local index d49df7db..b4513089 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -28,7 +28,7 @@ ENV DEBIAN_FRONTEND noninteractive # install packages RUN chmod 777 /tmp \ && apt-get update \ - && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget \ + && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget aptitude \ && ln -s /usr/bin/pip3 /usr/local/bin/pip \ && ln -s /usr/bin/python3 /usr/local/bin/python diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index c4138ff2..ccdf9bb3 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -5,7 +5,6 @@ touch /tmp/install-java.lock # install java apt-get update -apt-get install -y aptitude aptitude install -y default-jdk ln -s /usr/bin/java /usr/local/bin/java From 491caf7b7b0c7c8f16d8f3a142ae6df03fea604e Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 13:45:58 +0800 Subject: [PATCH 03/63] try to fix java install issue --- Dockerfile | 5 +++-- Dockerfile.local | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b257604b..80a50c20 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,8 +29,9 @@ ENV DEBIAN_FRONTEND noninteractive ENV CRAWLAB_IS_DOCKER Y # install packages -RUN apt-get update \ - && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget aptitude \ +RUN chmod 777 /tmp \ + && apt-get update \ + && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget \ && ln -s /usr/bin/pip3 /usr/local/bin/pip \ && ln -s /usr/bin/python3 /usr/local/bin/python diff --git a/Dockerfile.local b/Dockerfile.local index b4513089..43cd874c 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -25,10 +25,13 @@ FROM ubuntu:latest # set as non-interactive ENV DEBIAN_FRONTEND noninteractive +# set CRAWLAB_IS_DOCKER +ENV CRAWLAB_IS_DOCKER Y + # install packages RUN chmod 777 /tmp \ && apt-get update \ - && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget aptitude \ + && apt-get install -y curl git net-tools iputils-ping ntp ntpdate python3 python3-pip nginx wget \ && ln -s /usr/bin/pip3 /usr/local/bin/pip \ && ln -s /usr/bin/python3 /usr/local/bin/python From 8407c09b7dc802f90fe818ff867fc503c398d3db Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 13:48:18 +0800 Subject: [PATCH 04/63] try to fix java install issue --- backend/scripts/install-java.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index ccdf9bb3..8558af3a 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -5,7 +5,7 @@ touch /tmp/install-java.lock # install java apt-get update -aptitude install -y default-jdk +apt-get install -y default-jdk ln -s /usr/bin/java /usr/local/bin/java # unlock From 433ec6c03e6ee1049446589f562813b86169d425 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 14:51:58 +0800 Subject: [PATCH 05/63] try to fix java install issue --- backend/scripts/install-java.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index 8558af3a..6bf4edc8 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -4,6 +4,7 @@ touch /tmp/install-java.lock # install java +apt-get clean apt-get update apt-get install -y default-jdk ln -s /usr/bin/java /usr/local/bin/java From a1ae3b04c768412592dd77c8387877a12e19aac8 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 16:28:38 +0800 Subject: [PATCH 06/63] try to fix java install issue --- backend/scripts/install-java.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index 6bf4edc8..f1edb02d 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -4,9 +4,8 @@ touch /tmp/install-java.lock # install java -apt-get clean apt-get update -apt-get install -y default-jdk +apt-get install -y -f default-jdk ln -s /usr/bin/java /usr/local/bin/java # unlock From 1ab1cfdf43a05834edb51457d076e546fe7c08a4 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 17:52:30 +0800 Subject: [PATCH 07/63] try to fix java install issue --- backend/scripts/install-java.sh | 5 ++--- backend/scripts/install-nodejs.sh | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index f1edb02d..b404233b 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -1,11 +1,10 @@ -#!/bin/env bash +#!/bin/bash # lock touch /tmp/install-java.lock # install java -apt-get update -apt-get install -y -f default-jdk +apt-get update && apt-get install -y -f default-jdk ln -s /usr/bin/java /usr/local/bin/java # unlock diff --git a/backend/scripts/install-nodejs.sh b/backend/scripts/install-nodejs.sh index eada900a..8a054b69 100644 --- a/backend/scripts/install-nodejs.sh +++ b/backend/scripts/install-nodejs.sh @@ -1,4 +1,4 @@ -#!/bin/env bash +#!/bin/bash # lock touch /tmp/install-nodejs.lock From c144d04eb6b41fef50bd14b3b94d8158166d0562 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Thu, 5 Mar 2020 21:34:54 +0800 Subject: [PATCH 08/63] try to fix java install issue --- backend/scripts/install-java.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index b404233b..9862fd45 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -4,6 +4,7 @@ touch /tmp/install-java.lock # install java +rm -r /var/lib/apt/lists/* apt-get update && apt-get install -y -f default-jdk ln -s /usr/bin/java /usr/local/bin/java From ecf4cf05de7c4a9fefbc8851fbeaf29d306e69cd Mon Sep 17 00:00:00 2001 From: marvzhang Date: Fri, 6 Mar 2020 08:37:36 +0800 Subject: [PATCH 09/63] updated CHANGELOG --- CHANGELOG-zh.md | 7 +++++++ CHANGELOG.md | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/CHANGELOG-zh.md b/CHANGELOG-zh.md index c28063d6..93fdf266 100644 --- a/CHANGELOG-zh.md +++ b/CHANGELOG-zh.md @@ -1,3 +1,10 @@ +# 0.4.8 (TBC) +### 功能 / 优化 +- **默认禁用教程**. +- **加入相关文档侧边栏**. + +### Bug 修复 + # 0.4.7 (2020-02-24) ### 功能 / 优化 - **更好的支持 Scrapy**. 爬虫识别,`settings.py` 配置,日志级别选择,爬虫选择. [#435](https://github.com/crawlab-team/crawlab/issues/435) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e1e1e52..57e1fb8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 0.4.8 (TBC) +### Features / Enhancement +- **Disabled Tutorial by Default**. +- **Added Related Documentation Sidebar**. + +### Bug Fixes + # 0.4.7 (2020-02-24) ### Features / Enhancement - **Better Support for Scrapy**. Spiders identification, `settings.py` configuration, log level selection, spider selection. [#435](https://github.com/crawlab-team/crawlab/issues/435) From 76b480417e07dbff9ce899ac0f3326f782a81104 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Fri, 6 Mar 2020 09:26:07 +0800 Subject: [PATCH 10/63] try to fix java install issue --- backend/scripts/install-java.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index 9862fd45..d928ae02 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -4,8 +4,9 @@ touch /tmp/install-java.lock # install java -rm -r /var/lib/apt/lists/* -apt-get update && apt-get install -y -f default-jdk +apt-get clean && \ + apt-get update --fix-missing && \ + apt-get install -y --fix-missing default-jdk ln -s /usr/bin/java /usr/local/bin/java # unlock From 1e2733c793a358b68d1b167f2be167411b70bca0 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Fri, 6 Mar 2020 10:06:22 +0800 Subject: [PATCH 11/63] try to fix java install issue --- devops/develop/crawlab-master.yaml | 2 +- devops/develop/crawlab-worker.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/devops/develop/crawlab-master.yaml b/devops/develop/crawlab-master.yaml index 1168c404..a7577213 100644 --- a/devops/develop/crawlab-master.yaml +++ b/devops/develop/crawlab-master.yaml @@ -42,7 +42,7 @@ spec: - name: CRAWLAB_SETTING_ALLOWREGISTER value: "Y" - name: CRAWLAB_SERVER_LANG_NODE - value: "Y" + value: "N" - name: CRAWLAB_SERVER_LANG_JAVA value: "Y" ports: diff --git a/devops/develop/crawlab-worker.yaml b/devops/develop/crawlab-worker.yaml index 096f0ccc..d614e532 100644 --- a/devops/develop/crawlab-worker.yaml +++ b/devops/develop/crawlab-worker.yaml @@ -27,7 +27,7 @@ spec: - name: CRAWLAB_REDIS_ADDRESS value: "redis" - name: CRAWLAB_SERVER_LANG_NODE - value: "Y" + value: "N" - name: CRAWLAB_SERVER_LANG_JAVA value: "Y" \ No newline at end of file From 215c4a72746526a6e0e05dc8fa03bfdb66092560 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Fri, 6 Mar 2020 10:15:46 +0800 Subject: [PATCH 12/63] try to fix java install issue --- backend/scripts/install.sh | 17 +++++++++++++++++ docker_init.sh | 16 +++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 backend/scripts/install.sh diff --git a/backend/scripts/install.sh b/backend/scripts/install.sh new file mode 100644 index 00000000..3579da75 --- /dev/null +++ b/backend/scripts/install.sh @@ -0,0 +1,17 @@ +#/bin/bash + +# install node.js +if [ "${CRAWLAB_SERVER_LANG_NODE}" = "Y" ]; +then + echo "installing node.js" + /bin/sh /app/backend/scripts/install-nodejs.sh + echo "installed node.js" +fi + +# install java +if [ "${CRAWLAB_SERVER_LANG_JAVA}" = "Y" ]; +then + echo "installing java" + /bin/sh /app/backend/scripts/install-java.sh + echo "installed java" +fi diff --git a/docker_init.sh b/docker_init.sh index 19cf8471..dce1137a 100755 --- a/docker_init.sh +++ b/docker_init.sh @@ -22,18 +22,12 @@ fi # start nginx service nginx start -# install languages: Node.js -if [ "${CRAWLAB_SERVER_LANG_NODE}" = "Y" ]; +# install languages +if [ "${CRAWLAB_SERVER_LANG_NODE}" = "Y" ] || [ "${CRAWLAB_SERVER_LANG_JAVA}" = "Y" ]; then - echo "installing node.js" - /bin/sh /app/backend/scripts/install-nodejs.sh >> /var/log/install-nodejs.sh.log 2>&1 & -fi - -# install languages: Java -if [ "${CRAWLAB_SERVER_LANG_JAVA}" = "Y" ]; -then - echo "installing java" - /bin/sh /app/backend/scripts/install-java.sh >> /var/log/install-java.sh.log 2>&1 & + echo "installing languages" + echo "you can view log at /var/log/install.sh.log" + /bin/sh /app/backend/scripts/install.sh >> /var/log/install.sh.log 2>&1 & fi # generate ssh From 0521cd4b63d37c8ead6ca8747e54bfa11a0ed620 Mon Sep 17 00:00:00 2001 From: marvzhang Date: Sat, 7 Mar 2020 10:28:34 +0800 Subject: [PATCH 13/63] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/constants/rpc.go | 1 + backend/constants/system.go | 7 + backend/entity/node.go | 3 + backend/entity/system.go | 3 +- backend/scripts/install-java.sh | 6 + backend/scripts/install-nodejs.sh | 6 + backend/scripts/install.sh | 2 +- backend/services/rpc.go | 54 ++++++ backend/services/system.go | 98 ++++++++++- .../src/components/Node/NodeInstallation.vue | 160 +++++++++++------- frontend/src/i18n/zh.js | 4 + 11 files changed, 273 insertions(+), 71 deletions(-) diff --git a/backend/constants/rpc.go b/backend/constants/rpc.go index 6eebf0d5..a650bcda 100644 --- a/backend/constants/rpc.go +++ b/backend/constants/rpc.go @@ -6,4 +6,5 @@ const ( RpcUninstallDep = "uninstall_dep" RpcGetDepList = "get_dep_list" RpcGetInstalledDepList = "get_installed_dep_list" + RpcGetLang = "get_lang" ) diff --git a/backend/constants/system.go b/backend/constants/system.go index bec8b8c5..03491222 100644 --- a/backend/constants/system.go +++ b/backend/constants/system.go @@ -11,3 +11,10 @@ const ( Nodejs = "node" Java = "java" ) + +const ( + InstallStatusNotInstalled = "not-installed" + InstallStatusInstalling = "installing" + InstallStatusInstallingOther = "installing-other" + InstallStatusInstalled = "installed" +) diff --git a/backend/entity/node.go b/backend/entity/node.go index cf52fafb..ebe2047f 100644 --- a/backend/entity/node.go +++ b/backend/entity/node.go @@ -20,6 +20,9 @@ type NodeMessage struct { // 爬虫相关 SpiderId string `json:"spider_id"` //爬虫ID + // 语言相关 + Lang Lang `json:"lang"` + // 错误相关 Error string `json:"error"` } diff --git a/backend/entity/system.go b/backend/entity/system.go index 4c15cc54..8e174b0e 100644 --- a/backend/entity/system.go +++ b/backend/entity/system.go @@ -19,7 +19,8 @@ type Lang struct { ExecutableName string `json:"executable_name"` ExecutablePaths []string `json:"executable_paths"` DepExecutablePath string `json:"dep_executable_path"` - Installed bool `json:"installed"` + LockPath string `json:"lock_path"` + InstallStatus string `json:"install_status"` } type Dependency struct { diff --git a/backend/scripts/install-java.sh b/backend/scripts/install-java.sh index d928ae02..7cb8972c 100755 --- a/backend/scripts/install-java.sh +++ b/backend/scripts/install-java.sh @@ -1,5 +1,8 @@ #!/bin/bash +# lock global +touch /tmp/install.lock + # lock touch /tmp/install-java.lock @@ -11,3 +14,6 @@ ln -s /usr/bin/java /usr/local/bin/java # unlock rm /tmp/install-java.lock + +# unlock global +rm /tmp/install.lock diff --git a/backend/scripts/install-nodejs.sh b/backend/scripts/install-nodejs.sh index 8a054b69..cf01c7f8 100644 --- a/backend/scripts/install-nodejs.sh +++ b/backend/scripts/install-nodejs.sh @@ -1,5 +1,8 @@ #!/bin/bash +# lock global +touch /tmp/install.lock + # lock touch /tmp/install-nodejs.lock @@ -39,3 +42,6 @@ npm install puppeteer-chromium-resolver crawlab-sdk -g --unsafe-perm=true --regi # unlock rm /tmp/install-nodejs.lock + +# unlock global +rm /tmp/install.lock diff --git a/backend/scripts/install.sh b/backend/scripts/install.sh index 3579da75..cf6bf243 100644 --- a/backend/scripts/install.sh +++ b/backend/scripts/install.sh @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash # install node.js if [ "${CRAWLAB_SERVER_LANG_NODE}" = "Y" ]; diff --git a/backend/services/rpc.go b/backend/services/rpc.go index 66c04369..3afaf7cb 100644 --- a/backend/services/rpc.go +++ b/backend/services/rpc.go @@ -21,6 +21,8 @@ type RpcMessage struct { Result string `json:"result"` } +// ========安装语言======== + func RpcServerInstallLang(msg RpcMessage) RpcMessage { lang := GetRpcParam("lang", msg.Params) if lang == constants.Nodejs { @@ -34,6 +36,7 @@ func RpcClientInstallLang(nodeId string, lang string) (output string, err error) params := map[string]string{} params["lang"] = lang + // 发起 RPC 请求并阻塞,获取服务端数据 data, err := RpcClientFunc(nodeId, constants.RpcInstallLang, params, 600)() if err != nil { return @@ -44,6 +47,41 @@ func RpcClientInstallLang(nodeId string, lang string) (output string, err error) return } +// ========./安装语言======== + +// ========获取语言======== + +func RpcServerGetLang(msg RpcMessage) RpcMessage { + langName := GetRpcParam("lang", msg.Params) + lang := GetLangFromLangNamePlain(langName) + + // 序列化 + resultStr, _ := json.Marshal(lang) + msg.Result = string(resultStr) + return msg +} + +func RpcClientGetLang(nodeId string, langName string) (lang entity.Lang, err error) { + params := map[string]string{} + params["lang"] = langName + + data, err := RpcClientFunc(nodeId, constants.RpcGetLang, params, 10)() + if err != nil { + return + } + + // 反序列化结果 + if err := json.Unmarshal([]byte(data), &lang); err != nil { + return lang, err + } + + return +} + +// ========./获取语言======== + +// ========安装依赖======== + func RpcServerInstallDep(msg RpcMessage) RpcMessage { lang := GetRpcParam("lang", msg.Params) depName := GetRpcParam("dep_name", msg.Params) @@ -69,6 +107,10 @@ func RpcClientInstallDep(nodeId string, lang string, depName string) (output str return } +// ========./安装依赖======== + +// ========卸载依赖======== + func RpcServerUninstallDep(msg RpcMessage) RpcMessage { lang := GetRpcParam("lang", msg.Params) depName := GetRpcParam("dep_name", msg.Params) @@ -94,6 +136,10 @@ func RpcClientUninstallDep(nodeId string, lang string, depName string) (output s return } +// ========./卸载依赖======== + +// ========获取已安装依赖列表======== + func RpcServerGetInstalledDepList(nodeId string, msg RpcMessage) RpcMessage { lang := GetRpcParam("lang", msg.Params) if lang == constants.Python { @@ -125,6 +171,9 @@ func RpcClientGetInstalledDepList(nodeId string, lang string) (list []entity.Dep return } +// ========./获取已安装依赖列表======== + +// RPC 客户端函数 func RpcClientFunc(nodeId string, method string, params map[string]string, timeout int) func() (string, error) { return func() (result string, err error) { // 请求ID @@ -159,10 +208,12 @@ func RpcClientFunc(nodeId string, method string, params map[string]string, timeo } } +// 获取 RPC 参数 func GetRpcParam(key string, params map[string]string) string { return params[key] } +// Object 转化为 String func ObjectToString(params interface{}) string { bytes, _ := json.Marshal(params) return utils.BytesToString(bytes) @@ -174,6 +225,7 @@ func StopRpcService() { IsRpcStopped = true } +// 初始化 RPC 服务 func InitRpcService() error { go func() { for { @@ -213,6 +265,8 @@ func InitRpcService() error { replyMsg = RpcServerInstallLang(msg) } else if msg.Method == constants.RpcGetInstalledDepList { replyMsg = RpcServerGetInstalledDepList(node.Id.Hex(), msg) + } else if msg.Method == constants.RpcGetLang { + replyMsg = RpcServerGetLang(msg) } else { continue } diff --git a/backend/services/system.go b/backend/services/system.go index 285cad5a..dff4d029 100644 --- a/backend/services/system.go +++ b/backend/services/system.go @@ -62,19 +62,48 @@ func GetSystemInfo(nodeId string) (sysInfo entity.SystemInfo, err error) { return } +func getLangList() []entity.Lang { + list := []entity.Lang{ + { + Name: "Python", + ExecutableName: "python", + ExecutablePaths: []string{"/usr/bin/python", "/usr/local/bin/python"}, + DepExecutablePath: "/usr/local/bin/pip", + LockPath: "/tmp/install-python.lock", + }, + { + Name: "Node.js", + ExecutableName: "node", + ExecutablePaths: []string{"/usr/bin/node", "/usr/local/bin/node"}, + DepExecutablePath: "/usr/local/bin/npm", + LockPath: "/tmp/install-nodejs.lock", + }, + { + Name: "Java", + ExecutableName: "java", + ExecutablePaths: []string{"/usr/bin/java", "/usr/local/bin/java"}, + LockPath: "/tmp/install-java.lock", + }, + } + return list +} + // 获取语言列表 func GetLangList(nodeId string) []entity.Lang { - list := []entity.Lang{ - {Name: "Python", ExecutableName: "python", ExecutablePaths: []string{"/usr/bin/python", "/usr/local/bin/python"}, DepExecutablePath: "/usr/local/bin/pip"}, - {Name: "Node.js", ExecutableName: "node", ExecutablePaths: []string{"/usr/bin/node", "/usr/local/bin/node"}, DepExecutablePath: "/usr/local/bin/npm"}, - //{Name: "Java", ExecutableName: "java", ExecutablePaths: []string{"/usr/bin/java", "/usr/local/bin/java"}}, - } + list := getLangList() for i, lang := range list { - list[i].Installed = IsInstalledLang(nodeId, lang) + status, _ := GetLangInstallStatus(nodeId, lang) + list[i].InstallStatus = status } return list } +// 获取语言列表 +func GetLangListPlain() []entity.Lang { + list := getLangList() + return list +} + // 根据语言名获取语言实例 func GetLangFromLangName(nodeId string, name string) entity.Lang { langList := GetLangList(nodeId) @@ -86,6 +115,63 @@ func GetLangFromLangName(nodeId string, name string) entity.Lang { return entity.Lang{} } +// 根据语言名获取语言实例,不包含状态 +func GetLangFromLangNamePlain(name string) entity.Lang { + langList := GetLangListPlain() + for _, lang := range langList { + if lang.ExecutableName == name { + return lang + } + } + return entity.Lang{} +} + +func GetLangInstallStatus(nodeId string, lang entity.Lang) (string, error) { + if IsMasterNode(nodeId) { + lang := GetLangLocal(lang) + return lang.InstallStatus, nil + } else { + lang, err := GetLangRemote(nodeId, lang) + if err != nil { + return "", err + } + return lang.InstallStatus, nil + } +} + +func GetLangLocal(lang entity.Lang) entity.Lang{ + // 检查是否存在执行路径 + for _, p := range lang.ExecutablePaths { + if utils.Exists(p) { + lang.InstallStatus = constants.InstallStatusInstalled + return lang + } + } + + // 检查是否正在安装 + if utils.Exists(lang.LockPath) { + lang.InstallStatus = constants.InstallStatusInstalling + return lang + } + + // 检查其他语言是否在安装 + if utils.Exists("/tmp/install.lock") { + lang.InstallStatus = constants.InstallStatusInstallingOther + return lang + } + + lang.InstallStatus = constants.InstallStatusNotInstalled + return lang +} + +func GetLangRemote(nodeId string, lang entity.Lang) (entity.Lang, error) { + l, err := RpcClientGetLang(nodeId, lang.Name) + if err != nil { + return l, err + } + return l, nil +} + // 是否已安装该依赖 func IsInstalledLang(nodeId string, lang entity.Lang) bool { sysInfo, err := GetSystemInfo(nodeId) diff --git a/frontend/src/components/Node/NodeInstallation.vue b/frontend/src/components/Node/NodeInstallation.vue index 68eb14c7..f2e7b393 100644 --- a/frontend/src/components/Node/NodeInstallation.vue +++ b/frontend/src/components/Node/NodeInstallation.vue @@ -38,65 +38,98 @@ - -