From 7b98618068b336a96f134f5dfca54af6ccdf1492 Mon Sep 17 00:00:00 2001 From: baoliang Date: Wed, 3 Apr 2019 11:23:12 +0800 Subject: [PATCH 1/8] change image of shell in readme --- docs/zh_CN/后端部署文档.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/zh_CN/后端部署文档.md b/docs/zh_CN/后端部署文档.md index dfba8a5962..4f4430ba87 100644 --- a/docs/zh_CN/后端部署文档.md +++ b/docs/zh_CN/后端部署文档.md @@ -529,10 +529,14 @@ sh ./bin/escheduler-daemon.sh stop alert-server - 安装 pip install kazoo -- 使用部署用户 sh install.sh 一键部署 - - - 注意:scp_hosts.sh 里 `tar -zxvf $workDir/../escheduler-1.0.0.tar.gz -C $installPath` 中的版本号(1.0.0)需要执行前手动替换成对应的版本号 - +- 一键部署 + + - 将编译完成的escheduler-1.0.0.tar.gz包放在install.sh同级目录下 + + - 注意:scp_hosts.sh 里 `tar -zxvf $workDir/../escheduler-1.0.0.tar.gz -C $installPath` 中的版本号(1.0.0)需要执行前手动替换成对应的版本号 + + - 使用部署用户 sh install.sh + ## 服务监控 monitor_server.py 脚本是监听,master和worker服务挂掉重启的脚本 From 447189622c17f937e529cb49b81e40b3cb41d867 Mon Sep 17 00:00:00 2001 From: baoliang Date: Mon, 8 Apr 2019 11:26:58 +0800 Subject: [PATCH 2/8] fix bug spelling error in process dao --- escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java | 2 +- .../src/main/java/cn/escheduler/server/zk/ZKMasterClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java b/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java index e01150e207..c6164c4523 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java @@ -1272,7 +1272,7 @@ public class ProcessDao extends AbstractBaseDao { return scheduleMapper.queryById(id); } - public List queryNeddFailoverProcessInstances(String host){ + public List queryNeedFailoverProcessInstances(String host){ return processInstanceMapper.queryByHostAndStatus(host, stateArray); } diff --git a/escheduler-server/src/main/java/cn/escheduler/server/zk/ZKMasterClient.java b/escheduler-server/src/main/java/cn/escheduler/server/zk/ZKMasterClient.java index 113ef5de9f..624d0193be 100644 --- a/escheduler-server/src/main/java/cn/escheduler/server/zk/ZKMasterClient.java +++ b/escheduler-server/src/main/java/cn/escheduler/server/zk/ZKMasterClient.java @@ -256,7 +256,7 @@ public class ZKMasterClient extends AbstractZKClient { logger.info("start master failover ..."); - List needFailoverProcessInstanceList = processDao.queryNeddFailoverProcessInstances(masterHost); + List needFailoverProcessInstanceList = processDao.queryNeedFailoverProcessInstances(masterHost); //updateProcessInstance host is null and insert into command for(ProcessInstance processInstance : needFailoverProcessInstanceList){ From c146620435fd87bdca393fd4de38b1ef81c400cd Mon Sep 17 00:00:00 2001 From: baoliang Date: Mon, 8 Apr 2019 11:34:39 +0800 Subject: [PATCH 3/8] revert from upstream dev --- docs/zh_CN/后端部署文档.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/zh_CN/后端部署文档.md b/docs/zh_CN/后端部署文档.md index 6c64f1357b..4559e4b817 100644 --- a/docs/zh_CN/后端部署文档.md +++ b/docs/zh_CN/后端部署文档.md @@ -542,13 +542,9 @@ sh ./bin/escheduler-daemon.sh stop alert-server ``` -- 一键部署 +- 使用部署用户 sh install.sh 一键部署 - - 将编译完成的escheduler-1.0.0.tar.gz包放在install.sh同级目录下 - - - 注意:scp_hosts.sh 里 `tar -zxvf $workDir/../escheduler-1.0.0.tar.gz -C $installPath` 中的版本号(1.0.0)需要执行前手动替换成对应的版本号 - - - 使用部署用户 sh install.sh + - 注意:scp_hosts.sh 里 `tar -zxvf $workDir/../escheduler-1.0.0.tar.gz -C $installPath` 中的版本号(1.0.0)需要执行前手动替换成对应的版本号 ## 服务监控 From 94ea607f06c4c1766709d13a58599b8c7142733e Mon Sep 17 00:00:00 2001 From: baoliang Date: Mon, 8 Apr 2019 14:32:31 +0800 Subject: [PATCH 4/8] fix bug, update action would change the user of definition. --- .../api/controller/ProcessDefinitionController.java | 2 +- .../escheduler/api/service/ProcessDefinitionService.java | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java b/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java index 9cf27a32ed..ec1f38b0ce 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/controller/ProcessDefinitionController.java @@ -127,7 +127,7 @@ public class ProcessDefinitionController extends BaseController{ logger.info("login user {}, update process define, project name: {}, process define name: {}, " + "process_definition_json: {}, desc: {}, locations:{}, connects:{}", loginUser.getUserName(), projectName, name, processDefinitionJson,desc, locations, connects); - Map result = processDefinitionService.updateProccessDefinition(loginUser, projectName, id, name, + Map result = processDefinitionService.updateProcessDefinition(loginUser, projectName, id, name, processDefinitionJson, desc, locations, connects); return returnDataList(result); }catch (Exception e){ diff --git a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java index 1b0d806967..119c840e56 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java @@ -247,9 +247,9 @@ public class ProcessDefinitionService extends BaseDAGService { * @param connects * @return */ - public Map updateProccessDefinition(User loginUser, String projectName, int id, String name, - String processDefinitionJson, String desc, - String locations, String connects) throws JsonProcessingException { + public Map updateProcessDefinition(User loginUser, String projectName, int id, String name, + String processDefinitionJson, String desc, + String locations, String connects) { Map result = new HashMap<>(5); Project project = projectMapper.queryByName(projectName); @@ -284,7 +284,6 @@ public class ProcessDefinitionService extends BaseDAGService { processDefine.setName(name); processDefine.setReleaseState(ReleaseState.OFFLINE); processDefine.setProjectId(project.getId()); - processDefine.setUserId(loginUser.getId()); processDefine.setProcessDefinitionJson(processDefinitionJson); processDefine.setDesc(desc); processDefine.setLocations(locations); From fb19ddce07a714ff4bc569e851120987ffba0f80 Mon Sep 17 00:00:00 2001 From: gongzijian Date: Mon, 8 Apr 2019 15:48:10 +0800 Subject: [PATCH 5/8] update .gitignore --- escheduler-ui/.env | 2 +- escheduler-ui/install.sh | 161 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+), 1 deletion(-) create mode 100755 escheduler-ui/install.sh diff --git a/escheduler-ui/.env b/escheduler-ui/.env index 5cd5ba736d..d4dcd9f473 100644 --- a/escheduler-ui/.env +++ b/escheduler-ui/.env @@ -1,6 +1,6 @@ # 后端接口地址 -API_BASE = http://192.168.xx.xx:12345 +API_BASE = http://192.168.220.154:12345 # 本地开发如需ip访问项目把"#"号去掉 #DEV_HOST = 192.168.xx.xx diff --git a/escheduler-ui/install.sh b/escheduler-ui/install.sh new file mode 100755 index 0000000000..314b408edb --- /dev/null +++ b/escheduler-ui/install.sh @@ -0,0 +1,161 @@ + +#!/bin/bash +echo "escheduler-ui-install.sh" + +# 配置前端访问端口 +esc_proxy="8888" + +# 配置代理后端接口 +esc_proxy_port="http://192.168.220.154:12345" + +# 当前路径 +esc_basepath=$(cd `dirname $0`; pwd) + +# 本机ip +esc_ipaddr='172.0.0.1' +esc_ipaddr=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}') + +# 区分版本 +version=`cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'` + + +echo "========================================================================配置信息=======================================================================" + +echo "前端访问端口:${esc_proxy}" +echo "后端代理接口地址:${esc_proxy_port}" +echo "静态文件地址:${esc_basepath}/dist" +echo "当前路径:${esc_basepath}" +echo "本机ip:${esc_ipaddr}" + +echo "========================================================================配置信息=======================================================================" +echo "" + + +# 创建文件并配置nginx +eschedulerConf(){ + +E_host='$host' +E_remote_addr='$remote_addr' +E_proxy_add_x_forwarded_for='$proxy_add_x_forwarded_for' +E_http_upgrade='$http_upgrade' +echo " + server { + listen $esc_proxy;# 访问端口 + server_name localhost; + #charset koi8-r; + #access_log /var/log/nginx/host.access.log main; + location / { + root ${esc_basepath}/dist; # 静态文件目录 + index index.html index.html; + } + location /escheduler { + proxy_pass ${esc_proxy_port}; # 接口地址 + proxy_set_header Host $E_host; + proxy_set_header X-Real-IP $E_remote_addr; + proxy_set_header x_real_ipP $E_remote_addr; + proxy_set_header remote_addr $E_remote_addr; + proxy_set_header X-Forwarded-For $E_proxy_add_x_forwarded_for; + proxy_http_version 1.1; + proxy_connect_timeout 4s; + proxy_read_timeout 30s; + proxy_send_timeout 12s; + proxy_set_header Upgrade $E_http_upgrade; + proxy_set_header Connection "upgrade"; + } + #error_page 404 /404.html; + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + } +" >> /etc/nginx/conf.d/escheduler.conf + +} + + +centos7(){ +# nginx是否安装 +sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm +sudo yum install -y nginx +echo "nginx 安装成功" + +# 配置nginx +eschedulerConf + +# 解决 0.0.0.0:8888 问题 +yum -y install policycoreutils-python +semanage port -a -t http_port_t -p tcp $esc_proxy + +# 开放前端访问端口 +firewall-cmd --zone=public --add-port=$esc_proxy/tcp --permanent + +# 重启防火墙 +firewall-cmd --reload + +# 启动nginx +systemctl start nginx + +# 调整SELinux的参数 +sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config +# 临时生效 +setenforce 0 + +} + + +centos6(){ +# yum +E_basearch='$basearch' +E_releasever='$releasever' +echo " +[nginx] +name=nginx repo +baseurl=http://nginx.org/packages/centos/$E_releasever/$E_basearch/ +gpgcheck=0 +enabled=1 +" >> /etc/yum.repos.d/nginx.repo + +# install nginx +yum install nginx -y + +# 配置nginx +eschedulerConf + +# 防火墙 +E_iptables=`lsof -i:$esc_proxy | wc -l` +if [ "$E_iptables" -gt "0" ];then +# 已开启端口防火墙重启 +service iptables restart +else +# 未开启防火墙添加端口再重启 +iptables -I INPUT 5 -i eth0 -p tcp --dport $esc_proxy -m state --state NEW,ESTABLISHED -j ACCEPT +service iptables save +service iptables restart +fi + +# start +/etc/init.d/nginx start + +# 调整SELinux的参数 +sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config + +# 临时生效 +setenforce 0 + +} + +# centos 6 +if [[ $version -eq 6 ]]; then + centos6 +fi + +# centos 7 +if [[ $version -eq 7 ]]; then + centos7 +fi + + +echo "请浏览器访问:http://${esc_ipaddr}:${esc_proxy}" + From e0ede9ef6e87d1240a2514e222162dfa258776c2 Mon Sep 17 00:00:00 2001 From: gongzijian Date: Mon, 8 Apr 2019 16:53:35 +0800 Subject: [PATCH 6/8] edit install file name --- escheduler-ui/{install.sh => install(线上环境).sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename escheduler-ui/{install.sh => install(线上环境).sh} (100%) diff --git a/escheduler-ui/install.sh b/escheduler-ui/install(线上环境).sh similarity index 100% rename from escheduler-ui/install.sh rename to escheduler-ui/install(线上环境).sh From e8bb86e26c9866d3887d79e10d743164bc4a7a83 Mon Sep 17 00:00:00 2001 From: gongzijian Date: Tue, 9 Apr 2019 09:14:20 +0800 Subject: [PATCH 7/8] edit ico --- escheduler-ui/src/font/demo_index.html | 23 ++++++++++++++++++ escheduler-ui/src/font/iconfont.css | 16 +++++++----- escheduler-ui/src/font/iconfont.eot | Bin 20780 -> 20944 bytes escheduler-ui/src/font/iconfont.js | 2 +- escheduler-ui/src/font/iconfont.svg | 3 +++ escheduler-ui/src/font/iconfont.ttf | Bin 20612 -> 20776 bytes escheduler-ui/src/font/iconfont.woff | Bin 12432 -> 12524 bytes escheduler-ui/src/font/iconfont.woff2 | Bin 10744 -> 10872 bytes .../js/conf/home/pages/dag/_source/dag.scss | 11 +++++++++ .../pages/dag/_source/plugIn/jsPlumbHandle.js | 6 ++++- .../home/pages/dag/_source/plugIn/util.js | 15 +++++++++--- 11 files changed, 64 insertions(+), 12 deletions(-) diff --git a/escheduler-ui/src/font/demo_index.html b/escheduler-ui/src/font/demo_index.html index 1671172845..af55eca421 100644 --- a/escheduler-ui/src/font/demo_index.html +++ b/escheduler-ui/src/font/demo_index.html @@ -252,6 +252,12 @@
&#xe60c;
+
  • + +
    icon_禁止
    +
    &#xe63e;
    +
  • +
  • 1116加载中
    @@ -881,6 +887,15 @@
  • +
  • + +
    + icon_禁止 +
    +
    .icon-icon_jinzhi +
    +
  • +
  • @@ -1575,6 +1590,14 @@
    #icon-tuichufffpx
  • +
  • + +
    icon_禁止
    +
    #icon-icon_jinzhi
    +
  • +
  • _FB@{l8iMr#*!_4cai?)Jfri?{j?#O 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 N_7n<#050ZIrvUemGf4md delta 11927 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 diff --git a/escheduler-ui/src/font/iconfont.woff2 b/escheduler-ui/src/font/iconfont.woff2 index 0f0d5dfe389c346c3cfaec7a0730060f06e64b39..5bc8deb74132b43776974a74e9995597ad3a6afa 100644 GIT binary patch literal 10872 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 diff --git a/escheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss b/escheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss index b1f6f52e79..e159231fd0 100644 --- a/escheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss +++ b/escheduler-ui/src/js/conf/home/pages/dag/_source/dag.scss @@ -391,6 +391,17 @@ svg path:hover { text-align: center; margin-left: -100px; } + .ban-p { + position: absolute; + left: -4px; + top: 36px; + z-index: 21; + i { + font-size: 18px; + color: #ff0000; + cursor: pointer; + } + } .state-p { width: 20px; height: 20px; diff --git a/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js b/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js index d342b3f8f0..b40007953c 100644 --- a/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js +++ b/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js @@ -192,9 +192,13 @@ JSP.prototype.jsonHandle = function ({ largeJson, locations }) { y: locations[v.id]['y'], targetarr: locations[v.id]['targetarr'], isAttachment: this.config.isAttachment, - taskType: v.type + taskType: v.type, + runFlag:v.runFlag })) + // ban icon + console.log($(`#${v.id}`).html()) + // contextmenu event $(`#${v.id}`).on('contextmenu', e => { this.tasksContextmenu(e) diff --git a/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js b/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js index b2b44f4e48..36a94b14d5 100644 --- a/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js +++ b/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js @@ -17,6 +17,7 @@ import _ from 'lodash' import $ from 'jquery' +import i18n from '@/module/i18n' import store from '@/conf/home/store' /** @@ -39,16 +40,22 @@ const saveTargetarr = (valId, domId) => { /** * 返回节点html */ -const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType }) => { +const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType,runFlag }) => { let tpl = `` tpl += `
    ` tpl += `
    ` - tpl += `
    ` - tpl += `
    ` - tpl += `${name}` + tpl += `
    ` + tpl += `
    ` + tpl += `${name}` tpl += `
    ` tpl += `
    ` + tpl += `
    ` + if (runFlag === 'FORBIDDEN') { + tpl += `` + } + tpl += `
    ` tpl += `
    ` + return tpl } From f9b1ef0bf5744e3f5d48de09574e5a212848d129 Mon Sep 17 00:00:00 2001 From: gongzijian Date: Tue, 9 Apr 2019 09:32:54 +0800 Subject: [PATCH 8/8] http://jr.analysys.cn/browse/AR-100 --- .../pages/dag/_source/formModel/formModel.vue | 12 ++++++-- .../home/pages/dag/_source/plugIn/util.js | 29 +++++++++++-------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue b/escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue index 70a3d24e0b..47cb5a5921 100644 --- a/escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue +++ b/escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue @@ -178,7 +178,7 @@ import mShell from './tasks/shell' import mSpark from './tasks/spark' import mPython from './tasks/python' - import { isNameExDag } from './../plugIn/util' + import { isNameExDag,rtBantpl } from './../plugIn/util' import JSP from './../plugIn/jsPlumbHandle' import mProcedure from './tasks/procedure' import mDependent from './tasks/dependent' @@ -383,7 +383,15 @@ }) } }, - watch: {}, + watch: { + runFlag(val){ + let dom = $(`#${this.id}`).find('.ban-p') + dom.html('') + if (val === 'FORBIDDEN') { + dom.append(rtBantpl()) + } + } + }, created () { // Unbind copy and paste events JSP.removePaste() diff --git a/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js b/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js index 36a94b14d5..5cc1f9fcf4 100644 --- a/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js +++ b/escheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js @@ -21,7 +21,7 @@ import i18n from '@/module/i18n' import store from '@/conf/home/store' /** - * 节点,转数组 + * Node, to array */ const rtTargetarrArr = (id) => { let a = $(`#${id}`).attr('data-targetarr') @@ -29,7 +29,7 @@ const rtTargetarrArr = (id) => { } /** - * 存储节点id到targetarr + * Store node id to targetarr */ const saveTargetarr = (valId, domId) => { let $target = $(`#${domId}`) @@ -37,8 +37,12 @@ const saveTargetarr = (valId, domId) => { $target.attr('data-targetarr', targetStr) } +const rtBantpl = () => { + return `` +} + /** - * 返回节点html + * return node html */ const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType,runFlag }) => { let tpl = `` @@ -51,7 +55,7 @@ const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType,runFlag tpl += `
    ` tpl += `
    ` if (runFlag === 'FORBIDDEN') { - tpl += `` + tpl += rtBantpl() } tpl += `
    ` tpl += `` @@ -60,7 +64,7 @@ const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType,runFlag } /** - * 获取所有tasks节点 + * Get all tasks nodes */ const tasksAll = () => { let a = [] @@ -78,8 +82,8 @@ const tasksAll = () => { } /** - * 判断 name 是否在当前的dag图中 - * rely dom / backfill dom元素 回填 + * Determine if name is in the current dag map + * rely dom / backfill */ const isNameExDag = (name, rely) => { if (rely === 'dom') { @@ -90,17 +94,17 @@ const isNameExDag = (name, rely) => { } /** - * 更改svg线条颜色 + * Change svg line color */ const setSvgColor = (e, color) => { - // 遍历 清除所有颜色 + // Traverse clear all colors $('.jtk-connector').each((i, o) => { _.map($(o)[0].childNodes, v => { $(v).attr('fill', '#555').attr('stroke', '#555').attr('stroke-width', 2) }) }) - // 给选择的添加颜色 + // Add color to the selection _.map($(e.canvas)[0].childNodes, (v, i) => { $(v).attr('fill', color).attr('stroke', color) if ($(v).attr('class')) { @@ -110,7 +114,7 @@ const setSvgColor = (e, color) => { } /** - * 获取所有节点id + * Get all node ids */ const allNodesId = () => { let idArr = [] @@ -134,5 +138,6 @@ export { tasksAll, isNameExDag, setSvgColor, - allNodesId + allNodesId, + rtBantpl }