diff --git a/others/oms-sql.sql b/others/oms-sql.sql
index fca1aca6..332cd8ee 100644
--- a/others/oms-sql.sql
+++ b/others/oms-sql.sql
@@ -2,14 +2,14 @@
Navicat Premium Data Transfer
Source Server Type : MySQL
- Source Server Version : 50724
- Source Schema : oms-product
+ Source Server Version : 80020
+ Source Schema : powerjob-product
Target Server Type : MySQL
- Target Server Version : 50724
+ Target Server Version : 80020
File Encoding : 65001
- Date: 07/06/2020 11:11:47
+ Date: 23/06/2020 22:30:06
*/
SET NAMES utf8mb4;
@@ -20,130 +20,131 @@ SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
DROP TABLE IF EXISTS `app_info`;
CREATE TABLE `app_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `id` bigint NOT NULL AUTO_INCREMENT,
`app_name` varchar(255) DEFAULT NULL,
`current_server` varchar(255) DEFAULT NULL,
- `description` varchar(255) DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
+ `password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `appNameUK` (`app_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for container_info
-- ----------------------------
DROP TABLE IF EXISTS `container_info`;
CREATE TABLE `container_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `app_id` bigint(20) DEFAULT NULL,
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `app_id` bigint DEFAULT NULL,
`container_name` varchar(255) DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
`last_deploy_time` datetime(6) DEFAULT NULL,
`source_info` varchar(255) DEFAULT NULL,
- `source_type` int(11) DEFAULT NULL,
- `status` int(11) DEFAULT NULL,
+ `source_type` int DEFAULT NULL,
+ `status` int DEFAULT NULL,
`version` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX8hixyaktlnwil2w9up6b0p898` (`app_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for instance_info
-- ----------------------------
DROP TABLE IF EXISTS `instance_info`;
CREATE TABLE `instance_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `actual_trigger_time` bigint(20) DEFAULT NULL,
- `app_id` bigint(20) DEFAULT NULL,
- `expected_trigger_time` bigint(20) DEFAULT NULL,
- `finished_time` bigint(20) DEFAULT NULL,
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `actual_trigger_time` bigint DEFAULT NULL,
+ `app_id` bigint DEFAULT NULL,
+ `expected_trigger_time` bigint DEFAULT NULL,
+ `finished_time` bigint DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
- `instance_id` bigint(20) DEFAULT NULL,
+ `instance_id` bigint DEFAULT NULL,
`instance_params` text,
- `job_id` bigint(20) DEFAULT NULL,
+ `job_id` bigint DEFAULT NULL,
+ `last_report_time` bigint DEFAULT NULL,
`result` text,
- `running_times` bigint(20) DEFAULT NULL,
- `status` int(11) DEFAULT NULL,
+ `running_times` bigint DEFAULT NULL,
+ `status` int DEFAULT NULL,
`task_tracker_address` varchar(255) DEFAULT NULL,
- `type` int(11) DEFAULT NULL,
- `wf_instance_id` bigint(20) DEFAULT NULL,
+ `type` int DEFAULT NULL,
+ `wf_instance_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX5b1nhpe5je7gc5s1ur200njr7` (`job_id`),
KEY `IDXjnji5lrr195kswk6f7mfhinrs` (`app_id`),
KEY `IDXa98hq3yu0l863wuotdjl7noum` (`instance_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for job_info
-- ----------------------------
DROP TABLE IF EXISTS `job_info`;
CREATE TABLE `job_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `app_id` bigint(20) DEFAULT NULL,
- `concurrency` int(11) DEFAULT NULL,
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `app_id` bigint DEFAULT NULL,
+ `concurrency` int DEFAULT NULL,
`designated_workers` varchar(255) DEFAULT NULL,
- `execute_type` int(11) DEFAULT NULL,
+ `execute_type` int DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
- `instance_retry_num` int(11) DEFAULT NULL,
- `instance_time_limit` bigint(20) DEFAULT NULL,
+ `instance_retry_num` int DEFAULT NULL,
+ `instance_time_limit` bigint DEFAULT NULL,
`job_description` varchar(255) DEFAULT NULL,
`job_name` varchar(255) DEFAULT NULL,
`job_params` varchar(255) DEFAULT NULL,
- `max_instance_num` int(11) DEFAULT NULL,
- `max_worker_count` int(11) DEFAULT NULL,
+ `max_instance_num` int DEFAULT NULL,
+ `max_worker_count` int DEFAULT NULL,
`min_cpu_cores` double NOT NULL,
`min_disk_space` double NOT NULL,
`min_memory_space` double NOT NULL,
- `next_trigger_time` bigint(20) DEFAULT NULL,
+ `next_trigger_time` bigint DEFAULT NULL,
`notify_user_ids` varchar(255) DEFAULT NULL,
`processor_info` text,
- `processor_type` int(11) DEFAULT NULL,
- `status` int(11) DEFAULT NULL,
- `task_retry_num` int(11) DEFAULT NULL,
+ `processor_type` int DEFAULT NULL,
+ `status` int DEFAULT NULL,
+ `task_retry_num` int DEFAULT NULL,
`time_expression` varchar(255) DEFAULT NULL,
- `time_expression_type` int(11) DEFAULT NULL,
+ `time_expression_type` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDXk2xprmn3lldmlcb52i36udll1` (`app_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for oms_lock
-- ----------------------------
DROP TABLE IF EXISTS `oms_lock`;
CREATE TABLE `oms_lock` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `id` bigint NOT NULL AUTO_INCREMENT,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
`lock_name` varchar(255) DEFAULT NULL,
- `max_lock_time` bigint(20) DEFAULT NULL,
+ `max_lock_time` bigint DEFAULT NULL,
`ownerip` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `lockNameUK` (`lock_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for server_info
-- ----------------------------
DROP TABLE IF EXISTS `server_info`;
CREATE TABLE `server_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `id` bigint NOT NULL AUTO_INCREMENT,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
`ip` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UKtk8ytgpl7mpukhnvhbl82kgvy` (`ip`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for user_info
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `id` bigint NOT NULL AUTO_INCREMENT,
`email` varchar(255) DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
@@ -151,47 +152,47 @@ CREATE TABLE `user_info` (
`phone` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for workflow_info
-- ----------------------------
DROP TABLE IF EXISTS `workflow_info`;
CREATE TABLE `workflow_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `app_id` bigint(20) DEFAULT NULL,
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `app_id` bigint DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
- `max_wf_instance_num` int(11) DEFAULT NULL,
- `next_trigger_time` bigint(20) DEFAULT NULL,
+ `max_wf_instance_num` int DEFAULT NULL,
+ `next_trigger_time` bigint DEFAULT NULL,
`notify_user_ids` varchar(255) DEFAULT NULL,
`pedag` text,
- `status` int(11) DEFAULT NULL,
+ `status` int DEFAULT NULL,
`time_expression` varchar(255) DEFAULT NULL,
- `time_expression_type` int(11) DEFAULT NULL,
+ `time_expression_type` int DEFAULT NULL,
`wf_description` varchar(255) DEFAULT NULL,
`wf_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX7uo5w0e3beeho3fnx9t7eiol3` (`app_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Table structure for workflow_instance_info
-- ----------------------------
DROP TABLE IF EXISTS `workflow_instance_info`;
CREATE TABLE `workflow_instance_info` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `actual_trigger_time` bigint(20) DEFAULT NULL,
- `app_id` bigint(20) DEFAULT NULL,
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `actual_trigger_time` bigint DEFAULT NULL,
+ `app_id` bigint DEFAULT NULL,
`dag` text,
- `finished_time` bigint(20) DEFAULT NULL,
+ `finished_time` bigint DEFAULT NULL,
`gmt_create` datetime(6) DEFAULT NULL,
`gmt_modified` datetime(6) DEFAULT NULL,
`result` text,
- `status` int(11) DEFAULT NULL,
- `wf_instance_id` bigint(20) DEFAULT NULL,
- `workflow_id` bigint(20) DEFAULT NULL,
+ `status` int DEFAULT NULL,
+ `wf_instance_id` bigint DEFAULT NULL,
+ `workflow_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/others/script/build_docker.sh b/others/script/build_docker.sh
index 3d91f178..d245a8dc 100755
--- a/others/script/build_docker.sh
+++ b/others/script/build_docker.sh
@@ -62,8 +62,10 @@ if [ "$startup" = "y" ] || [ "$startup" = "Y" ]; then
echo "================== 准备启动 powerjob-server =================="
docker run -d \
--name powerjob-server \
- -p 7700:7700 -p 10086:10086 \
+ -p 7700:7700 -p 10086:10086 -p 5001:5005 -p 10001:10000 \
+ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \
-e PARAMS="--spring.profiles.active=pre" \
+ -e TZ="Asia/Shanghai" \
-v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \
tjqq/powerjob-server:$version
sleep 1
@@ -74,8 +76,21 @@ if [ "$startup" = "y" ] || [ "$startup" = "Y" ]; then
serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server)
serverAddress="$serverIP:7700"
echo "使用的Server地址:$serverAddress"
- docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27777:27777 --name powerjob-agent -v ~/docker/powerjob-agent:/root tjqq/powerjob-agent:$version
- docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27778:27777 --name powerjob-agent2 -v ~/docker/powerjob-agent2:/root tjqq/powerjob-agent:$version
+ docker run -d \
+ --name powerjob-agent \
+ -p 27777:27777 -p 5002:5005 -p 10002:10000 \
+ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \
+ -e PARAMS="--app powerjob-agent-test --server $serverAddress" \
+ -v ~/docker/powerjob-agent:/root \
+ tjqq/powerjob-agent:$version
+
+ docker run -d \
+ --name powerjob-agent2 \
+ -p 27778:27777 -p 5003:5005 -p 10003:10000 \
+ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" \
+ -e PARAMS="--app powerjob-agent-test --server $serverAddress" \
+ -v ~/docker/powerjob-agent2:/root \
+ tjqq/powerjob-agent:$version
tail -f -n 100 ~/docker/powerjob-agent/powerjob/logs/powerjob-agent-application.log
fi
\ No newline at end of file
diff --git a/others/script/debug.sh b/others/script/debug.sh
deleted file mode 100644
index e0fa1656..00000000
--- a/others/script/debug.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# 一键部署脚本,请勿挪动脚本
-cd `dirname $0`/../.. || exit
-echo "================== 构建 jar =================="
-mvn clean package -DskipTests -Pdev -e -U
-echo "================== 拷贝 jar =================="
-/bin/cp -rf powerjob-server/target/*.jar others/powerjob-server.jar
-ls -l others/powerjob-server.jar
-echo "================== debug 模式启动 =================="
-nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar others/powerjob-server.jar > powerjob-server.log &
-sleep 100
-tail --pid=$$ -f -n 1000 others/powerjob-server.log
diff --git a/others/script/jenkins_auto.sh b/others/script/jenkins_auto.sh
deleted file mode 100644
index 3af4c6fa..00000000
--- a/others/script/jenkins_auto.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-cd `dirname $0`/../.. || exit
-echo "================== 构建 jar =================="
-mvn clean package -Pdev -DskipTests -U -e -pl powerjob-server,powerjob-worker-agent -am
-echo "================== 拷贝 jar =================="
-/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
-echo "================== 关闭老应用 =================="
-docker stop powerjob-server
-docker stop powerjob-agent
-docker stop powerjob-agent2
-echo "================== 删除老容器 =================="
-docker container rm powerjob-server
-docker container rm powerjob-agent
-docker container rm powerjob-agent2
-echo "================== 删除旧镜像 =================="
-docker rmi -f tjqq/powerjob-server:latest
-docker rmi -f tjqq/powerjob-agent:latest
-echo "================== 构建 powerjob-server 镜像 =================="
-docker build -t tjqq/powerjob-server:latest powerjob-server/docker/. || exit
-echo "================== 构建 powerjob-agent 镜像 =================="
-docker build -t tjqq/powerjob-agent:latest powerjob-worker-agent/. || exit
-echo "================== 准备启动 powerjob-server =================="
-docker run -d \
- --name powerjob-server \
- -p 7700:7700 -p 10086:10086 \
- -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://172.27.147.252:3306/oms-product?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://172.27.147.252:27017/oms-product" \
- -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \
- tjqq/powerjob-server:latest
-sleep 60
-echo "================== 准备启动 powerjob-client =================="
-serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server)
-serverAddress="$serverIP:7700"
-echo "使用的Server地址:$serverAddress"
-docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27777:27777 --name powerjob-agent -v ~/docker/powerjob-agent:/root tjqq/powerjob-agent:latest
-docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27778:27777 --name powerjob-agent2 -v ~/docker/powerjob-agent2:/root tjqq/powerjob-agent:latest
-
diff --git a/others/script/jenkins_auto_build.sh b/others/script/jenkins_auto_build.sh
new file mode 100755
index 00000000..31dedf78
--- /dev/null
+++ b/others/script/jenkins_auto_build.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+cd `dirname $0`/../.. || exit
+echo "================== 构建 jar =================="
+mvn clean package -Pdev -DskipTests -U -e -pl powerjob-server,powerjob-worker-agent -am
+echo "================== 拷贝 jar =================="
+/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
+echo "================== 关闭老应用 =================="
+docker stop powerjob-server
+docker stop powerjob-agent
+docker stop powerjob-agent2
+echo "================== 删除老容器 =================="
+docker container rm powerjob-server
+docker container rm powerjob-agent
+docker container rm powerjob-agent2
+echo "================== 删除旧镜像 =================="
+docker rmi -f tjqq/powerjob-server:latest
+docker rmi -f tjqq/powerjob-agent:latest
+echo "================== 构建 powerjob-server 镜像 =================="
+docker build -t tjqq/powerjob-server:latest powerjob-server/docker/. || exit
+echo "================== 构建 powerjob-agent 镜像 =================="
+docker build -t tjqq/powerjob-agent:latest powerjob-worker-agent/. || exit
+echo "================== 准备启动 powerjob-server =================="
+docker run -d \
+ --restart=always \
+ --name powerjob-server \
+ -p 7700:7700 -p 10086:10086 -p 5001:5005 -p 10001:10000 \
+ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \
+ -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://remotehost:27017/powerjob-product" \
+ -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \
+ tjqq/powerjob-server:latest
+sleep 60
+echo "================== 准备启动 powerjob-agent =================="
+serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server)
+serverAddress="$serverIP:7700"
+echo "使用的Server地址:$serverAddress"
+
+docker run -d \
+ --restart=always \
+ --name powerjob-agent \
+ -p 27777:27777 -p 5002:5005 -p 10002:10000 \
+ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \
+ -e PARAMS="--app powerjob-agent-test --server $serverAddress" \
+ -v ~/docker/powerjob-agent:/root \
+ tjqq/powerjob-agent:latest
+
+docker run -d \
+ --restart=always \
+ --name powerjob-agent2 \
+ -p 27778:27777 -p 5003:5005 -p 10003:10000 \
+ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \
+ -e PARAMS="--app powerjob-agent-test --server $serverAddress" \
+ -v ~/docker/powerjob-agent2:/root \
+ tjqq/powerjob-agent:latest
+
diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml
index 951ca22b..475ca9b9 100644
--- a/powerjob-client/pom.xml
+++ b/powerjob-client/pom.xml
@@ -10,11 +10,11 @@
4.0.0
powerjob-client
- 3.1.0
+ 3.1.1
jar
- 3.1.0
+ 3.1.1
5.6.1
diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml
index 0e9d02c1..117fc938 100644
--- a/powerjob-common/pom.xml
+++ b/powerjob-common/pom.xml
@@ -10,7 +10,7 @@
4.0.0
powerjob-common
- 3.1.0
+ 3.1.1
jar
diff --git a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/model/InstanceDetail.java b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/model/InstanceDetail.java
index 4f6a7fca..c9ab4eaa 100644
--- a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/model/InstanceDetail.java
+++ b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/model/InstanceDetail.java
@@ -43,7 +43,7 @@ public class InstanceDetail implements OmsSerializable {
private String startTime;
private String finishedTime;
private String result;
- private String status;
+ private int status;
}
// MapReduce 和 Broadcast 任务的 extra ->
diff --git a/powerjob-server/docker/Dockerfile b/powerjob-server/docker/Dockerfile
index 473d4f62..62127270 100644
--- a/powerjob-server/docker/Dockerfile
+++ b/powerjob-server/docker/Dockerfile
@@ -1,5 +1,5 @@
-# 基础镜像
-FROM openjdk:8
+# 基础镜像(支持 amd64 & arm64),based on Ubuntu 18.04.4 LTS
+FROM adoptopenjdk:8-jdk-hotspot
# 维护者
MAINTAINER tengjiqi@gmail.com
# 下载并安装 maven
@@ -11,13 +11,14 @@ COPY settings.xml /opt/powerjob-maven/conf/settings.xml
# 设置 maven 环境变量(maven invoker 读取该变量调用 maven)
ENV M2_HOME=/opt/powerjob-maven
-# 设置时区(Debian专用方法)
+# 设置时区
ENV TZ=Asia/Shanghai
# 设置其他环境变量
ENV APP_NAME=powerjob-server
-# 传递 SpringBoot 启动参数
+# 传递 SpringBoot 启动参数 和 JVM参数
ENV PARAMS=""
+ENV JVMOPTIONS=""
# 将应用 jar 包拷入 docker
COPY powerjob-server.jar /powerjob-server.jar
# 暴露端口(HTTP + AKKA)
@@ -27,4 +28,4 @@ RUN mkdir -p /root/powerjob-server
# 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机)
VOLUME /root/powerjob-server
# 启动应用
-ENTRYPOINT ["sh","-c","java -jar /powerjob-server.jar $PARAMS"]
+ENTRYPOINT ["sh","-c","java $JVMOPTIONS -jar /powerjob-server.jar $PARAMS"]
diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml
index 59d9120e..43bdc1bd 100644
--- a/powerjob-server/pom.xml
+++ b/powerjob-server/pom.xml
@@ -10,13 +10,13 @@
4.0.0
powerjob-server
- 3.1.0
+ 3.1.1
jar
2.9.2
2.2.6.RELEASE
- 3.1.0
+ 3.1.1
8.0.19
1.4.200
2.5.2
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java
index 3c434699..e5ef8513 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java
@@ -68,7 +68,7 @@ public interface InstanceInfoRepository extends JpaRepository findByJobIdInAndStatusIn(List jobIds, List status);
// 删除历史数据,JPA自带的删除居然是根据ID循环删,2000条数据删了几秒,也太拉垮了吧...
- // 结果只能用 int 接受
+ // 结果只能用 int 接收
@Modifying
@Transactional
@Query(value = "delete from instance_info where gmt_modified < ?1", nativeQuery = true)
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java
index 1f94bd77..7f5200a8 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java
@@ -9,6 +9,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO;
import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository;
import com.github.kfcfans.powerjob.server.service.ha.WorkerManagerService;
import com.github.kfcfans.powerjob.server.service.instance.InstanceManager;
+import com.github.kfcfans.powerjob.server.service.instance.InstanceMetadataService;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -39,6 +40,8 @@ public class DispatchService {
@Resource
private InstanceManager instanceManager;
@Resource
+ private InstanceMetadataService instanceMetadataService;
+ @Resource
private InstanceInfoRepository instanceInfoRepository;
private static final Splitter commaSplitter = Splitter.on(",");
@@ -142,5 +145,8 @@ public class DispatchService {
// 修改状态
instanceInfoRepository.update4TriggerSucceed(instanceId, WAITING_WORKER_RECEIVE.getV(), currentRunningTimes + 1, current, taskTrackerAddress, dbInstanceParams, now);
+
+ // 装载缓存
+ instanceMetadataService.loadJobInfo(instanceId, jobInfo);
}
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java
index da3c03d5..025a5720 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java
@@ -11,7 +11,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO;
import com.github.kfcfans.powerjob.server.persistence.local.LocalInstanceLogDO;
import com.github.kfcfans.powerjob.server.persistence.local.LocalInstanceLogRepository;
import com.github.kfcfans.powerjob.server.persistence.mongodb.GridFsManager;
-import com.github.kfcfans.powerjob.server.service.instance.InstanceManager;
+import com.github.kfcfans.powerjob.server.service.instance.InstanceMetadataService;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -46,7 +46,7 @@ import java.util.stream.Stream;
public class InstanceLogService {
@Resource
- private InstanceManager instanceManager;
+ private InstanceMetadataService instanceMetadataService;
@Resource
private GridFsManager gridFsManager;
// 本地数据库操作bean
@@ -320,13 +320,12 @@ public class InstanceLogService {
// 定时删除秒级任务的日志
List frequentInstanceIds = Lists.newLinkedList();
instanceId2LastReportTime.keySet().forEach(instanceId -> {
- JobInfoDO jobInfo = instanceManager.fetchJobInfo(instanceId);
- if (jobInfo == null) {
- return;
- }
-
- if (TimeExpressionType.frequentTypes.contains(jobInfo.getTimeExpressionType())) {
- frequentInstanceIds.add(instanceId);
+ try {
+ JobInfoDO jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(instanceId);
+ if (TimeExpressionType.frequentTypes.contains(jobInfo.getTimeExpressionType())) {
+ frequentInstanceIds.add(instanceId);
+ }
+ }catch (Exception ignore) {
}
});
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java
index d96e20b1..1c494f62 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java
@@ -65,7 +65,7 @@ public class DefaultMailAlarmService implements Alarmable {
javaMailSender.send(sm);
}catch (Exception e) {
- log.error("[OmsMailAlarmService] send mail({}) failed.", sm, e);
+ log.error("[OmsMailAlarmService] send mail({}) failed, reason is {}", sm, e.getMessage());
}
}
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java
index 46c664cf..abaabc61 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java
@@ -30,7 +30,7 @@ public class ClusterStatusHolder {
// 集群中所有机器的最后心跳时间
private Map address2ActiveTime;
- private static final long WORKER_TIMEOUT_MS = 30000;
+ private static final long WORKER_TIMEOUT_MS = 60000;
public ClusterStatusHolder(String appName) {
this.appName = appName;
@@ -49,7 +49,7 @@ public class ClusterStatusHolder {
Long oldTime = address2ActiveTime.getOrDefault(workerAddress, -1L);
if (heartbeatTime < oldTime) {
- log.warn("[ClusterStatusHolder-{}] receive the old heartbeat: {}.", appName, heartbeat);
+ log.warn("[ClusterStatusHolder-{}] receive the expired heartbeat from {}, serverTime: {}, heartTime: {}", appName, heartbeat.getWorkerAddress(), System.currentTimeMillis(), heartbeat.getHeartbeatTime());
return;
}
@@ -131,10 +131,25 @@ public class ClusterStatusHolder {
/**
* 释放所有本地存储的容器信息(该操作会导致短暂的 listDeployedContainer 服务不可用)
*/
- public void releaseContainerInfos() {
+ public void release() {
log.info("[ClusterStatusHolder-{}] clean the containerInfos, listDeployedContainer service may down about 1min~", appName);
// 丢弃原来的所有数据,准备重建
containerId2Infos = Maps.newConcurrentMap();
+
+ // 丢弃超时机器的信息
+ List timeoutAddress = Lists.newLinkedList();
+ address2Metrics.forEach((addr, lastActiveTime) -> {
+ if (timeout(addr)) {
+ timeoutAddress.add(addr);
+ }
+ });
+ if (!timeoutAddress.isEmpty()) {
+ log.info("[ClusterStatusHolder-{}] detective timeout workers({}), try to release their infos.", appName, timeoutAddress);
+ timeoutAddress.forEach(addr -> {
+ address2ActiveTime.remove(addr);
+ address2Metrics.remove(addr);
+ });
+ }
}
private boolean timeout(String address) {
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/WorkerManagerService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/WorkerManagerService.java
index 0ab2bf02..02b667fc 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/WorkerManagerService.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/WorkerManagerService.java
@@ -94,9 +94,9 @@ public class WorkerManagerService {
}
/**
- * 释放所有本地存储的容器信息(该操作会导致短暂的 listDeployedContainer 服务不可用)
+ * 清理缓存信息,防止 OOM
*/
- public static void releaseContainerInfos() {
- appId2ClusterStatus.values().forEach(ClusterStatusHolder::releaseContainerInfos);
+ public static void cleanUp() {
+ appId2ClusterStatus.values().forEach(ClusterStatusHolder::release);
}
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java
index cb386261..dee67ee4 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java
@@ -8,7 +8,6 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.InstanceInfoDO;
import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO;
import com.github.kfcfans.powerjob.server.persistence.core.model.UserInfoDO;
import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository;
-import com.github.kfcfans.powerjob.server.persistence.core.repository.JobInfoRepository;
import com.github.kfcfans.powerjob.server.service.DispatchService;
import com.github.kfcfans.powerjob.server.service.InstanceLogService;
import com.github.kfcfans.powerjob.server.service.UserService;
@@ -16,8 +15,6 @@ import com.github.kfcfans.powerjob.server.service.alarm.Alarmable;
import com.github.kfcfans.powerjob.server.service.alarm.JobInstanceAlarmContent;
import com.github.kfcfans.powerjob.server.service.timing.schedule.HashedWheelTimerHolder;
import com.github.kfcfans.powerjob.server.service.workflow.WorkflowInstanceManager;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -25,7 +22,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
-import java.util.Optional;
import java.util.concurrent.TimeUnit;
/**
@@ -38,10 +34,6 @@ import java.util.concurrent.TimeUnit;
@Service
public class InstanceManager {
- // 存储 instanceId 对应的 Job 信息,便于重试
- private static Cache instanceId2JobInfo;
-
- // Spring Bean
@Resource
private DispatchService dispatchService;
@Resource
@@ -49,21 +41,12 @@ public class InstanceManager {
@Resource(name = "omsCenterAlarmService")
private Alarmable omsCenterAlarmService;
@Resource
- private InstanceInfoRepository instanceInfoRepository;
+ private InstanceMetadataService instanceMetadataService;
@Resource
- private JobInfoRepository jobInfoRepository;
+ private InstanceInfoRepository instanceInfoRepository;
@Resource
private WorkflowInstanceManager workflowInstanceManager;
- private static final int CACHE_CONCURRENCY_LEVEL = 8;
- private static final int CACHE_MAX_SIZE = 4096;
-
- static {
- instanceId2JobInfo = CacheBuilder.newBuilder()
- .concurrencyLevel(CACHE_CONCURRENCY_LEVEL)
- .maximumSize(CACHE_MAX_SIZE)
- .build();
- }
/**
* 更新任务状态
@@ -71,19 +54,18 @@ public class InstanceManager {
*/
public void updateStatus(TaskTrackerReportInstanceStatusReq req) throws Exception {
- Long jobId = req.getJobId();
Long instanceId = req.getInstanceId();
// 获取相关数据
- JobInfoDO jobInfo = instanceId2JobInfo.get(instanceId, () -> {
- Optional jobInfoOpt = jobInfoRepository.findById(jobId);
- return jobInfoOpt.orElseThrow(() -> new IllegalArgumentException("can't find JobIno by jobId: " + jobId));
- });
+ JobInfoDO jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(req.getInstanceId());
InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId);
-
+ if (instanceInfo == null) {
+ log.warn("[InstanceManager-{}] can't find InstanceInfo from database", instanceId);
+ return;
+ }
// 丢弃过期的上报数据
if (req.getReportTime() <= instanceInfo.getLastReportTime()) {
- log.warn("[InstanceManager-{}] receive the expired status report request: {}, this report will br dropped.", instanceId, req);
+ log.warn("[InstanceManager-{}] receive the expired status report request: {}, this report will be dropped.", instanceId, req);
return;
}
@@ -170,9 +152,11 @@ public class InstanceManager {
// 告警
if (status == InstanceStatus.FAILED) {
- JobInfoDO jobInfo = fetchJobInfo(instanceId);
- if (jobInfo == null) {
- log.warn("[InstanceManager] can't find jobInfo by instanceId({}), alarm failed.", instanceId);
+ JobInfoDO jobInfo;
+ try {
+ jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(instanceId);
+ }catch (Exception e) {
+ log.warn("[InstanceManager-{}] can't find jobInfo, alarm failed.", instanceId);
return;
}
@@ -185,31 +169,8 @@ public class InstanceManager {
omsCenterAlarmService.onJobInstanceFailed(content, userList);
}
- // 过期缓存
- instanceId2JobInfo.invalidate(instanceId);
+ // 主动移除缓存,减小内存占用
+ instanceMetadataService.invalidateJobInfo(instanceId);
}
- /**
- * 根据任务实例ID查询任务相关信息
- * @param instanceId 任务实例ID
- * @return 任务元数据
- */
- public JobInfoDO fetchJobInfo(Long instanceId) {
- JobInfoDO jobInfo = instanceId2JobInfo.getIfPresent(instanceId);
- if (jobInfo != null) {
- return jobInfo;
- }
- InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId);
- if (instanceInfo != null) {
- return jobInfoRepository.findById(instanceInfo.getJobId()).orElse(null);
- }
- return null;
- }
-
- /**
- * 释放本地缓存,防止内存泄漏
- */
- public static void releaseCache() {
- instanceId2JobInfo.cleanUp();
- }
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetadataService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetadataService.java
new file mode 100644
index 00000000..42d59b48
--- /dev/null
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetadataService.java
@@ -0,0 +1,80 @@
+package com.github.kfcfans.powerjob.server.service.instance;
+
+import com.github.kfcfans.powerjob.server.persistence.core.model.InstanceInfoDO;
+import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO;
+import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository;
+import com.github.kfcfans.powerjob.server.persistence.core.repository.JobInfoRepository;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * 存储 instance 对应的 JobInfo 信息
+ *
+ * @author tjq
+ * @since 2020/6/23
+ */
+@Service
+public class InstanceMetadataService implements InitializingBean {
+
+ @Resource
+ private JobInfoRepository jobInfoRepository;
+ @Resource
+ private InstanceInfoRepository instanceInfoRepository;
+
+ // 缓存,一旦生成任务实例,其对应的 JobInfo 不应该再改变(即使源数据改变)
+ private Cache instanceId2JobInfoCache;
+
+ @Value("${oms.instance.metadata.cache.size}")
+ private int instanceMetadataCacheSize;
+ private static final int CACHE_CONCURRENCY_LEVEL = 4;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ instanceId2JobInfoCache = CacheBuilder.newBuilder()
+ .concurrencyLevel(CACHE_CONCURRENCY_LEVEL)
+ .maximumSize(instanceMetadataCacheSize)
+ .build();
+ }
+
+ /**
+ * 根据 instanceId 获取 JobInfo
+ * @param instanceId instanceId
+ * @return JobInfoDO
+ * @throws ExecutionException 异常
+ */
+ public JobInfoDO fetchJobInfoByInstanceId(Long instanceId) throws ExecutionException {
+ return instanceId2JobInfoCache.get(instanceId, () -> {
+ InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId);
+ if (instanceInfo != null) {
+ Optional jobInfoOpt = jobInfoRepository.findById(instanceInfo.getJobId());
+ return jobInfoOpt.orElseThrow(() -> new IllegalArgumentException("can't find JobInfo by jobId: " + instanceInfo.getJobId()));
+ }
+ throw new IllegalArgumentException("can't find Instance by instanceId: " + instanceId);
+ });
+ }
+
+ /**
+ * 装载缓存
+ * @param instanceId instanceId
+ * @param jobInfoDO 原始的任务数据
+ */
+ public void loadJobInfo(Long instanceId, JobInfoDO jobInfoDO) {
+ instanceId2JobInfoCache.put(instanceId, jobInfoDO);
+ }
+
+ /**
+ * 失效缓存
+ * @param instanceId instanceId
+ */
+ public void invalidateJobInfo(Long instanceId) {
+ instanceId2JobInfoCache.invalidate(instanceId);
+ }
+
+}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java
index e3b9fd88..781dd5e5 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java
@@ -5,7 +5,6 @@ import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceIn
import com.github.kfcfans.powerjob.server.persistence.core.repository.WorkflowInstanceInfoRepository;
import com.github.kfcfans.powerjob.server.persistence.mongodb.GridFsManager;
import com.github.kfcfans.powerjob.server.service.ha.WorkerManagerService;
-import com.github.kfcfans.powerjob.server.service.instance.InstanceManager;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Stopwatch;
import lombok.extern.slf4j.Slf4j;
@@ -59,8 +58,7 @@ public class CleanService {
public void timingClean() {
// 释放本地缓存
- WorkerManagerService.releaseContainerInfos();
- InstanceManager.releaseCache();
+ WorkerManagerService.cleanUp();
// 删除数据库运行记录
cleanInstanceLog();
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java
index af55157a..537710e8 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java
@@ -1,5 +1,6 @@
package com.github.kfcfans.powerjob.server.web.controller;
+import com.github.kfcfans.powerjob.common.InstanceStatus;
import com.github.kfcfans.powerjob.common.model.InstanceDetail;
import com.github.kfcfans.powerjob.common.response.ResultDTO;
import com.github.kfcfans.powerjob.server.akka.OhMyServer;
@@ -21,6 +22,7 @@ import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
+import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -112,6 +114,10 @@ public class InstanceController {
BeanUtils.copyProperties(request, queryEntity);
queryEntity.setType(request.getType().getV());
+ if (!StringUtils.isEmpty(request.getStatus())) {
+ queryEntity.setStatus(InstanceStatus.valueOf(request.getStatus()).getV());
+ }
+
Page pageResult = instanceInfoRepository.findAll(Example.of(queryEntity), pageable);
return ResultDTO.success(convertPage(pageResult));
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java
index f238b75f..6d3e8bb2 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java
@@ -3,6 +3,7 @@ package com.github.kfcfans.powerjob.server.web.controller;
import akka.actor.ActorSelection;
import akka.pattern.Patterns;
import com.github.kfcfans.powerjob.common.InstanceStatus;
+import com.github.kfcfans.powerjob.common.OmsConstant;
import com.github.kfcfans.powerjob.common.RemoteConstant;
import com.github.kfcfans.powerjob.common.model.SystemMetrics;
import com.github.kfcfans.powerjob.common.response.AskResponse;
@@ -18,6 +19,7 @@ import com.github.kfcfans.powerjob.server.web.response.SystemOverviewVO;
import com.github.kfcfans.powerjob.server.web.response.WorkerStatusVO;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
@@ -103,8 +105,10 @@ public class SystemInfoController {
Date date = DateUtils.addDays(new Date(), -1);
overview.setFailedInstanceCount(instanceInfoRepository.countByAppIdAndStatusAndGmtCreateAfter(appId, InstanceStatus.FAILED.getV(), date));
+ // 服务器时区
+ overview.setTimezone(TimeZone.getDefault().getDisplayName());
// 服务器时间
- overview.setServerTime(System.currentTimeMillis());
+ overview.setServerTime(DateFormatUtils.format(new Date(), OmsConstant.TIME_PATTERN));
return ResultDTO.success(overview);
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java
index 99258ec9..67c1101f 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java
@@ -1,5 +1,6 @@
package com.github.kfcfans.powerjob.server.web.controller;
+import com.github.kfcfans.powerjob.common.WorkflowInstanceStatus;
import com.github.kfcfans.powerjob.common.response.ResultDTO;
import com.github.kfcfans.powerjob.server.persistence.PageResult;
import com.github.kfcfans.powerjob.server.persistence.core.model.WorkflowInstanceInfoDO;
@@ -13,6 +14,7 @@ import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
+import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -54,6 +56,11 @@ public class WorkflowInstanceController {
WorkflowInstanceInfoDO queryEntity = new WorkflowInstanceInfoDO();
BeanUtils.copyProperties(req, queryEntity);
+
+ if (!StringUtils.isEmpty(req.getStatus())) {
+ queryEntity.setStatus(WorkflowInstanceStatus.valueOf(req.getStatus()).getV());
+ }
+
Page ps = workflowInstanceInfoRepository.findAll(Example.of(queryEntity), pageable);
return ResultDTO.success(convertPage(ps));
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java
index dae309a7..cededd6d 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java
@@ -24,4 +24,6 @@ public class QueryInstanceRequest {
private Long instanceId;
private Long jobId;
private Long wfInstanceId;
+
+ private String status;
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java
index f566f41b..62128579 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java
@@ -21,4 +21,6 @@ public class QueryWorkflowInstanceRequest {
// 查询条件(NORMAL/WORKFLOW)
private Long wfInstanceId;
private Long workflowId;
+
+ private String status;
}
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java
index 39e8c1ab..3e25dfbd 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java
@@ -13,6 +13,8 @@ public class SystemOverviewVO {
private long jobCount;
private long runningInstanceCount;
private long failedInstanceCount;
+ // 服务器时区
+ private String timezone;
// 服务器时间
- private long serverTime;
+ private String serverTime;
}
diff --git a/powerjob-server/src/main/resources/application-daily.properties b/powerjob-server/src/main/resources/application-daily.properties
index be9b0491..87036311 100644
--- a/powerjob-server/src/main/resources/application-daily.properties
+++ b/powerjob-server/src/main/resources/application-daily.properties
@@ -3,7 +3,7 @@ logging.config=classpath:logback-dev.xml
####### 数据库配置 #######
spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3391/powerjob-daily?useUnicode=true&characterEncoding=UTF-8
+spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8
spring.datasource.core.username=root
spring.datasource.core.password=No1Bug2Please3!
spring.datasource.core.hikari.maximum-pool-size=20
@@ -21,8 +21,11 @@ spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
####### 资源清理配置 #######
-oms.log.retention.local=0
-oms.log.retention.remote=0
-oms.container.retention.local=0
-oms.container.retention.remote=0
-oms.instanceinfo.retention=0
\ No newline at end of file
+oms.log.retention.local=1
+oms.log.retention.remote=1
+oms.container.retention.local=1
+oms.container.retention.remote=-1
+oms.instanceinfo.retention=1
+
+####### 缓存配置 #######
+oms.instance.metadata.cache.size=1024
\ No newline at end of file
diff --git a/powerjob-server/src/main/resources/application-pre.properties b/powerjob-server/src/main/resources/application-pre.properties
index 4cad8276..5e2291d8 100644
--- a/powerjob-server/src/main/resources/application-pre.properties
+++ b/powerjob-server/src/main/resources/application-pre.properties
@@ -3,7 +3,7 @@ logging.config=classpath:logback-product.xml
####### 数据库配置 #######
spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3391/powerjob-pre?useUnicode=true&characterEncoding=UTF-8
+spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-pre?useUnicode=true&characterEncoding=UTF-8
spring.datasource.core.username=root
spring.datasource.core.password=No1Bug2Please3!
spring.datasource.core.hikari.maximum-pool-size=20
@@ -25,4 +25,7 @@ oms.log.retention.local=3
oms.log.retention.remote=3
oms.container.retention.local=3
oms.container.retention.remote=-1
-oms.instanceinfo.retention=3
\ No newline at end of file
+oms.instanceinfo.retention=3
+
+####### 缓存配置 #######
+oms.instance.metadata.cache.size=1024
\ No newline at end of file
diff --git a/powerjob-server/src/main/resources/application-product.properties b/powerjob-server/src/main/resources/application-product.properties
index ed1e8d00..8df29624 100644
--- a/powerjob-server/src/main/resources/application-product.properties
+++ b/powerjob-server/src/main/resources/application-product.properties
@@ -25,4 +25,7 @@ oms.log.retention.local=7
oms.log.retention.remote=7
oms.container.retention.local=7
oms.container.retention.remote=-1
-oms.instanceinfo.retention=3
\ No newline at end of file
+oms.instanceinfo.retention=3
+
+####### 缓存配置 #######
+oms.instance.metadata.cache.size=2048
\ No newline at end of file
diff --git a/powerjob-server/src/main/resources/static/index.html b/powerjob-server/src/main/resources/static/index.html
index 0d8ada21..8d933786 100644
--- a/powerjob-server/src/main/resources/static/index.html
+++ b/powerjob-server/src/main/resources/static/index.html
@@ -5,7 +5,7 @@
- oms-console
+ PowerJob