From f5afff56c4b82e201e5d06f05547ea6f021de2a1 Mon Sep 17 00:00:00 2001 From: tjq Date: Sun, 21 Mar 2021 19:18:22 +0800 Subject: [PATCH] fix: execute in local when there is no address info for one app --- .../main/java/tech/powerjob/common/response/AskResponse.java | 1 + .../remote/server/redirector/DesignateServerAspect.java | 5 +++++ .../src/main/resources/static/js/8.js | 2 +- .../src/main/resources/static/js/app.js | 4 ++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/powerjob-common/src/main/java/tech/powerjob/common/response/AskResponse.java b/powerjob-common/src/main/java/tech/powerjob/common/response/AskResponse.java index 7abff41a..f61f2024 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/response/AskResponse.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/response/AskResponse.java @@ -23,6 +23,7 @@ public class AskResponse implements PowerSerializable { /* - 使用 Object 会报错:java.lang.ClassCastException: scala.collection.immutable.HashMap cannot be cast to XXX,只能自己序列化反序列化了 - 嵌套类型(比如 Map),如果B也是个复杂对象,那么反序列化后B的类型为 LinkedHashMap... 处理比较麻烦(转成JSON再转回来) + - 考虑到多语言通讯,data 必须使用 JSON 序列化为字节数组 */ private byte[] data; diff --git a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/redirector/DesignateServerAspect.java b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/redirector/DesignateServerAspect.java index a5bf16e4..2d9278ce 100644 --- a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/redirector/DesignateServerAspect.java +++ b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/redirector/DesignateServerAspect.java @@ -77,6 +77,11 @@ public class DesignateServerAspect { AppInfoDO appInfo = appInfoRepository.findById(appId).orElseThrow(() -> new PowerJobException("can't find app info")); String targetServer = appInfo.getCurrentServer(); + // 目标IP为空,本地执行 + if (StringUtils.isEmpty(targetServer)) { + return point.proceed(); + } + // 目标IP与本地符合则本地执行 if (Objects.equals(targetServer, AkkaStarter.getActorSystemAddress())) { return point.proceed(); diff --git a/powerjob-server/powerjob-server-starter/src/main/resources/static/js/8.js b/powerjob-server/powerjob-server-starter/src/main/resources/static/js/8.js index bdc39eb4..93c0d7ee 100644 --- a/powerjob-server/powerjob-server-starter/src/main/resources/static/js/8.js +++ b/powerjob-server/powerjob-server-starter/src/main/resources/static/js/8.js @@ -20,7 +20,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/asyncToGenerator */ \"./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! regenerator-runtime/runtime.js */ \"./node_modules/_regenerator-runtime@0.13.7@regenerator-runtime/runtime.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _common_TimeExpressionValidator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/TimeExpressionValidator */ \"./src/components/common/TimeExpressionValidator.vue\");\n\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"JobManager\",\n components: {\n TimeExpressionValidator: _common_TimeExpressionValidator__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n data: function data() {\n return {\n modifiedJobFormVisible: false,\n // 新建任务对象\n modifiedJobForm: {\n id: undefined,\n jobName: \"\",\n jobDescription: \"\",\n appId: this.$store.state.appInfo.id,\n jobParams: \"\",\n timeExpressionType: \"\",\n timeExpression: \"\",\n executeType: \"\",\n processorType: \"\",\n processorInfo: \"\",\n maxInstanceNum: 0,\n concurrency: 5,\n instanceTimeLimit: 0,\n instanceRetryNum: 0,\n taskRetryNum: 1,\n minCpuCores: 0,\n minMemorySpace: 0,\n minDiskSpace: 0,\n enable: true,\n designatedWorkers: \"\",\n maxWorkerCount: 0,\n notifyUserIds: []\n },\n // 任务查询请求对象\n jobQueryContent: {\n appId: this.$store.state.appInfo.id,\n index: 0,\n pageSize: 10,\n jobId: undefined,\n keyword: undefined\n },\n // 任务列表(查询结果),包含index、pageSize、totalPages、totalItems、data(List类型)\n jobInfoPageResult: {\n pageSize: 10,\n totalItems: 0,\n data: []\n },\n // 时间表达式选择类型\n timeExpressionTypeOptions: [{\n key: \"API\",\n label: \"API\"\n }, {\n key: \"CRON\",\n label: \"CRON\"\n }, {\n key: \"FIXED_RATE\",\n label: this.$t('message.fixRate')\n }, {\n key: \"FIXED_DELAY\",\n label: this.$t('message.fixDelay')\n }, {\n key: \"WORKFLOW\",\n label: this.$t('message.workflow')\n }],\n // 处理器类型\n processorTypeOptions: [{\n key: \"BUILT_IN\",\n label: \"Built-in\"\n }, {\n key: \"External\",\n label: this.$t('message.javaContainer')\n }],\n // {key: \"SHELL\", label: \"SHELL\"}, {key: \"PYTHON\", label: \"PYTHON\"}\n // 执行方式类型\n executeTypeOptions: [{\n key: \"STANDALONE\",\n label: this.$t('message.standalone')\n }, {\n key: \"BROADCAST\",\n label: this.$t('message.broadcast')\n }, {\n key: \"MAP\",\n label: this.$t('message.map')\n }, {\n key: \"MAP_REDUCE\",\n label: this.$t('message.mapReduce')\n }],\n // 用户列表\n userList: [],\n // 时间表达式校验窗口\n timeExpressionValidatorVisible: false\n };\n },\n methods: {\n // 保存变更,包括新增和修改\n saveJob: function saveJob() {\n var _this = this;\n\n return Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _this.axios.post(\"/job/save\", _this.modifiedJobForm);\n\n case 2:\n _this.modifiedJobFormVisible = false;\n\n _this.$message.success(_this.$t('message.success'));\n\n _this.listJobInfos();\n\n case 5:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }))();\n },\n // 列出符合当前搜索条件的任务\n listJobInfos: function listJobInfos() {\n var that = this;\n this.axios.post(\"/job/list\", this.jobQueryContent).then(function (res) {\n that.jobInfoPageResult = res;\n });\n },\n // 修改任务状态\n changeJobStatus: function changeJobStatus(data) {\n // switch 会自动更改 enable 的值\n var that = this;\n\n if (data.enable === false) {\n // 仅有,有特殊逻辑(关闭秒级任务),走单独接口\n that.axios.get(\"/job/disable?jobId=\" + data.id).then(function () {\n return that.listJobInfos();\n });\n } else {\n // 启用,则发起正常的保存操作\n this.modifiedJobForm = data;\n this.saveJob();\n }\n },\n // 新增任务,去除旧数据\n onClickNewJob: function onClickNewJob() {\n this.modifiedJobForm.id = undefined;\n this.modifiedJobForm.jobName = undefined;\n this.modifiedJobForm.jobDescription = undefined;\n this.modifiedJobForm.jobParams = undefined;\n this.modifiedJobForm.timeExpression = undefined;\n this.modifiedJobForm.timeExpressionType = undefined;\n this.modifiedJobForm.processorInfo = undefined;\n this.modifiedJobForm.processorType = undefined;\n this.modifiedJobForm.executeType = undefined;\n this.modifiedJobFormVisible = true;\n },\n // 点击 编辑按钮\n onClickModify: function onClickModify(data) {\n // 修复点击编辑后再点击新增 行数据被清空 的问题\n this.modifiedJobForm = JSON.parse(JSON.stringify(data));\n this.modifiedJobFormVisible = true;\n },\n // 点击 立即运行按钮\n onClickRun: function onClickRun(data) {\n var _this2 = this;\n\n var that = this;\n var url = \"/job/run?jobId=\" + data.id + \"&appId=\" + that.$store.state.appInfo.id;\n this.axios.get(url).then(function () {\n return that.$message.success(_this2.$t('message.success'));\n });\n },\n // 点击 删除任务\n onClickDeleteJob: function onClickDeleteJob(data) {\n var _this3 = this;\n\n var that = this;\n var url = \"/job/delete?jobId=\" + data.id;\n this.axios.get(url).then(function () {\n that.$message.success(_this3.$t('message.success'));\n that.listJobInfos();\n });\n },\n // 点击 复制任务\n onClickCopyJob: function onClickCopyJob(data) {\n var url = \"/job/copy?jobId=\" + data.id;\n var that = this;\n this.axios.post(url).then(function (res) {\n that.modifiedJobForm = res;\n that.modifiedJobFormVisible = true;\n });\n },\n // 点击 历史记录\n onClickRunHistory: function onClickRunHistory(data) {\n console.log(JSON.stringify(data));\n this.$router.push({\n name: 'instanceManager',\n params: {\n jobId: data.id\n }\n });\n },\n // 点击 换页\n onClickChangePage: function onClickChangePage(index) {\n // 后端从0开始,前端从1开始\n this.jobQueryContent.index = index - 1;\n this.listJobInfos();\n },\n // 点击重置按钮\n onClickReset: function onClickReset() {\n this.jobQueryContent.keyword = undefined;\n this.jobQueryContent.jobId = undefined;\n this.listJobInfos();\n },\n verifyPlaceholder: function verifyPlaceholder(processorType) {\n var res;\n\n switch (processorType) {\n case \"BUILT_IN\":\n res = this.$t('message.javaProcessorInfoPLH');\n break;\n\n case \"EXTERNAL\":\n res = this.$t('message.containerProcessorInfoPLH');\n break;\n\n case \"SHELL\":\n res = this.$t('message.shellProcessorInfoPLH');\n break;\n\n case \"PYTHON\":\n res = this.$t('message.pythonProcessorInfoPLH');\n }\n\n return res;\n },\n // 翻译执行类型\n translateExecuteType: function translateExecuteType(executeType) {\n switch (executeType) {\n case \"STANDALONE\":\n return this.$t('message.standalone');\n\n case \"BROADCAST\":\n return this.$t('message.broadcast');\n\n case \"MAP_REDUCE\":\n return this.$t('message.mapReduce');\n\n case \"MAP\":\n return this.$t('message.map');\n\n default:\n return \"UNKNOWN\";\n }\n },\n // 翻译处理器类型\n translateProcessorType: function translateProcessorType(processorType) {\n if (processorType === \"JAVA_CONTAINER\") {\n return this.$t('message.javaContainer');\n }\n\n return processorType;\n },\n // 点击校验\n onClickValidateTimeExpression: function onClickValidateTimeExpression() {\n this.timeExpressionValidatorVisible = true;\n }\n },\n mounted: function mounted() {\n // 加载用户信息\n var that = this;\n that.axios.get(\"/user/list\").then(function (res) {\n return that.userList = res;\n }); // 加载任务信息\n\n this.listJobInfos();\n }\n});\n\n//# sourceURL=webpack:///./src/components/views/JobManager.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.2.2@babel-loader/lib!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.9.6@vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/asyncToGenerator */ \"./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! regenerator-runtime/runtime.js */ \"./node_modules/_regenerator-runtime@0.13.7@regenerator-runtime/runtime.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _common_TimeExpressionValidator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/TimeExpressionValidator */ \"./src/components/common/TimeExpressionValidator.vue\");\n\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"JobManager\",\n components: {\n TimeExpressionValidator: _common_TimeExpressionValidator__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n data: function data() {\n return {\n modifiedJobFormVisible: false,\n // 新建任务对象\n modifiedJobForm: {\n id: undefined,\n jobName: \"\",\n jobDescription: \"\",\n appId: this.$store.state.appInfo.id,\n jobParams: \"\",\n timeExpressionType: \"\",\n timeExpression: \"\",\n executeType: \"\",\n processorType: \"\",\n processorInfo: \"\",\n maxInstanceNum: 0,\n concurrency: 5,\n instanceTimeLimit: 0,\n instanceRetryNum: 0,\n taskRetryNum: 1,\n minCpuCores: 0,\n minMemorySpace: 0,\n minDiskSpace: 0,\n enable: true,\n designatedWorkers: \"\",\n maxWorkerCount: 0,\n notifyUserIds: []\n },\n // 任务查询请求对象\n jobQueryContent: {\n appId: this.$store.state.appInfo.id,\n index: 0,\n pageSize: 10,\n jobId: undefined,\n keyword: undefined\n },\n // 任务列表(查询结果),包含index、pageSize、totalPages、totalItems、data(List类型)\n jobInfoPageResult: {\n pageSize: 10,\n totalItems: 0,\n data: []\n },\n // 时间表达式选择类型\n timeExpressionTypeOptions: [{\n key: \"API\",\n label: \"API\"\n }, {\n key: \"CRON\",\n label: \"CRON\"\n }, {\n key: \"FIXED_RATE\",\n label: this.$t('message.fixRate')\n }, {\n key: \"FIXED_DELAY\",\n label: this.$t('message.fixDelay')\n }, {\n key: \"WORKFLOW\",\n label: this.$t('message.workflow')\n }],\n // 处理器类型\n processorTypeOptions: [{\n key: \"BUILT_IN\",\n label: this.$t('message.builtIn')\n }, {\n key: \"EXTERNAL\",\n label: this.$t('message.external')\n }],\n // {key: \"SHELL\", label: \"SHELL\"}, {key: \"PYTHON\", label: \"PYTHON\"}\n // 执行方式类型\n executeTypeOptions: [{\n key: \"STANDALONE\",\n label: this.$t('message.standalone')\n }, {\n key: \"BROADCAST\",\n label: this.$t('message.broadcast')\n }, {\n key: \"MAP\",\n label: this.$t('message.map')\n }, {\n key: \"MAP_REDUCE\",\n label: this.$t('message.mapReduce')\n }],\n // 用户列表\n userList: [],\n // 时间表达式校验窗口\n timeExpressionValidatorVisible: false\n };\n },\n methods: {\n // 保存变更,包括新增和修改\n saveJob: function saveJob() {\n var _this = this;\n\n return Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _this.axios.post(\"/job/save\", _this.modifiedJobForm);\n\n case 2:\n _this.modifiedJobFormVisible = false;\n\n _this.$message.success(_this.$t('message.success'));\n\n _this.listJobInfos();\n\n case 5:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }))();\n },\n // 列出符合当前搜索条件的任务\n listJobInfos: function listJobInfos() {\n var that = this;\n this.axios.post(\"/job/list\", this.jobQueryContent).then(function (res) {\n that.jobInfoPageResult = res;\n });\n },\n // 修改任务状态\n changeJobStatus: function changeJobStatus(data) {\n // switch 会自动更改 enable 的值\n var that = this;\n\n if (data.enable === false) {\n // 仅有,有特殊逻辑(关闭秒级任务),走单独接口\n that.axios.get(\"/job/disable?jobId=\" + data.id).then(function () {\n return that.listJobInfos();\n });\n } else {\n // 启用,则发起正常的保存操作\n this.modifiedJobForm = data;\n this.saveJob();\n }\n },\n // 新增任务,去除旧数据\n onClickNewJob: function onClickNewJob() {\n this.modifiedJobForm.id = undefined;\n this.modifiedJobForm.jobName = undefined;\n this.modifiedJobForm.jobDescription = undefined;\n this.modifiedJobForm.jobParams = undefined;\n this.modifiedJobForm.timeExpression = undefined;\n this.modifiedJobForm.timeExpressionType = undefined;\n this.modifiedJobForm.processorInfo = undefined;\n this.modifiedJobForm.processorType = undefined;\n this.modifiedJobForm.executeType = undefined;\n this.modifiedJobFormVisible = true;\n },\n // 点击 编辑按钮\n onClickModify: function onClickModify(data) {\n // 修复点击编辑后再点击新增 行数据被清空 的问题\n this.modifiedJobForm = JSON.parse(JSON.stringify(data));\n this.modifiedJobFormVisible = true;\n },\n // 点击 立即运行按钮\n onClickRun: function onClickRun(data) {\n var _this2 = this;\n\n var that = this;\n var url = \"/job/run?jobId=\" + data.id + \"&appId=\" + that.$store.state.appInfo.id;\n this.axios.get(url).then(function () {\n return that.$message.success(_this2.$t('message.success'));\n });\n },\n // 点击 删除任务\n onClickDeleteJob: function onClickDeleteJob(data) {\n var _this3 = this;\n\n var that = this;\n var url = \"/job/delete?jobId=\" + data.id;\n this.axios.get(url).then(function () {\n that.$message.success(_this3.$t('message.success'));\n that.listJobInfos();\n });\n },\n // 点击 复制任务\n onClickCopyJob: function onClickCopyJob(data) {\n var url = \"/job/copy?jobId=\" + data.id;\n var that = this;\n this.axios.post(url).then(function (res) {\n that.modifiedJobForm = res;\n that.modifiedJobFormVisible = true;\n });\n },\n // 点击 历史记录\n onClickRunHistory: function onClickRunHistory(data) {\n console.log(JSON.stringify(data));\n this.$router.push({\n name: 'instanceManager',\n params: {\n jobId: data.id\n }\n });\n },\n // 点击 换页\n onClickChangePage: function onClickChangePage(index) {\n // 后端从0开始,前端从1开始\n this.jobQueryContent.index = index - 1;\n this.listJobInfos();\n },\n // 点击重置按钮\n onClickReset: function onClickReset() {\n this.jobQueryContent.keyword = undefined;\n this.jobQueryContent.jobId = undefined;\n this.listJobInfos();\n },\n verifyPlaceholder: function verifyPlaceholder(processorType) {\n var res;\n\n switch (processorType) {\n case \"BUILT_IN\":\n res = this.$t('message.javaProcessorInfoPLH');\n break;\n\n case \"EXTERNAL\":\n res = this.$t('message.containerProcessorInfoPLH');\n break;\n\n case \"SHELL\":\n res = this.$t('message.shellProcessorInfoPLH');\n break;\n\n case \"PYTHON\":\n res = this.$t('message.pythonProcessorInfoPLH');\n }\n\n return res;\n },\n // 翻译执行类型\n translateExecuteType: function translateExecuteType(executeType) {\n switch (executeType) {\n case \"STANDALONE\":\n return this.$t('message.standalone');\n\n case \"BROADCAST\":\n return this.$t('message.broadcast');\n\n case \"MAP_REDUCE\":\n return this.$t('message.mapReduce');\n\n case \"MAP\":\n return this.$t('message.map');\n\n default:\n return \"UNKNOWN\";\n }\n },\n // 翻译处理器类型\n translateProcessorType: function translateProcessorType(processorType) {\n if (processorType === \"EXTERNAL\") {\n return this.$t('message.external');\n }\n\n return this.$t('message.builtIn');\n },\n // 点击校验\n onClickValidateTimeExpression: function onClickValidateTimeExpression() {\n this.timeExpressionValidatorVisible = true;\n }\n },\n mounted: function mounted() {\n // 加载用户信息\n var that = this;\n that.axios.get(\"/user/list\").then(function (res) {\n return that.userList = res;\n }); // 加载任务信息\n\n this.listJobInfos();\n }\n});\n\n//# sourceURL=webpack:///./src/components/views/JobManager.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.2.2@babel-loader/lib!./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.9.6@vue-loader/lib??vue-loader-options"); /***/ }), diff --git a/powerjob-server/powerjob-server-starter/src/main/resources/static/js/app.js b/powerjob-server/powerjob-server-starter/src/main/resources/static/js/app.js index 6839b2ee..07e8359d 100644 --- a/powerjob-server/powerjob-server-starter/src/main/resources/static/js/app.js +++ b/powerjob-server/powerjob-server-starter/src/main/resources/static/js/app.js @@ -676,7 +676,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue_ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/zh-CN */ \"./node_modules/_element-ui@2.15.1@element-ui/lib/locale/lang/zh-CN.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar cn = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n // common\n 'save': '保存',\n 'cancel': '取消',\n 'refresh': '刷新',\n 'query': '查询',\n 'reset': '重置',\n 'bulkImport': '批量导入',\n 'keyword': '关键字',\n 'run': '运行',\n 'edit': '编辑',\n 'delete': '删除',\n 'success': '成功',\n 'failed': '失败',\n 'detail': '详情',\n 'download': '下载',\n 'stop': '停止',\n 'back': '返回',\n 'all': '全部',\n 'more': '| 更多',\n // 欢迎界面\n 'appRegister': '执行应用注册',\n 'userRegister': '报警用户录入',\n 'appNameInputPLH': '请输入应用名称',\n 'appName': '应用名称',\n 'appPassword': '密码',\n 'register': '注册',\n 'name': '姓名',\n 'phone': '手机号',\n 'email': '邮箱地址',\n 'webhook': 'WebHook',\n 'welcomeTitle': '欢迎使用 PowerJob!',\n 'login': '登陆',\n 'logout': '退出',\n 'changeAppInfo': '修改应用信息',\n 'newPassword': '新密码',\n 'newPassword2': '确认密码',\n 'stayLogged': '保持登录状态',\n // 左侧tab栏\n 'tabHome': '系统首页',\n 'tabJobManage': '任务管理',\n 'tabJobInstance': '任务实例',\n 'tabWorkflowManage': '工作流管理',\n 'tabWfInstance': '工作流实例',\n 'tabContainerOps': '容器',\n 'tabTemplate': '模版生成',\n 'tabContainerManager': '容器运维',\n // 系统首页\n 'omsServerTime': '调度服务器时间',\n 'omsServerTimezone': '调度服务器时区',\n 'localBrowserTime': '本地时间',\n 'localBrowserTimezone': '本地时区',\n 'githubURL': '项目地址',\n 'docURL': '文档地址',\n 'totalJobNum': '任务总数',\n 'runningInstanceNum': '当前运行实例数',\n 'recentFailedInstanceNum': '近期失败任务数',\n 'workerNum': '集群机器数',\n 'workerAddress': '机器地址',\n 'cpuLoad': 'CPU 占用',\n 'memoryLoad': '内存占用',\n 'diskLoad': '磁盘占用',\n // 任务管理\n 'jobId': '任务 ID',\n 'instanceId': '任务实例 ID',\n 'jobName': '任务名称',\n 'scheduleInfo': '定时信息',\n 'executeType': '执行类型',\n 'processorType': '处理器类型',\n 'status': '状态',\n 'operation': '操作',\n 'newJob': '新建任务',\n 'jobDescription': '任务描述',\n 'jobParams': '任务参数',\n 'timeExpressionType': '时间表达式类型',\n 'timeExpressionPlaceHolder': 'CRON 填写 CRON 表达式,秒级任务填写整数,API 无需填写',\n 'executeConfig': '执行配置',\n 'javaProcessorInfoPLH': '全限定类名,eg:com.github.kfcfans.DemoProcessor',\n 'containerProcessorInfoPLH': '容器ID#全限定类名,eg:1#com.github.kfcfans.DemoProcessor',\n 'shellProcessorInfoPLH': 'SHELL 脚本文件内容',\n 'pythonProcessorInfoPLH': 'Python 脚本文件内容',\n 'runtimeConfig': '运行时配置',\n 'maxInstanceNum': '最大实例数',\n 'threadConcurrency': '单机线程并发度',\n 'timeout': '运行时间限制(毫秒)',\n 'retryConfig': '重试配置',\n 'taskRetryTimes': 'Instance 重试次数',\n 'subTaskRetryTimes': \"Task 重试次数\",\n 'workerConfig': '机器配置',\n 'minCPU': '最低 CPU 核心数',\n 'minMemory': '最低内存(GB)',\n 'minDisk': '最低磁盘空间(GB)',\n 'clusterConfig': '集群配置',\n 'designatedWorkerAddress': '执行机器地址',\n 'designatedWorkerAddressPLH': '执行机器地址(可选,不指定代表全部;多值英文逗号分割)',\n 'maxWorkerNum': '最大执行机器数量',\n 'maxWorkerNumPLH': '最大执行机器数量(0代表不限)',\n 'alarmConfig': '报警配置',\n 'alarmSelectorPLH': '选择报警通知人员',\n 'standalone': '单机执行',\n 'broadcast': '广播执行',\n 'map': 'Map执行',\n 'mapReduce': 'MapReduce 执行',\n 'fixRate': '固定频率(毫秒)',\n 'fixDelay': '固定延迟(毫秒)',\n 'workflow': '工作流',\n 'validateTimeExpression': '校验定时参数',\n 'javaContainer': 'Java(容器)',\n 'runHistory': '运行记录',\n 'reRun': '重试',\n // 任务实例管理\n 'wfInstanceId': '工作流实例 ID',\n 'normalInstance': '普通任务实例',\n 'wfInstance': '工作流任务实例',\n 'triggerTime': '触发时间',\n 'finishedTime': '结束时间',\n 'log': '日志',\n 'runningTimes': '运行次数',\n 'taskTrackerAddress': 'TaskTracker 地址',\n 'startTime': '开始时间',\n 'expectedTriggerTime': '预计执行时间',\n 'result': '任务结果',\n 'subTaskInfo': 'Task 信息',\n // 'secondlyJobHistory': '最近 10 条秒级任务历史记录(秒级任务专用)',\n 'secondlyJobHistory': '最近 10 条秒级任务历史记录',\n 'subInstanceId': '子任务实例 ID',\n 'instanceParams': '任务实例参数',\n // 工作流管理\n 'wfId': '工作流 ID',\n 'wfName': '工作流名称',\n 'newWorkflow': '新建工作流',\n 'wfDescription': '工作流描述',\n 'importJob': '导入任务',\n 'deleteJob': '删除任务',\n 'newStartPoint': '新增起点',\n 'newEndPoint': '新增终点',\n 'deleteEdge': '删除边',\n 'importJobTitle': \"请选择需要导入工作流的任务\",\n 'wfTimeExpressionPLH': 'CRON 填写 CRON 表达式,API 无需填写',\n 'import': '导入',\n 'ntfClickNeedDeleteNode': '请点击需要删除的节点',\n 'ntfClickStartPoint': '请点击起始节点',\n 'ntfClickTargetPoint': '请点击目标节点',\n 'ntfClickDeleteEdge': '请点击需要删除的边',\n 'ntfAddStartPointFirst': '请先添加起点!',\n 'ntfInvalidEdge': '非法操作(起点终点相同)!',\n // 工作流实例\n 'wfTips': 'tips:点击节点可查看任务实例详情',\n 'ntfClickNoInstanceNode': '未生成任务实例,无法查看详情!',\n 'wfInitParams': '启动参数',\n // 容器\n 'newContainer': '新增容器',\n 'containerType': '容器类型',\n 'containerGitURL': 'Git 仓库地址',\n 'branchName': '分支名称',\n 'username': '用户名',\n 'oldPassword': '旧密码',\n 'password': '密码',\n 'containerId': '容器 ID',\n 'containerName': '容器名称',\n 'containerVersion': '容器版本',\n 'deployTime': '部署时间',\n 'deploy': '部署',\n 'deployedWorkerList': '机器列表',\n 'uploadTips': '拖拽或点击文件后会自动上传',\n // 任务实例状态\n 'waitingDispatch': '等待派发',\n 'waitingWorkerReceive': '等待Worker接收',\n 'running': '运行中',\n 'stopped': '手动停止',\n 'canceled': '手动取消',\n 'wfWaiting': '等待调度',\n 'waitingUpstream': '等待上游节点',\n // 新增的提示信息\n 'noSelect': '请至少选中一条数据',\n 'nodeName': '节点名称',\n 'nodeParams': '节点参数',\n 'enable': '是否启用',\n 'skipWhenFailed': '失败跳过',\n 'fullScreen': '全屏',\n 'zoomIn': '放大',\n 'zoomOut': '缩小',\n 'autoFit': '自适应',\n 'markerSuccess': '标记成功',\n 'restart': '重试',\n 'wfContext': '上下文',\n 'yes': 'YES',\n 'no': 'NO',\n 'copy': '复制'\n }\n}, element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cn);\n\n//# sourceURL=webpack:///./src/i18n/langs/cn.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/zh-CN */ \"./node_modules/_element-ui@2.15.1@element-ui/lib/locale/lang/zh-CN.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar cn = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n // common\n 'save': '保存',\n 'cancel': '取消',\n 'refresh': '刷新',\n 'query': '查询',\n 'reset': '重置',\n 'bulkImport': '批量导入',\n 'keyword': '关键字',\n 'run': '运行',\n 'edit': '编辑',\n 'delete': '删除',\n 'success': '成功',\n 'failed': '失败',\n 'detail': '详情',\n 'download': '下载',\n 'stop': '停止',\n 'back': '返回',\n 'all': '全部',\n 'more': '| 更多',\n // 欢迎界面\n 'appRegister': '执行应用注册',\n 'userRegister': '报警用户录入',\n 'appNameInputPLH': '请输入应用名称',\n 'appName': '应用名称',\n 'appPassword': '密码',\n 'register': '注册',\n 'name': '姓名',\n 'phone': '手机号',\n 'email': '邮箱地址',\n 'webhook': 'WebHook',\n 'welcomeTitle': '欢迎使用 PowerJob!',\n 'login': '登陆',\n 'logout': '退出',\n 'changeAppInfo': '修改应用信息',\n 'newPassword': '新密码',\n 'newPassword2': '确认密码',\n 'stayLogged': '保持登录状态',\n // 左侧tab栏\n 'tabHome': '系统首页',\n 'tabJobManage': '任务管理',\n 'tabJobInstance': '任务实例',\n 'tabWorkflowManage': '工作流管理',\n 'tabWfInstance': '工作流实例',\n 'tabContainerOps': '容器',\n 'tabTemplate': '模版生成',\n 'tabContainerManager': '容器运维',\n // 系统首页\n 'omsServerTime': '调度服务器时间',\n 'omsServerTimezone': '调度服务器时区',\n 'localBrowserTime': '本地时间',\n 'localBrowserTimezone': '本地时区',\n 'githubURL': '项目地址',\n 'docURL': '文档地址',\n 'totalJobNum': '任务总数',\n 'runningInstanceNum': '当前运行实例数',\n 'recentFailedInstanceNum': '近期失败任务数',\n 'workerNum': '集群机器数',\n 'workerAddress': '机器地址',\n 'cpuLoad': 'CPU 占用',\n 'memoryLoad': '内存占用',\n 'diskLoad': '磁盘占用',\n // 任务管理\n 'jobId': '任务 ID',\n 'instanceId': '任务实例 ID',\n 'jobName': '任务名称',\n 'scheduleInfo': '定时信息',\n 'executeType': '执行类型',\n 'processorType': '处理器类型',\n 'status': '状态',\n 'operation': '操作',\n 'newJob': '新建任务',\n 'jobDescription': '任务描述',\n 'jobParams': '任务参数',\n 'timeExpressionType': '时间表达式类型',\n 'timeExpressionPlaceHolder': 'CRON 填写 CRON 表达式,秒级任务填写整数,API 无需填写',\n 'executeConfig': '执行配置',\n 'javaProcessorInfoPLH': '全限定类名,eg:tech.powerjob.HelloWordProcessor',\n 'containerProcessorInfoPLH': '容器ID#全限定类名,eg:1#tech.powerjob.HelloWordProcessor',\n 'shellProcessorInfoPLH': 'SHELL 脚本文件内容',\n 'pythonProcessorInfoPLH': 'Python 脚本文件内容',\n 'runtimeConfig': '运行时配置',\n 'maxInstanceNum': '最大实例数',\n 'threadConcurrency': '单机线程并发度',\n 'timeout': '运行时间限制(毫秒)',\n 'retryConfig': '重试配置',\n 'taskRetryTimes': 'Instance 重试次数',\n 'subTaskRetryTimes': \"Task 重试次数\",\n 'workerConfig': '机器配置',\n 'minCPU': '最低 CPU 核心数',\n 'minMemory': '最低内存(GB)',\n 'minDisk': '最低磁盘空间(GB)',\n 'clusterConfig': '集群配置',\n 'designatedWorkerAddress': '执行机器地址',\n 'designatedWorkerAddressPLH': '执行机器地址(可选,不指定代表全部;多值英文逗号分割)',\n 'maxWorkerNum': '最大执行机器数量',\n 'maxWorkerNumPLH': '最大执行机器数量(0代表不限)',\n 'alarmConfig': '报警配置',\n 'alarmSelectorPLH': '选择报警通知人员',\n 'standalone': '单机执行',\n 'broadcast': '广播执行',\n 'map': 'Map执行',\n 'mapReduce': 'MapReduce 执行',\n 'fixRate': '固定频率(毫秒)',\n 'fixDelay': '固定延迟(毫秒)',\n 'workflow': '工作流',\n 'validateTimeExpression': '校验定时参数',\n 'javaContainer': 'Java(容器)',\n 'runHistory': '运行记录',\n 'reRun': '重试',\n 'builtIn': '内建',\n 'external': '外置(动态加载)',\n // 任务实例管理\n 'wfInstanceId': '工作流实例 ID',\n 'normalInstance': '普通任务实例',\n 'wfInstance': '工作流任务实例',\n 'triggerTime': '触发时间',\n 'finishedTime': '结束时间',\n 'log': '日志',\n 'runningTimes': '运行次数',\n 'taskTrackerAddress': 'TaskTracker 地址',\n 'startTime': '开始时间',\n 'expectedTriggerTime': '预计执行时间',\n 'result': '任务结果',\n 'subTaskInfo': 'Task 信息',\n // 'secondlyJobHistory': '最近 10 条秒级任务历史记录(秒级任务专用)',\n 'secondlyJobHistory': '最近 10 条秒级任务历史记录',\n 'subInstanceId': '子任务实例 ID',\n 'instanceParams': '任务实例参数',\n // 工作流管理\n 'wfId': '工作流 ID',\n 'wfName': '工作流名称',\n 'newWorkflow': '新建工作流',\n 'wfDescription': '工作流描述',\n 'importJob': '导入任务',\n 'deleteJob': '删除任务',\n 'newStartPoint': '新增起点',\n 'newEndPoint': '新增终点',\n 'deleteEdge': '删除边',\n 'importJobTitle': \"请选择需要导入工作流的任务\",\n 'wfTimeExpressionPLH': 'CRON 填写 CRON 表达式,API 无需填写',\n 'import': '导入',\n 'ntfClickNeedDeleteNode': '请点击需要删除的节点',\n 'ntfClickStartPoint': '请点击起始节点',\n 'ntfClickTargetPoint': '请点击目标节点',\n 'ntfClickDeleteEdge': '请点击需要删除的边',\n 'ntfAddStartPointFirst': '请先添加起点!',\n 'ntfInvalidEdge': '非法操作(起点终点相同)!',\n // 工作流实例\n 'wfTips': 'tips:点击节点可查看任务实例详情',\n 'ntfClickNoInstanceNode': '未生成任务实例,无法查看详情!',\n 'wfInitParams': '启动参数',\n // 容器\n 'newContainer': '新增容器',\n 'containerType': '容器类型',\n 'containerGitURL': 'Git 仓库地址',\n 'branchName': '分支名称',\n 'username': '用户名',\n 'oldPassword': '旧密码',\n 'password': '密码',\n 'containerId': '容器 ID',\n 'containerName': '容器名称',\n 'containerVersion': '容器版本',\n 'deployTime': '部署时间',\n 'deploy': '部署',\n 'deployedWorkerList': '机器列表',\n 'uploadTips': '拖拽或点击文件后会自动上传',\n // 任务实例状态\n 'waitingDispatch': '等待派发',\n 'waitingWorkerReceive': '等待Worker接收',\n 'running': '运行中',\n 'stopped': '手动停止',\n 'canceled': '手动取消',\n 'wfWaiting': '等待调度',\n 'waitingUpstream': '等待上游节点',\n // 新增的提示信息\n 'noSelect': '请至少选中一条数据',\n 'nodeName': '节点名称',\n 'nodeParams': '节点参数',\n 'enable': '是否启用',\n 'skipWhenFailed': '失败跳过',\n 'fullScreen': '全屏',\n 'zoomIn': '放大',\n 'zoomOut': '缩小',\n 'autoFit': '自适应',\n 'markerSuccess': '标记成功',\n 'restart': '重试',\n 'wfContext': '上下文',\n 'yes': 'YES',\n 'no': 'NO',\n 'copy': '复制'\n }\n}, element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cn);\n\n//# sourceURL=webpack:///./src/i18n/langs/cn.js?"); /***/ }), @@ -688,7 +688,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Use /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/en */ \"./node_modules/_element-ui@2.15.1@element-ui/lib/locale/lang/en.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar en = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n 'save': 'Save',\n 'cancel': 'Cancel',\n 'refresh': 'Refresh',\n 'query': 'Query',\n 'reset': 'Reset',\n 'bulkImport': 'Bulk Import',\n 'keyword': 'Keyword',\n 'run': 'Run',\n 'edit': 'Edit',\n 'delete': 'Delete',\n 'success': 'Success',\n 'failed': 'Failed',\n 'detail': 'Detail',\n 'download': 'Download',\n 'stop': 'Stop',\n 'back': 'Back',\n 'all': 'ALL',\n 'more': '| More',\n // 欢迎界面\n 'appRegister': 'App Registration',\n 'userRegister': 'User Registration',\n 'appNameInputPLH': 'Enter The AppName',\n 'appName': 'AppName',\n 'appPassword': 'AppPassword',\n 'register': 'Register',\n 'name': 'Name',\n 'phone': 'Phone',\n 'email': 'Email',\n 'webhook': 'Webhook',\n 'welcomeTitle': 'Welcome to use PowerJob!',\n 'login': 'Login',\n 'logout': 'Logout',\n 'changeAppInfo': 'Change AppInfo',\n 'newPassword': 'New Password',\n 'newPassword2': 'Check New Password',\n 'stayLogged': 'Keep me logged in',\n 'tabHome': 'Home',\n 'tabJobManage': 'Job management',\n 'tabJobInstance': 'Job instances',\n 'tabWorkflowManage': 'Workflow management',\n 'tabWfInstance': 'Workflow instances',\n 'tabContainerOps': 'Container DevOps',\n 'tabTemplate': 'Template generator',\n 'tabContainerManager': 'Container Management',\n 'omsServerTime': 'Server Time',\n 'omsServerTimezone': 'Server Timezone',\n 'localBrowserTime': 'Local Time',\n 'localBrowserTimezone': 'Local Timezone',\n 'githubURL': 'GitHub Repo',\n 'docURL': 'Document Address',\n 'totalJobNum': 'Total job num',\n 'runningInstanceNum': 'Running instance num',\n 'recentFailedInstanceNum': 'Recent failed instance num',\n 'workerNum': 'Worker node num',\n 'workerAddress': 'Worker address',\n 'cpuLoad': 'CPU Load',\n 'memoryLoad': 'Memory Load',\n 'diskLoad': 'Disk Load',\n // JobManage\n 'jobId': 'Job ID',\n 'instanceId': 'Instance ID',\n 'jobName': 'Job name',\n 'scheduleInfo': 'Schedule info',\n 'executeType': 'Execution type',\n 'processorType': 'Processor type',\n 'status': 'Status',\n 'operation': 'Operation',\n 'newJob': 'New job',\n 'jobDescription': 'Job description',\n 'jobParams': 'Job params',\n 'timeExpressionType': 'Time expression type',\n 'timeExpressionPlaceHolder': 'Cron expression or number of millions for fixed_rate/fixed_delay job',\n 'executeConfig': 'Execution config',\n 'javaProcessorInfoPLH': 'Classname, eg: com.github.kfcfans.DemoProcessor',\n 'containerProcessorInfoPLH': 'ContainerID#classname, eg: 1#com.github.kfcfans.DemoProcessor',\n 'shellProcessorInfoPLH': 'Shell script',\n 'pythonProcessorInfoPLH': 'Python script',\n 'runtimeConfig': 'Runtime config',\n 'maxInstanceNum': 'Max instance num',\n 'threadConcurrency': 'Thread concurrency',\n 'timeout': 'Time limit (ms)',\n 'retryConfig': 'Retry config',\n 'taskRetryTimes': 'Instance retry times',\n 'subTaskRetryTimes': \"Task retry times\",\n 'workerConfig': 'Worker config',\n 'minCPU': 'MinAvailableCPUCores',\n 'minMemory': 'MinMemory(GB)',\n 'minDisk': 'MinDisk(GB)',\n 'clusterConfig': 'Cluster config',\n 'designatedWorkerAddress': 'Designated worker address',\n 'designatedWorkerAddressPLH': 'Empty for all workers; ip:port,ip:port for specific',\n 'maxWorkerNum': 'Max worker num',\n 'maxWorkerNumPLH': '0 means no limit',\n 'alarmConfig': 'Alarm config',\n 'alarmSelectorPLH': 'Alarm receiver(s)',\n 'standalone': 'Standalone',\n 'broadcast': 'Broadcast',\n 'map': 'MAP',\n 'mapReduce': 'MapReduce',\n 'fixRate': 'Fixed rate (ms)',\n 'fixDelay': 'Fixed delay (ms)',\n 'workflow': 'Workflow',\n 'validateTimeExpression': 'Validate',\n 'javaContainer': 'External',\n 'runHistory': 'History',\n 'reRun': 'Retry',\n // JobInstance\n 'wfInstanceId': 'WorkflowInstanceId',\n 'normalInstance': 'Normal instance',\n 'wfInstance': 'Workflow instance',\n 'triggerTime': 'Trigger time',\n 'finishedTime': 'Finished time',\n 'log': 'Log',\n 'runningTimes': 'Running times',\n 'taskTrackerAddress': 'TaskTracker address',\n 'startTime': 'Start time',\n 'expectedTriggerTime': 'Expected trigger time',\n 'result': 'Result',\n 'subTaskInfo': 'Task info',\n 'secondlyJobHistory': 'Secondly job history',\n 'subInstanceId': 'SubInstanceId',\n 'instanceParams': 'InstanceParams',\n // workflowManage\n 'wfId': 'Workflow ID',\n 'wfName': 'Workflow name',\n 'newWorkflow': 'New workflow',\n 'wfDescription': 'Description',\n 'importJob': 'Import job',\n 'deleteJob': 'Delete job',\n 'newStartPoint': 'New starting point',\n 'newEndPoint': 'New ending point',\n 'deleteEdge': 'Delete edge',\n 'importJobTitle': \"Select jobs\",\n 'wfTimeExpressionPLH': 'Cron expression for CRON or empty for API',\n 'import': 'Import',\n 'ntfClickNeedDeleteNode': 'Please click on the node you want to delete.',\n 'ntfClickStartPoint': 'Please click on the start node',\n 'ntfClickTargetPoint': 'Please click on the end node',\n 'ntfClickDeleteEdge': 'Please click on the edge you want to remove.',\n 'ntfAddStartPointFirst': 'Please add the starting point first!',\n 'ntfInvalidEdge': 'Illegal operation (same origin and destination)!',\n // workflowInstance\n 'wfTips': 'tips:Click on a node to view details of the job instance',\n 'ntfClickNoInstanceNode': 'No instances have been generated, and details cannot be viewed!',\n 'wfInitParams': 'InitParams',\n // 容器\n 'newContainer': 'New container',\n 'containerType': 'Type',\n 'containerGitURL': 'Git URL',\n 'branchName': 'Branch',\n 'username': 'Username',\n 'oldPassword': 'Old password',\n 'password': 'Password',\n 'containerId': 'ID',\n 'containerName': 'Name',\n 'containerVersion': 'Version',\n 'deployTime': 'Deployed time',\n 'deploy': 'Deploy',\n 'deployedWorkerList': 'Worker list',\n 'uploadTips': 'Drag and drop or click on the file to upload it automatically',\n // 任务实例状态\n 'waitingDispatch': 'Waiting dispatch',\n 'waitingWorkerReceive': 'Waiting receive',\n 'running': 'Running',\n 'stopped': 'Stopped',\n 'canceled': 'Canceled',\n 'wfWaiting': 'Waiting',\n 'waitingUpstream': 'Waiting upstream',\n // 新增的提示信息\n 'noSelect': 'Please select at least one data item',\n 'nodeName': 'Node name',\n 'nodeParams': 'Node parameter',\n 'enable': 'Enable',\n 'skipWhenFailed': 'Allow skips when failed',\n 'fullScreen': 'Full Screen',\n 'zoomIn': 'Zoom In',\n 'zoomOut': 'Zoom out',\n 'autoFit': 'Auto Fit',\n 'markerSuccess': 'Marked Success',\n 'restart': 'restart',\n 'wfContext': 'Context',\n 'yes': 'YES',\n 'no': 'NO',\n 'copy': 'Copy'\n }\n}, element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (en);\n\n//# sourceURL=webpack:///./src/i18n/langs/en.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/_@babel_runtime@7.13.9@@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/en */ \"./node_modules/_element-ui@2.15.1@element-ui/lib/locale/lang/en.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar en = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_7_13_9_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n 'save': 'Save',\n 'cancel': 'Cancel',\n 'refresh': 'Refresh',\n 'query': 'Query',\n 'reset': 'Reset',\n 'bulkImport': 'Bulk Import',\n 'keyword': 'Keyword',\n 'run': 'Run',\n 'edit': 'Edit',\n 'delete': 'Delete',\n 'success': 'Success',\n 'failed': 'Failed',\n 'detail': 'Detail',\n 'download': 'Download',\n 'stop': 'Stop',\n 'back': 'Back',\n 'all': 'ALL',\n 'more': '| More',\n // 欢迎界面\n 'appRegister': 'App Registration',\n 'userRegister': 'User Registration',\n 'appNameInputPLH': 'Enter The AppName',\n 'appName': 'AppName',\n 'appPassword': 'AppPassword',\n 'register': 'Register',\n 'name': 'Name',\n 'phone': 'Phone',\n 'email': 'Email',\n 'webhook': 'Webhook',\n 'welcomeTitle': 'Welcome to use PowerJob!',\n 'login': 'Login',\n 'logout': 'Logout',\n 'changeAppInfo': 'Change AppInfo',\n 'newPassword': 'New Password',\n 'newPassword2': 'Check New Password',\n 'stayLogged': 'Keep me logged in',\n 'tabHome': 'Home',\n 'tabJobManage': 'Job management',\n 'tabJobInstance': 'Job instances',\n 'tabWorkflowManage': 'Workflow management',\n 'tabWfInstance': 'Workflow instances',\n 'tabContainerOps': 'Container DevOps',\n 'tabTemplate': 'Template generator',\n 'tabContainerManager': 'Container Management',\n 'omsServerTime': 'Server Time',\n 'omsServerTimezone': 'Server Timezone',\n 'localBrowserTime': 'Local Time',\n 'localBrowserTimezone': 'Local Timezone',\n 'githubURL': 'GitHub Repo',\n 'docURL': 'Document Address',\n 'totalJobNum': 'Total job num',\n 'runningInstanceNum': 'Running instance num',\n 'recentFailedInstanceNum': 'Recent failed instance num',\n 'workerNum': 'Worker node num',\n 'workerAddress': 'Worker address',\n 'cpuLoad': 'CPU Load',\n 'memoryLoad': 'Memory Load',\n 'diskLoad': 'Disk Load',\n // JobManage\n 'jobId': 'Job ID',\n 'instanceId': 'Instance ID',\n 'jobName': 'Job name',\n 'scheduleInfo': 'Schedule info',\n 'executeType': 'Execution type',\n 'processorType': 'Processor type',\n 'status': 'Status',\n 'operation': 'Operation',\n 'newJob': 'New job',\n 'jobDescription': 'Job description',\n 'jobParams': 'Job params',\n 'timeExpressionType': 'Time expression type',\n 'timeExpressionPlaceHolder': 'Cron expression or number of millions for fixed_rate/fixed_delay job',\n 'executeConfig': 'Execution config',\n 'javaProcessorInfoPLH': 'Classname, eg: tech.powerjob.HelloWordProcessor',\n 'containerProcessorInfoPLH': 'ContainerID#classname, eg: 1#tech.powerjob.HelloWordProcessor',\n 'shellProcessorInfoPLH': 'Shell script',\n 'pythonProcessorInfoPLH': 'Python script',\n 'runtimeConfig': 'Runtime config',\n 'maxInstanceNum': 'Max instance num',\n 'threadConcurrency': 'Thread concurrency',\n 'timeout': 'Time limit (ms)',\n 'retryConfig': 'Retry config',\n 'taskRetryTimes': 'Instance retry times',\n 'subTaskRetryTimes': \"Task retry times\",\n 'workerConfig': 'Worker config',\n 'minCPU': 'MinAvailableCPUCores',\n 'minMemory': 'MinMemory(GB)',\n 'minDisk': 'MinDisk(GB)',\n 'clusterConfig': 'Cluster config',\n 'designatedWorkerAddress': 'Designated worker address',\n 'designatedWorkerAddressPLH': 'Empty for all workers; ip:port,ip:port for specific',\n 'maxWorkerNum': 'Max worker num',\n 'maxWorkerNumPLH': '0 means no limit',\n 'alarmConfig': 'Alarm config',\n 'alarmSelectorPLH': 'Alarm receiver(s)',\n 'standalone': 'Standalone',\n 'broadcast': 'Broadcast',\n 'map': 'MAP',\n 'mapReduce': 'MapReduce',\n 'fixRate': 'Fixed rate (ms)',\n 'fixDelay': 'Fixed delay (ms)',\n 'workflow': 'Workflow',\n 'validateTimeExpression': 'Validate',\n 'javaContainer': 'External',\n 'runHistory': 'History',\n 'reRun': 'Retry',\n 'builtIn': 'BUILT_IN',\n 'External': 'EXTERNAL',\n // JobInstance\n 'wfInstanceId': 'WorkflowInstanceId',\n 'normalInstance': 'Normal instance',\n 'wfInstance': 'Workflow instance',\n 'triggerTime': 'Trigger time',\n 'finishedTime': 'Finished time',\n 'log': 'Log',\n 'runningTimes': 'Running times',\n 'taskTrackerAddress': 'TaskTracker address',\n 'startTime': 'Start time',\n 'expectedTriggerTime': 'Expected trigger time',\n 'result': 'Result',\n 'subTaskInfo': 'Task info',\n 'secondlyJobHistory': 'Secondly job history',\n 'subInstanceId': 'SubInstanceId',\n 'instanceParams': 'InstanceParams',\n // workflowManage\n 'wfId': 'Workflow ID',\n 'wfName': 'Workflow name',\n 'newWorkflow': 'New workflow',\n 'wfDescription': 'Description',\n 'importJob': 'Import job',\n 'deleteJob': 'Delete job',\n 'newStartPoint': 'New starting point',\n 'newEndPoint': 'New ending point',\n 'deleteEdge': 'Delete edge',\n 'importJobTitle': \"Select jobs\",\n 'wfTimeExpressionPLH': 'Cron expression for CRON or empty for API',\n 'import': 'Import',\n 'ntfClickNeedDeleteNode': 'Please click on the node you want to delete.',\n 'ntfClickStartPoint': 'Please click on the start node',\n 'ntfClickTargetPoint': 'Please click on the end node',\n 'ntfClickDeleteEdge': 'Please click on the edge you want to remove.',\n 'ntfAddStartPointFirst': 'Please add the starting point first!',\n 'ntfInvalidEdge': 'Illegal operation (same origin and destination)!',\n // workflowInstance\n 'wfTips': 'tips:Click on a node to view details of the job instance',\n 'ntfClickNoInstanceNode': 'No instances have been generated, and details cannot be viewed!',\n 'wfInitParams': 'InitParams',\n // 容器\n 'newContainer': 'New container',\n 'containerType': 'Type',\n 'containerGitURL': 'Git URL',\n 'branchName': 'Branch',\n 'username': 'Username',\n 'oldPassword': 'Old password',\n 'password': 'Password',\n 'containerId': 'ID',\n 'containerName': 'Name',\n 'containerVersion': 'Version',\n 'deployTime': 'Deployed time',\n 'deploy': 'Deploy',\n 'deployedWorkerList': 'Worker list',\n 'uploadTips': 'Drag and drop or click on the file to upload it automatically',\n // 任务实例状态\n 'waitingDispatch': 'Waiting dispatch',\n 'waitingWorkerReceive': 'Waiting receive',\n 'running': 'Running',\n 'stopped': 'Stopped',\n 'canceled': 'Canceled',\n 'wfWaiting': 'Waiting',\n 'waitingUpstream': 'Waiting upstream',\n // 新增的提示信息\n 'noSelect': 'Please select at least one data item',\n 'nodeName': 'Node name',\n 'nodeParams': 'Node parameter',\n 'enable': 'Enable',\n 'skipWhenFailed': 'Allow skips when failed',\n 'fullScreen': 'Full Screen',\n 'zoomIn': 'Zoom In',\n 'zoomOut': 'Zoom out',\n 'autoFit': 'Auto Fit',\n 'markerSuccess': 'Marked Success',\n 'restart': 'restart',\n 'wfContext': 'Context',\n 'yes': 'YES',\n 'no': 'NO',\n 'copy': 'Copy'\n }\n}, element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (en);\n\n//# sourceURL=webpack:///./src/i18n/langs/en.js?"); /***/ }),