diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml
index 2d2603b5..695a0114 100644
--- a/.github/workflows/docker-image.yml
+++ b/.github/workflows/docker-image.yml
@@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Build the Docker image
- run: mvn clean package -Pdev -DskipTests -U -e -pl powerjob-server,powerjob-worker-agent -am && /bin/cp -rf powerjob-server/target/*.jar powerjob-server/docker/powerjob-server.jar && /bin/cp -rf powerjob-worker-agent/target/*.jar powerjob-worker-agent/powerjob-agent.jar
+ run: mvn clean package -Pdev -DskipTests -U -e && /bin/cp -rf powerjob-server/powerjob-server-starter/target/*.jar powerjob-server/docker/powerjob-server.jar && /bin/cp -rf powerjob-worker-agent/target/*.jar powerjob-worker-agent/powerjob-agent.jar
- uses: docker/build-push-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 87fcf745..c2f99971 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -23,7 +23,7 @@ jobs:
- name: Build with Maven
run: mvn -B clean package -Pdev -DskipTests --file pom.xml
- name: upload build result
- run: mkdir staging && cp powerjob-server/target/*.jar staging/powerjob-server.jar && cp powerjob-client/target/*.jar staging/powerjob-client.jar && cp powerjob-worker-agent/target/*.jar staging/powerjob-agent.jar
+ run: mkdir staging && cp powerjob-server/powerjob-server-starter/target/*.jar staging/powerjob-server.jar && cp powerjob-client/target/*.jar staging/powerjob-client.jar && cp powerjob-worker-agent/target/*.jar staging/powerjob-agent.jar
- uses: actions/upload-artifact@v1
with:
name: powerjob-server.jar
diff --git a/others/powerjob-mysql.sql b/others/powerjob-mysql.sql
index 724c1b68..f10b49d1 100644
--- a/others/powerjob-mysql.sql
+++ b/others/powerjob-mysql.sql
@@ -11,7 +11,7 @@
Target Server Version : 80021
File Encoding : 65001
- Date: 14/03/2021 19:54:37
+ Date: 05/04/2021 13:15:19
*/
SET NAMES utf8mb4;
@@ -68,7 +68,7 @@ CREATE TABLE `instance_info` (
`job_id` bigint DEFAULT NULL,
`job_params` longtext,
`last_report_time` bigint DEFAULT NULL,
- `result` longtext,
+ `result` text,
`running_times` bigint DEFAULT NULL,
`status` int DEFAULT NULL,
`task_tracker_address` varchar(255) DEFAULT NULL,
@@ -98,7 +98,7 @@ CREATE TABLE `job_info` (
`instance_time_limit` bigint DEFAULT NULL,
`job_description` varchar(255) DEFAULT NULL,
`job_name` varchar(255) DEFAULT NULL,
- `job_params` longtext,
+ `job_params` text,
`lifecycle` varchar(255) DEFAULT NULL,
`max_instance_num` int DEFAULT NULL,
`max_worker_count` int DEFAULT NULL,
@@ -176,7 +176,7 @@ CREATE TABLE `workflow_info` (
`max_wf_instance_num` int DEFAULT NULL,
`next_trigger_time` bigint DEFAULT NULL,
`notify_user_ids` varchar(255) DEFAULT NULL,
- `pedag` longtext,
+ `pedag` text,
`status` int DEFAULT NULL,
`time_expression` varchar(255) DEFAULT NULL,
`time_expression_type` int DEFAULT NULL,
@@ -194,15 +194,15 @@ CREATE TABLE `workflow_instance_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`actual_trigger_time` bigint DEFAULT NULL,
`app_id` bigint DEFAULT NULL,
- `dag` longtext,
+ `dag` text,
`expected_trigger_time` bigint DEFAULT NULL,
`finished_time` bigint DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
- `result` longtext,
+ `result` text,
`status` int DEFAULT NULL,
- `wf_context` longtext,
- `wf_init_params` longtext,
+ `wf_context` text,
+ `wf_init_params` text,
`wf_instance_id` bigint DEFAULT NULL,
`workflow_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
@@ -216,15 +216,15 @@ CREATE TABLE `workflow_node_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`app_id` bigint NOT NULL,
`enable` bit(1) NOT NULL,
- `extra` longtext,
+ `extra` text,
`gmt_create` datetime(6) NOT NULL,
`gmt_modified` datetime(6) NOT NULL,
`job_id` bigint DEFAULT NULL,
`node_name` varchar(255) DEFAULT NULL,
- `node_params` longtext,
+ `node_params` text,
`skip_when_failed` bit(1) NOT NULL,
`type` int DEFAULT NULL,
- `workflow_id` bigint NOT NULL,
+ `workflow_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX36t7rhj4mkg2a5pb4ttorscta` (`app_id`),
KEY `IDXacr0i6my8jr002ou8i1gmygju` (`workflow_id`)
diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml
index 0c8e431a..9acdfb01 100644
--- a/powerjob-client/pom.xml
+++ b/powerjob-client/pom.xml
@@ -10,13 +10,13 @@
4.0.0
powerjob-client
- 4.0.0
+ 4.0.1
jar
5.6.1
1.2.68
- 4.0.0
+ 4.0.1
3.2.4
diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml
index 0c2db1eb..d4651457 100644
--- a/powerjob-common/pom.xml
+++ b/powerjob-common/pom.xml
@@ -10,14 +10,14 @@
4.0.0
powerjob-common
- 4.0.0
+ 4.0.1
jar
1.7.30
3.10
2.6
- 29.0-jre
+ 30.1.1-jre
3.14.9
2.6.12
5.0.4
diff --git a/powerjob-common/src/main/java/tech/powerjob/common/utils/CommonUtils.java b/powerjob-common/src/main/java/tech/powerjob/common/utils/CommonUtils.java
index 2c995dae..498d5b73 100644
--- a/powerjob-common/src/main/java/tech/powerjob/common/utils/CommonUtils.java
+++ b/powerjob-common/src/main/java/tech/powerjob/common/utils/CommonUtils.java
@@ -147,6 +147,18 @@ public class CommonUtils {
return OmsConstant.NONE;
}
+ /**
+ * 格式化字符串,如果是 null 或空则显示 N/A
+ * @param str 字符串
+ * @return 结果
+ */
+ public static String formatString(String str) {
+ if (StringUtils.isEmpty(str)) {
+ return OmsConstant.NONE;
+ }
+ return str;
+ }
+
/**
* 生成 UUID
* @return uuid
diff --git a/powerjob-official-processors/pom.xml b/powerjob-official-processors/pom.xml
index 8378f60b..a20a2ea4 100644
--- a/powerjob-official-processors/pom.xml
+++ b/powerjob-official-processors/pom.xml
@@ -28,7 +28,7 @@
1.2.68
3.14.9
- 29.0-jre
+ 30.1.1-jre
2.6
3.10
diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml
index e443d590..7d2f4a1b 100644
--- a/powerjob-server/pom.xml
+++ b/powerjob-server/pom.xml
@@ -10,7 +10,7 @@
4.0.0
powerjob-server
- 4.0.0
+ 4.0.1
pom
@@ -27,7 +27,7 @@
2.9.2
2.3.4.RELEASE
- 4.0.0
+ 4.0.1
8.0.19
19.7.0.0
@@ -47,13 +47,6 @@
true
-
- 1.0.0
- 1.0.0
- 1.0.0
- 1.0.0
- 1.0.0
- 1.0.0
@@ -61,32 +54,37 @@
tech.powerjob
powerjob-server-common
- ${powerjob-server-common.version}
+ ${project.version}
tech.powerjob
powerjob-server-extension
- ${powerjob-server-extension.version}
+ ${project.version}
tech.powerjob
powerjob-server-remote
- ${powerjob-server-remote.version}
+ ${project.version}
tech.powerjob
powerjob-server-persistence
- ${powerjob-server-persistence.version}
+ ${project.version}
tech.powerjob
powerjob-server-core
- ${powerjob-server-core.version}
+ ${project.version}
tech.powerjob
powerjob-server-migrate
- ${powerjob-server-migrate.version}
+ ${project.version}
+
+
+ tech.powerjob
+ powerjob-server-starter
+ ${project.version}
diff --git a/powerjob-server/powerjob-server-common/pom.xml b/powerjob-server/powerjob-server-common/pom.xml
index e47070d5..76aa52d7 100644
--- a/powerjob-server/powerjob-server-common/pom.xml
+++ b/powerjob-server/powerjob-server-common/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-common
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-core/pom.xml b/powerjob-server/powerjob-server-core/pom.xml
index 230d1a44..c9c53d74 100644
--- a/powerjob-server/powerjob-server-core/pom.xml
+++ b/powerjob-server/powerjob-server-core/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-core
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-extension/pom.xml b/powerjob-server/powerjob-server-extension/pom.xml
index d08385ec..7095d1e0 100644
--- a/powerjob-server/powerjob-server-extension/pom.xml
+++ b/powerjob-server/powerjob-server-extension/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-extension
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-migrate/pom.xml b/powerjob-server/powerjob-server-migrate/pom.xml
index 30faa6de..e99b1710 100644
--- a/powerjob-server/powerjob-server-migrate/pom.xml
+++ b/powerjob-server/powerjob-server-migrate/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-migrate
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-migrate/src/main/java/tech/powerjob/server/migrate/MigrateController.java b/powerjob-server/powerjob-server-migrate/src/main/java/tech/powerjob/server/migrate/MigrateController.java
index 8871431c..e009519e 100644
--- a/powerjob-server/powerjob-server-migrate/src/main/java/tech/powerjob/server/migrate/MigrateController.java
+++ b/powerjob-server/powerjob-server-migrate/src/main/java/tech/powerjob/server/migrate/MigrateController.java
@@ -1,6 +1,7 @@
package tech.powerjob.server.migrate;
import com.alibaba.fastjson.JSONObject;
+import org.springframework.web.bind.annotation.GetMapping;
import tech.powerjob.common.response.ResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,7 +30,7 @@ public class MigrateController {
/**
* 修复对应 APP 下的任务信息
*/
- @RequestMapping("/v4/job")
+ @GetMapping("/v4/job")
public ResultDTO fixJobInfoFromV3ToV4(@RequestParam Long appId) {
return ResultDTO.success(v3ToV4MigrateService.fixDeprecatedProcessType(appId));
}
@@ -37,7 +38,7 @@ public class MigrateController {
/**
* 修复对应 APP 下的工作流信息
*/
- @RequestMapping("/v4/workflow")
+ @GetMapping("/v4/workflow")
public ResultDTO fixWorkflowInfoFromV3ToV4(@RequestParam Long appId){
return ResultDTO.success(v3ToV4MigrateService.fixWorkflowInfoFromV3ToV4(appId));
}
diff --git a/powerjob-server/powerjob-server-persistence/pom.xml b/powerjob-server/powerjob-server-persistence/pom.xml
index 6a6dd646..274c6a0c 100644
--- a/powerjob-server/powerjob-server-persistence/pom.xml
+++ b/powerjob-server/powerjob-server-persistence/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-persistence
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/MultiDatasourceProperties.java b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/MultiDatasourceProperties.java
new file mode 100644
index 00000000..28970ea0
--- /dev/null
+++ b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/MultiDatasourceProperties.java
@@ -0,0 +1,66 @@
+package tech.powerjob.server.persistence.config;
+
+import com.google.common.collect.Maps;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * 多重数据源配置
+ *
+ * @author Kung Yao
+ * @since 2020/4/27
+ */
+@Component
+@ConfigurationProperties("spring.datasource")
+public class MultiDatasourceProperties {
+
+ private DataSourceProperties remote = new DataSourceProperties();
+
+ private DataSourceProperties local = new DataSourceProperties();
+
+
+ public static class DataSourceProperties {
+
+ private HibernateProperties hibernate = new HibernateProperties();
+
+ public void setHibernate(HibernateProperties hibernate) {
+ this.hibernate = hibernate;
+ }
+
+ public HibernateProperties getHibernate() {
+ return hibernate;
+ }
+ }
+
+
+ public static class HibernateProperties {
+
+ private Map properties = Maps.newHashMap();
+
+ public void setProperties(Map properties) {
+ this.properties = properties;
+ }
+
+ public Map getProperties() {
+ return properties;
+ }
+ }
+
+ public void setLocal(DataSourceProperties local) {
+ this.local = local;
+ }
+
+ public void setRemote(DataSourceProperties remote) {
+ this.remote = remote;
+ }
+
+ public DataSourceProperties getLocal() {
+ return local;
+ }
+
+ public DataSourceProperties getRemote() {
+ return remote;
+ }
+}
diff --git a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/RemoteJpaConfig.java b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/RemoteJpaConfig.java
index bb1290fa..3bc52603 100644
--- a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/RemoteJpaConfig.java
+++ b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/RemoteJpaConfig.java
@@ -39,10 +39,13 @@ public class RemoteJpaConfig {
@Resource(name = "omsRemoteDatasource")
private DataSource omsRemoteDatasource;
+ @Resource(name = "multiDatasourceProperties")
+ private MultiDatasourceProperties properties;
+
public static final String CORE_PACKAGES = "tech.powerjob.server.persistence.remote";
/**
- * 生成配置文件,包括 JPA配置文件和Hibernate配置文件,相当于一下三个配置
+ * 生成配置文件,包括 JPA配置文件和Hibernate配置文件,相当于以下三个配置
* spring.jpa.show-sql=false
* spring.jpa.open-in-view=false
* spring.jpa.hibernate.ddl-auto=update
@@ -67,10 +70,11 @@ public class RemoteJpaConfig {
@Primary
@Bean(name = "remoteEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean initRemoteEntityManagerFactory(EntityManagerFactoryBuilder builder) {
-
+ Map datasourceProperties = genDatasourceProperties();
+ datasourceProperties.putAll(properties.getRemote().getHibernate().getProperties());
return builder
.dataSource(omsRemoteDatasource)
- .properties(genDatasourceProperties())
+ .properties(datasourceProperties)
.packages(CORE_PACKAGES)
.persistenceUnit("remotePersistenceUnit")
.build();
diff --git a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/dialect/PowerJobPGDialect.java b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/dialect/PowerJobPGDialect.java
new file mode 100644
index 00000000..083abe65
--- /dev/null
+++ b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/dialect/PowerJobPGDialect.java
@@ -0,0 +1,33 @@
+package tech.powerjob.server.persistence.config.dialect;
+
+import org.hibernate.dialect.PostgreSQL10Dialect;
+import org.hibernate.type.descriptor.sql.LongVarcharTypeDescriptor;
+import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
+
+import java.sql.Types;
+
+/**
+ * PostgreSQL 数据库支持,需要在 application.properties 中添加以下配置项进行激活
+ * spring.datasource.remote.hibernate.properties.hibernate.dialect=tech.powerjob.server.persistence.config.dialect.PowerJobPGDialect
+ *
+ * @author Kung Yao
+ * @author Echo009
+ * 2021/3/24 下午 04:23
+ * 1074_King
+ */
+public class PowerJobPGDialect extends PostgreSQL10Dialect {
+
+ /**
+ * 使用 {@link Types#LONGVARCHAR} 覆盖 {@link Types#CLOB} 类型
+ *
+ * 注意,如果在 PG 库创建表时使用的列类型为 oid ,那么这样会导致没法正确读取数据
+ * 在 PowerJob 中能这样用是因为 PowerJob 的所有实体类中被 @Lob 注解标记的列对应数据库中的字段类型都是 text
+ * 另外还需要注意数据库版本,如果是 10.x 以前的,需自行提供一个合适的 Dialect 类(选择合适的版本继承)
+ *
+ * 更多内容请关注该 issues:https://github.com/PowerJob/PowerJob/issues/153
+ */
+ @Override
+ public SqlTypeDescriptor getSqlTypeDescriptorOverride(int sqlCode) {
+ return Types.CLOB == sqlCode ? LongVarcharTypeDescriptor.INSTANCE : null;
+ }
+}
diff --git a/powerjob-server/powerjob-server-remote/pom.xml b/powerjob-server/powerjob-server-remote/pom.xml
index d28473f2..e6192e9f 100644
--- a/powerjob-server/powerjob-server-remote/pom.xml
+++ b/powerjob-server/powerjob-server-remote/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-remote
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/ServerInfoService.java b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/ServerInfoService.java
index a3615b85..6b83a007 100644
--- a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/ServerInfoService.java
+++ b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/ServerInfoService.java
@@ -1,5 +1,7 @@
package tech.powerjob.server.remote.server;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.boot.info.BuildProperties;
import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.common.utils.NetUtils;
@@ -33,6 +35,8 @@ public class ServerInfoService {
private final ServerInfoRepository serverInfoRepository;
+ private String version = "UNKNOWN";
+
private static final long MAX_SERVER_CLUSTER_SIZE = 10000;
private static final String SERVER_INIT_LOCK = "server_init_lock";
@@ -42,6 +46,15 @@ public class ServerInfoService {
return serverId;
}
+ public String getServerIp() {
+ return ip;
+ }
+
+ public String getServerVersion() {
+ return version;
+ }
+
+
@Autowired
public ServerInfoService(LockService lockService, ServerInfoRepository serverInfoRepository) {
@@ -121,4 +134,15 @@ public class ServerInfoService {
}
throw new PowerJobException("impossible");
}
+
+ @Autowired(required = false)
+ public void setBuildProperties(BuildProperties buildProperties) {
+ if (buildProperties == null) {
+ return;
+ }
+ String pomVersion = buildProperties.getVersion();
+ if (StringUtils.isNotBlank(pomVersion)) {
+ version = pomVersion;
+ }
+ }
}
diff --git a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/election/ServerElectionService.java b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/election/ServerElectionService.java
index ac68edc5..1370949e 100644
--- a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/election/ServerElectionService.java
+++ b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/election/ServerElectionService.java
@@ -93,7 +93,7 @@ public class ServerElectionService {
// 可能上一台机器已经完成了Server选举,需要再次判断
AppInfoDO appInfo = appInfoRepository.findById(appId).orElseThrow(() -> new RuntimeException("impossible, unless we just lost our database."));
- String address = activeAddress(originServer, downServerCache, protocol);
+ String address = activeAddress(appInfo.getCurrentServer(), downServerCache, protocol);
if (StringUtils.isNotEmpty(address)) {
return address;
}
diff --git a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/worker/WorkerClusterQueryService.java b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/worker/WorkerClusterQueryService.java
index 5cb48004..da555c0b 100644
--- a/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/worker/WorkerClusterQueryService.java
+++ b/powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/worker/WorkerClusterQueryService.java
@@ -1,14 +1,14 @@
package tech.powerjob.server.remote.worker;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
import tech.powerjob.common.model.DeployedContainerInfo;
import tech.powerjob.server.common.module.WorkerInfo;
import tech.powerjob.server.extension.WorkerFilter;
import tech.powerjob.server.persistence.remote.model.JobInfoDO;
import tech.powerjob.server.remote.server.redirector.DesignateServer;
-import com.google.common.collect.Lists;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@@ -34,6 +34,7 @@ public class WorkerClusterQueryService {
/**
* get worker for job
+ *
* @param jobInfo job
* @return worker cluster info, sorted by metrics desc
*/
@@ -44,7 +45,7 @@ public class WorkerClusterQueryService {
workers.removeIf(workerInfo -> filterWorker(workerInfo, jobInfo));
// 按健康度排序
- workers.sort((o1, o2) -> o2 .getSystemMetrics().calculateScore() - o1.getSystemMetrics().calculateScore());
+ workers.sort((o1, o2) -> o2.getSystemMetrics().calculateScore() - o1.getSystemMetrics().calculateScore());
// 限定集群大小(0代表不限制)
if (!workers.isEmpty() && jobInfo.getMaxWorkerCount() > 0 && workers.size() > jobInfo.getMaxWorkerCount()) {
@@ -56,12 +57,13 @@ public class WorkerClusterQueryService {
@DesignateServer
public List getAllWorkers(Long appId) {
List workers = Lists.newLinkedList(getWorkerInfosByAppId(appId).values());
- workers.sort((o1, o2) -> o2 .getSystemMetrics().calculateScore() - o1.getSystemMetrics().calculateScore());
+ workers.sort((o1, o2) -> o2.getSystemMetrics().calculateScore() - o1.getSystemMetrics().calculateScore());
return workers;
}
/**
* get all alive workers
+ *
* @param appId appId
* @return alive workers
*/
@@ -71,8 +73,22 @@ public class WorkerClusterQueryService {
return workers;
}
+ /**
+ * Gets worker info by address.
+ *
+ * @param appId the app id
+ * @param address the address
+ * @return the worker info by address
+ */
public Optional getWorkerInfoByAddress(Long appId, String address) {
- return Optional.ofNullable(getWorkerInfosByAppId(appId).get(address));
+ // this may cause NPE while address value is null .
+ //return Optional.ofNullable(getWorkerInfosByAppId(appId).get(address));
+ final Map workerInfosByAppId = getWorkerInfosByAppId(appId);
+ //add null check for both workerInfos Map and address
+ if (null != workerInfosByAppId && null != address) {
+ return Optional.ofNullable(workerInfosByAppId.get(address));
+ }
+ return Optional.empty();
}
public Map getAppId2ClusterStatus() {
@@ -81,7 +97,8 @@ public class WorkerClusterQueryService {
/**
* 获取某个应用容器的部署情况
- * @param appId 应用ID
+ *
+ * @param appId 应用ID
* @param containerId 容器ID
* @return 部署情况
*/
@@ -104,8 +121,9 @@ public class WorkerClusterQueryService {
/**
* filter invalid worker for job
+ *
* @param workerInfo worker info
- * @param jobInfo job info
+ * @param jobInfo job info
* @return filter this worker when return true
*/
private boolean filterWorker(WorkerInfo workerInfo, JobInfoDO jobInfo) {
diff --git a/powerjob-server/powerjob-server-starter/pom.xml b/powerjob-server/powerjob-server-starter/pom.xml
index 8b9fd0a4..fad4206c 100644
--- a/powerjob-server/powerjob-server-starter/pom.xml
+++ b/powerjob-server/powerjob-server-starter/pom.xml
@@ -5,13 +5,13 @@
powerjob-server
tech.powerjob
- 4.0.0
+ 4.0.1
../pom.xml
4.0.0
powerjob-server-starter
- 1.0.0
+ ${project.parent.version}
8
diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/config/SwaggerConfig.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/config/SwaggerConfig.java
index 890718fc..77bb4310 100644
--- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/config/SwaggerConfig.java
+++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/config/SwaggerConfig.java
@@ -1,10 +1,6 @@
package tech.powerjob.server.config;
-import tech.powerjob.server.common.PowerJobServerConfigKey;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.info.BuildProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
@@ -12,6 +8,10 @@ import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import tech.powerjob.server.common.PowerJobServerConfigKey;
+import tech.powerjob.server.remote.server.ServerInfoService;
+
+import javax.annotation.Resource;
import static springfox.documentation.builders.PathSelectors.any;
@@ -27,28 +27,19 @@ import static springfox.documentation.builders.PathSelectors.any;
@ConditionalOnProperty(name = PowerJobServerConfigKey.SWAGGER_UI_ENABLE, havingValue = "true")
public class SwaggerConfig {
- private final BuildProperties buildProperties;
-
- public SwaggerConfig(@Autowired(required = false) final BuildProperties buildProperties) {
- this.buildProperties = buildProperties;
- }
+ @Resource
+ private ServerInfoService serverInfoService;
@Bean
public Docket createRestApi() {
- String version = "unknown";
- if (buildProperties != null) {
- String pomVersion = buildProperties.getVersion();
- if (StringUtils.isNotBlank(pomVersion)) {
- version = pomVersion;
- }
- }
+
// apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中
ApiInfo apiInfo = new ApiInfoBuilder()
.title("PowerJob")
.description("Distributed scheduling and computing framework.")
.license("Apache Licence 2")
.termsOfServiceUrl("https://github.com/PowerJob/PowerJob")
- .version(version)
+ .version(serverInfoService.getServerVersion())
.build();
return new Docket(DocumentationType.SWAGGER_2)
diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/SystemInfoController.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/SystemInfoController.java
index c0167896..6d747129 100644
--- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/SystemInfoController.java
+++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/SystemInfoController.java
@@ -6,6 +6,7 @@ import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.common.constants.SwitchableStatus;
import tech.powerjob.server.persistence.remote.repository.InstanceInfoRepository;
import tech.powerjob.server.persistence.remote.repository.JobInfoRepository;
+import tech.powerjob.server.remote.server.ServerInfoService;
import tech.powerjob.server.remote.worker.WorkerClusterQueryService;
import tech.powerjob.server.common.module.WorkerInfo;
import tech.powerjob.server.web.response.SystemOverviewVO;
@@ -39,6 +40,8 @@ public class SystemInfoController {
@Resource
private InstanceInfoRepository instanceInfoRepository;
+ @Resource
+ private ServerInfoService serverInfoService;
@Resource
private WorkerClusterQueryService workerClusterQueryService;
@@ -67,6 +70,9 @@ public class SystemInfoController {
// 服务器时间
overview.setServerTime(DateFormatUtils.format(new Date(), OmsConstant.TIME_PATTERN));
+ SystemOverviewVO.CurrentServerInfo info = new SystemOverviewVO.CurrentServerInfo(serverInfoService.getServerId(), serverInfoService.getServerIp(), serverInfoService.getServerVersion());
+ overview.setCurrentServerInfo(info);
+
return ResultDTO.success(overview);
}
diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/SystemOverviewVO.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/SystemOverviewVO.java
index e1df3238..3bc86786 100644
--- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/SystemOverviewVO.java
+++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/SystemOverviewVO.java
@@ -1,6 +1,8 @@
package tech.powerjob.server.web.response;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.Getter;
/**
* 系统概览
@@ -10,6 +12,7 @@ import lombok.Data;
*/
@Data
public class SystemOverviewVO {
+
private long jobCount;
private long runningInstanceCount;
private long failedInstanceCount;
@@ -17,4 +20,14 @@ public class SystemOverviewVO {
private String timezone;
// 服务器时间
private String serverTime;
+
+ private CurrentServerInfo currentServerInfo;
+
+ @Getter
+ @AllArgsConstructor
+ public static class CurrentServerInfo {
+ private final long id;
+ private final String ip;
+ private final String version;
+ }
}
diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkerStatusVO.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkerStatusVO.java
index 35196125..32bd6ee0 100644
--- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkerStatusVO.java
+++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkerStatusVO.java
@@ -1,6 +1,7 @@
package tech.powerjob.server.web.response;
import tech.powerjob.common.model.SystemMetrics;
+import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.server.common.module.WorkerInfo;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -24,6 +25,7 @@ public class WorkerStatusVO {
private String protocol;
private String tag;
+ private String lastActiveTime;
// 1 -> 健康,绿色,2 -> 一般,橙色,3 -> 糟糕,红色,9999 -> 非在线机器
private int status;
@@ -40,9 +42,6 @@ public class WorkerStatusVO {
SystemMetrics systemMetrics = workerInfo.getSystemMetrics();
- this.protocol = workerInfo.getProtocol();
- this.tag = workerInfo.getTag();
-
this.status = 1;
this.address = workerInfo.getAddress();
this.cpuLoad = String.format(CPU_FORMAT, df.format(systemMetrics.getCpuLoad()), systemMetrics.getCpuProcessors());
@@ -69,5 +68,9 @@ public class WorkerStatusVO {
if (workerInfo.timeout()) {
this.status = 9999;
}
+
+ this.protocol = workerInfo.getProtocol();
+ this.tag = CommonUtils.formatString(workerInfo.getTag());
+ this.lastActiveTime = CommonUtils.formatTime(workerInfo.getLastActiveTime());
}
}
diff --git a/powerjob-server/powerjob-server-starter/src/main/resources/static/js/7.js b/powerjob-server/powerjob-server-starter/src/main/resources/static/js/7.js
index 6e5bc590..be3373e9 100644
--- a/powerjob-server/powerjob-server-starter/src/main/resources/static/js/7.js
+++ b/powerjob-server/powerjob-server-starter/src/main/resources/static/js/7.js
@@ -8,7 +8,7 @@
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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: \"Home\",\n data: function data() {\n return {\n systemInfo: {\n jobCount: \"N/A\",\n runningInstanceCount: \"N/A\",\n failedInstanceCount: \"N/A\",\n serverTime: \"UNKNOWN\",\n timezone: \"UNKNOWN\"\n },\n activeWorkerCount: \"N/A\",\n workerList: []\n };\n },\n methods: {\n workerTableRowClassName: function workerTableRowClassName(_ref) {\n var row = _ref.row;\n\n switch (row.status) {\n case 1:\n return 'success-row';\n\n case 2:\n return 'warning-row';\n\n default:\n return 'error-row';\n }\n }\n },\n mounted: function mounted() {\n var that = this;\n var appId = that.$store.state.appInfo.id; // 请求 Worker 列表\n\n that.axios.get(\"/system/listWorker?appId=\" + appId).then(function (res) {\n res.sort(function (a, b) {\n return a.status - b.status;\n });\n that.workerList = res;\n that.activeWorkerCount = that.workerList.length;\n }); // 请求 Overview\n\n that.axios.get(\"/system/overview?appId=\" + appId).then(function (res) {\n that.systemInfo = res; // 对比服务器时间和本地时间,误差超过一定时间弹窗警告\n // let localTime=new Date().getTime();\n // let serverTime = res.serverTime;\n // console.log(\"localTime: %o, serverTime: %o\", localTime, serverTime);\n //\n // let offset = localTime - serverTime;\n // if (Math.abs(offset) > 60000) {\n // this.$notify({\n // title: '警告',\n // message: '调度中心服务器与本地存在时间差,可能影响任务调度准确性,建议排查时间问题!',\n // type: 'warning',\n // duration: 0\n // });\n // }\n });\n }\n});\n\n//# sourceURL=webpack:///./src/components/views/Home.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 core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/_core-js@3.9.1@core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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: \"Home\",\n data: function data() {\n return {\n systemInfo: {\n jobCount: \"N/A\",\n runningInstanceCount: \"N/A\",\n failedInstanceCount: \"N/A\",\n serverTime: \"UNKNOWN\",\n timezone: \"UNKNOWN\"\n },\n activeWorkerCount: \"N/A\",\n workerList: []\n };\n },\n methods: {\n workerTableRowClassName: function workerTableRowClassName(_ref) {\n var row = _ref.row;\n\n switch (row.status) {\n case 1:\n return 'success-row';\n\n case 2:\n return 'warning-row';\n\n case 9999:\n return 'offline-row';\n\n default:\n return 'error-row';\n }\n }\n },\n mounted: function mounted() {\n var that = this;\n var appId = that.$store.state.appInfo.id; // 请求 Worker 列表\n\n that.axios.get(\"/system/listWorker?appId=\" + appId).then(function (res) {\n res.sort(function (a, b) {\n return a.status - b.status;\n });\n that.workerList = res;\n var num = 0;\n that.workerList.forEach(function (w) {\n if (w.status !== 9999) {\n num++;\n }\n });\n that.activeWorkerCount = num;\n }); // 请求 Overview\n\n that.axios.get(\"/system/overview?appId=\" + appId).then(function (res) {\n that.systemInfo = res; // 对比服务器时间和本地时间,误差超过一定时间弹窗警告\n // let localTime=new Date().getTime();\n // let serverTime = res.serverTime;\n // console.log(\"localTime: %o, serverTime: %o\", localTime, serverTime);\n //\n // let offset = localTime - serverTime;\n // if (Math.abs(offset) > 60000) {\n // this.$notify({\n // title: '警告',\n // message: '调度中心服务器与本地存在时间差,可能影响任务调度准确性,建议排查时间问题!',\n // type: 'warning',\n // duration: 0\n // });\n // }\n });\n }\n});\n\n//# sourceURL=webpack:///./src/components/views/Home.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");
/***/ }),
@@ -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 export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"home\" } },\n [\n _c(\n \"el-row\",\n { attrs: { gutter: 24 } },\n [\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\n \"el-card\",\n {\n staticStyle: { \"text-align\": \"center\" },\n attrs: { shadow: \"always\" }\n },\n [\n _c(\"div\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"message.appName\")) + \" \")\n ]),\n _c(\"div\", [\n _vm._v(\n \" \" + _vm._s(this.$store.state.appInfo.appName) + \" \"\n )\n ])\n ]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\n \"el-card\",\n {\n staticStyle: { \"text-align\": \"center\" },\n attrs: { shadow: \"always\" }\n },\n [\n _c(\"div\", [\n _c(\n \"a\",\n {\n attrs: {\n href: \"https://github.com/PowerJob/PowerJob\",\n target: \"_blank\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.githubURL\")))]\n )\n ]),\n _c(\"div\", [\n _c(\n \"a\",\n {\n attrs: {\n href: \"https://github.com/PowerJob/PowerJob/wiki\",\n target: \"_blank\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.docURL\")))]\n )\n ])\n ]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\"el-card\", { attrs: { shadow: \"always\" } }, [\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.omsServerTimezone\")) +\n \":\" +\n _vm._s(_vm.systemInfo.timezone) +\n \" \"\n )\n ]),\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.omsServerTime\")) +\n \":\" +\n _vm._s(_vm.systemInfo.serverTime) +\n \" \"\n )\n ])\n ])\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\"el-card\", { attrs: { shadow: \"always\" } }, [\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.localBrowserTimezone\")) +\n \":\" +\n _vm._s(Intl.DateTimeFormat().resolvedOptions().timeZone) +\n \" \"\n )\n ]),\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.localBrowserTime\")) +\n \":\" +\n _vm._s(this.common.timestamp2Str(new Date().getTime())) +\n \" \"\n )\n ])\n ])\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-row\",\n { attrs: { gutter: 24 } },\n [\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.totalJobNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.systemInfo.jobCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-orange\" })\n ])\n ]),\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.runningInstanceNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.systemInfo.runningInstanceCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-timer\" })\n ])\n ]),\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.recentFailedInstanceNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.systemInfo.failedInstanceCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-bell\" })\n ])\n ]),\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.workerNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.activeWorkerCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-cpu\" })\n ])\n ])\n ],\n 1\n ),\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 24 } },\n [\n _c(\n \"el-table\",\n {\n staticStyle: { width: \"100%\" },\n attrs: {\n data: _vm.workerList,\n height: \"400px\",\n \"row-class-name\": _vm.workerTableRowClassName\n }\n },\n [\n _c(\"el-table-column\", {\n attrs: {\n prop: \"address\",\n label: _vm.$t(\"message.workerAddress\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: { prop: \"cpuLoad\", label: _vm.$t(\"message.cpuLoad\") }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"memoryLoad\",\n label: _vm.$t(\"message.memoryLoad\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"diskLoad\",\n label: _vm.$t(\"message.diskLoad\")\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/views/Home.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%225adedfe8-vue-loader-template%22%7D!./node_modules/_vue-loader@15.9.6@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./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 export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"home\" } },\n [\n _c(\n \"el-row\",\n { attrs: { gutter: 24 } },\n [\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\n \"el-card\",\n {\n staticStyle: { \"text-align\": \"center\" },\n attrs: { shadow: \"always\" }\n },\n [\n _c(\"div\", [\n _vm._v(\" \" + _vm._s(_vm.$t(\"message.appName\")) + \" \")\n ]),\n _c(\"div\", [\n _vm._v(\n \" \" + _vm._s(this.$store.state.appInfo.appName) + \" \"\n )\n ])\n ]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\n \"el-card\",\n {\n staticStyle: { \"text-align\": \"center\" },\n attrs: { shadow: \"always\" }\n },\n [\n _c(\"div\", [\n _c(\n \"a\",\n {\n attrs: {\n href: \"https://github.com/PowerJob/PowerJob\",\n target: \"_blank\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.githubURL\")))]\n )\n ]),\n _c(\"div\", [\n _c(\n \"a\",\n {\n attrs: {\n href: \"https://github.com/PowerJob/PowerJob/wiki\",\n target: \"_blank\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.docURL\")))]\n )\n ])\n ]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\"el-card\", { attrs: { shadow: \"always\" } }, [\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.omsServerTimezone\")) +\n \":\" +\n _vm._s(_vm.systemInfo.timezone) +\n \" \"\n )\n ]),\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.omsServerTime\")) +\n \":\" +\n _vm._s(_vm.systemInfo.serverTime) +\n \" \"\n )\n ])\n ])\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\"el-card\", { attrs: { shadow: \"always\" } }, [\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.localBrowserTimezone\")) +\n \":\" +\n _vm._s(Intl.DateTimeFormat().resolvedOptions().timeZone) +\n \" \"\n )\n ]),\n _c(\"div\", [\n _vm._v(\n \" \" +\n _vm._s(_vm.$t(\"message.localBrowserTime\")) +\n \":\" +\n _vm._s(this.common.timestamp2Str(new Date().getTime())) +\n \" \"\n )\n ])\n ])\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-row\",\n { attrs: { gutter: 24 } },\n [\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.totalJobNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.systemInfo.jobCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-orange\" })\n ])\n ]),\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.runningInstanceNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.systemInfo.runningInstanceCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-timer\" })\n ])\n ]),\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.recentFailedInstanceNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.systemInfo.failedInstanceCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-bell\" })\n ])\n ]),\n _c(\"el-col\", { attrs: { span: 6 } }, [\n _c(\"div\", { staticClass: \"wrap\" }, [\n _c(\"div\", { staticClass: \"grid-content bg-purple\" }, [\n _c(\"div\", { staticClass: \"text mTitle\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.workerNum\")))\n ]),\n _c(\"div\", { staticClass: \"text mText\" }, [\n _vm._v(_vm._s(_vm.activeWorkerCount))\n ])\n ]),\n _c(\"i\", { staticClass: \"el-icon-cpu\" })\n ])\n ])\n ],\n 1\n ),\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 24 } },\n [\n _c(\n \"el-table\",\n {\n staticStyle: { width: \"100%\" },\n attrs: {\n data: _vm.workerList,\n height: \"400px\",\n \"row-class-name\": _vm.workerTableRowClassName\n }\n },\n [\n _c(\"el-table-column\", {\n attrs: {\n prop: \"address\",\n label: _vm.$t(\"message.workerAddress\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: { prop: \"cpuLoad\", label: _vm.$t(\"message.cpuLoad\") }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"memoryLoad\",\n label: _vm.$t(\"message.memoryLoad\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"diskLoad\",\n label: _vm.$t(\"message.diskLoad\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: { prop: \"tag\", label: \"tag\" }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"lastActiveTime\",\n label: _vm.$t(\"message.lastActiveTime\")\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/views/Home.vue?./node_modules/_cache-loader@4.1.0@cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%225adedfe8-vue-loader-template%22%7D!./node_modules/_vue-loader@15.9.6@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./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");
/***/ }),
@@ -31,7 +31,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) *
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
-eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/* 头部信息 */\\n.wrap[data-v-069f7be0] {\\n background: #fff;\\n display: flex;\\n text-align: center;\\n justify-content: space-around;\\n align-items: center;\\n margin: 10px;\\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.2);\\n font-size: 1.5rem;\\n font-weight: bolder;\\n height: 131px;\\n}\\n.mTitle[data-v-069f7be0]{\\n font-size: 16px;\\n color:#0f0f0fad;\\n margin-bottom: 8px;\\n}\\n.mText[data-v-069f7be0]{\\n font-size: 18px;\\n color:#0f0f0fff;\\n margin-bottom: 8px;\\n}\\n.el-card[data-v-069f7be0] {\\n margin: 10px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./src/components/views/Home.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/_vue-loader@15.9.6@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-1-2!./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("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/* 头部信息 */\\n.wrap[data-v-069f7be0] {\\n background: #fff;\\n display: flex;\\n text-align: center;\\n justify-content: space-around;\\n align-items: center;\\n margin: 10px;\\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.2);\\n font-size: 1.5rem;\\n font-weight: bolder;\\n height: 131px;\\n}\\n.mTitle[data-v-069f7be0]{\\n font-size: 16px;\\n color:#0f0f0fad;\\n margin-bottom: 8px;\\n}\\n.mText[data-v-069f7be0]{\\n font-size: 18px;\\n color:#0f0f0fff;\\n margin-bottom: 8px;\\n}\\n.el-card[data-v-069f7be0] {\\n margin: 10px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./src/components/views/Home.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/_vue-loader@15.9.6@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-1-2!./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");
/***/ }),
@@ -42,7 +42,7 @@ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../.
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
-eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n.el-table .warning-row {\\n color: darkgoldenrod;\\n}\\n.el-table .success-row {\\n color: green;\\n}\\n.el-table .error-row {\\n color: red;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./src/components/views/Home.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/_vue-loader@15.9.6@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-1-2!./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("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ \"./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\n.el-table .warning-row {\\n color: darkgoldenrod;\\n}\\n.el-table .success-row {\\n color: green;\\n}\\n.el-table .error-row {\\n color: red;\\n}\\n.el-table .offline-row {\\n color: darkgray;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./src/components/views/Home.vue?./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/_vue-loader@15.9.6@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-1-2!./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 07e8359d..74218006 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: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?");
+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 'lastActiveTime': '上次在线时间',\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: 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?");
+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 'lastActiveTime': 'Last Active Time',\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?");
/***/ }),
diff --git a/powerjob-worker-agent/pom.xml b/powerjob-worker-agent/pom.xml
index d56bdae9..6e551f9c 100644
--- a/powerjob-worker-agent/pom.xml
+++ b/powerjob-worker-agent/pom.xml
@@ -10,12 +10,12 @@
4.0.0
powerjob-worker-agent
- 4.0.0
+ 4.0.1
jar
- 4.0.0
+ 4.0.1
1.2.3
4.3.2
diff --git a/powerjob-worker-samples/pom.xml b/powerjob-worker-samples/pom.xml
index afe99262..af6f94c3 100644
--- a/powerjob-worker-samples/pom.xml
+++ b/powerjob-worker-samples/pom.xml
@@ -10,11 +10,11 @@
4.0.0
powerjob-worker-samples
- 4.0.0
+ 4.0.1
2.3.4.RELEASE
- 4.0.0
+ 4.0.1
1.2.68
1.1.0
diff --git a/powerjob-worker-spring-boot-starter/pom.xml b/powerjob-worker-spring-boot-starter/pom.xml
index 8097e1b9..5bc95f91 100644
--- a/powerjob-worker-spring-boot-starter/pom.xml
+++ b/powerjob-worker-spring-boot-starter/pom.xml
@@ -10,11 +10,11 @@
4.0.0
powerjob-worker-spring-boot-starter
- 4.0.0
+ 4.0.1
jar
- 4.0.0
+ 4.0.1
2.3.4.RELEASE
diff --git a/powerjob-worker/pom.xml b/powerjob-worker/pom.xml
index 17d0d52b..4af86661 100644
--- a/powerjob-worker/pom.xml
+++ b/powerjob-worker/pom.xml
@@ -10,12 +10,12 @@
4.0.0
powerjob-worker
- 4.0.0
+ 4.0.1
jar
5.2.4.RELEASE
- 4.0.0
+ 4.0.1
1.4.200
3.4.2
5.6.1