diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml
index 376f6977..39ee4363 100644
--- a/powerjob-client/pom.xml
+++ b/powerjob-client/pom.xml
@@ -10,11 +10,11 @@
4.0.0
powerjob-client
- 3.1.3
+ 3.2.0
jar
- 3.1.3
+ 3.2.0
5.6.1
diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml
index b4ebcc1f..3e8766b4 100644
--- a/powerjob-common/pom.xml
+++ b/powerjob-common/pom.xml
@@ -10,7 +10,7 @@
4.0.0
powerjob-common
- 3.1.3
+ 3.2.0
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 c9ab4eaa..efa4686f 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
@@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
import java.util.List;
/**
- * 任务实例的运行详细信息(对外)
+ * 任务实例的运行详细信息
*
* @author tjq
* @since 2020/4/11
@@ -20,7 +20,7 @@ public class InstanceDetail implements OmsSerializable {
private Long actualTriggerTime;
// 任务整体结束时间(可能不存在)
private Long finishedTime;
- // 任务状态(中文)
+ // 任务状态
private Integer status;
// 任务执行结果(可能不存在)
private String result;
@@ -35,13 +35,16 @@ public class InstanceDetail implements OmsSerializable {
// 重试次数
private Long runningTimes;
+ // 扩展字段,中间件升级不易,最好不要再改 common 包了...否则 server worker 版本不兼容
+ private String extra;
+
// 秒级任务的 extra -> List
@Data
@NoArgsConstructor
public static class SubInstanceDetail implements OmsSerializable {
private long subInstanceId;
- private String startTime;
- private String finishedTime;
+ private Long startTime;
+ private Long finishedTime;
private String result;
private int status;
}
diff --git a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/CommonUtils.java b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/CommonUtils.java
index 52277188..4627ee53 100644
--- a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/CommonUtils.java
+++ b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/CommonUtils.java
@@ -1,11 +1,12 @@
package com.github.kfcfans.powerjob.common.utils;
+import com.github.kfcfans.powerjob.common.OmsConstant;
import com.github.kfcfans.powerjob.common.OmsException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
import java.util.Collection;
-import java.util.Objects;
import java.util.function.Supplier;
@@ -129,4 +130,20 @@ public class CommonUtils {
return obj;
}
+ /**
+ * 格式化时间,将时间戳转化为可阅读时间
+ * @param ts 时间戳
+ * @return 可阅读时间
+ */
+ public static String formatTime(Long ts) {
+ if (ts == null || ts <= 0) {
+ return OmsConstant.NONE;
+ }
+ try {
+ return DateFormatUtils.format(ts, OmsConstant.TIME_PATTERN);
+ }catch (Exception ignore) {
+ }
+ return OmsConstant.NONE;
+ }
+
}
diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml
index 7f3cdbf5..86e187f4 100644
--- a/powerjob-server/pom.xml
+++ b/powerjob-server/pom.xml
@@ -10,13 +10,13 @@
4.0.0
powerjob-server
- 3.1.3
+ 3.2.0
jar
2.9.2
2.2.6.RELEASE
- 3.1.3
+ 3.2.0
8.0.19
1.4.200
2.5.2
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceService.java
index 526e4ac6..c152a321 100644
--- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceService.java
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceService.java
@@ -194,7 +194,7 @@ public class InstanceService {
}
}catch (Exception e) {
- log.error("[Instance-{}] ask InstanceStatus from TaskTracker failed, exception is {}", instanceId, e.toString());
+ log.warn("[Instance-{}] ask InstanceStatus from TaskTracker failed, exception is {}", instanceId, e.toString());
}
// 失败则返回基础版信息
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 537710e8..500a2ab5 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,7 +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;
import com.github.kfcfans.powerjob.server.common.utils.OmsFileUtils;
@@ -15,6 +14,7 @@ import com.github.kfcfans.powerjob.server.service.CacheService;
import com.github.kfcfans.powerjob.server.service.InstanceLogService;
import com.github.kfcfans.powerjob.server.service.instance.InstanceService;
import com.github.kfcfans.powerjob.server.web.request.QueryInstanceRequest;
+import com.github.kfcfans.powerjob.server.web.response.InstanceDetailVO;
import com.github.kfcfans.powerjob.server.web.response.InstanceInfoVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
@@ -65,8 +65,8 @@ public class InstanceController {
}
@GetMapping("/detail")
- public ResultDTO getInstanceDetail(String instanceId) {
- return ResultDTO.success(instanceService.getInstanceDetail(Long.valueOf(instanceId)));
+ public ResultDTO getInstanceDetail(String instanceId) {
+ return ResultDTO.success(InstanceDetailVO.from(instanceService.getInstanceDetail(Long.valueOf(instanceId))));
}
@GetMapping("/log")
diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/InstanceDetailVO.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/InstanceDetailVO.java
new file mode 100644
index 00000000..4e31eabd
--- /dev/null
+++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/InstanceDetailVO.java
@@ -0,0 +1,98 @@
+package com.github.kfcfans.powerjob.server.web.response;
+
+import com.github.kfcfans.powerjob.common.OmsSerializable;
+import com.github.kfcfans.powerjob.common.model.InstanceDetail;
+import com.github.kfcfans.powerjob.common.utils.CommonUtils;
+import com.google.common.collect.Lists;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 任务实例的运行详细信息(对外展示对象)
+ * 注意:日期的格式化全部需要在 server 完成,不能在浏览器完成,否则会有时区问题(当 server 与 browser 时区不一致时显示会有问题)
+ *
+ * @author 朱八
+ * @since 2020/7/18
+ */
+@Data
+@NoArgsConstructor
+public class InstanceDetailVO {
+
+ // 任务整体开始时间
+ private String actualTriggerTime;
+ // 任务整体结束时间(可能不存在)
+ private String finishedTime;
+ // 任务状态
+ private Integer status;
+ // 任务执行结果(可能不存在)
+ private String result;
+ // TaskTracker地址
+ private String taskTrackerAddress;
+
+ // MR或BD任务专用
+ private InstanceDetailVO.TaskDetail taskDetail;
+ // 秒级任务专用
+ private List subInstanceDetails;
+
+ // 重试次数
+ private Long runningTimes;
+
+ // 秒级任务的 extra -> List
+ @Data
+ @NoArgsConstructor
+ public static class SubInstanceDetail implements OmsSerializable {
+ private long subInstanceId;
+ private String startTime;
+ private String finishedTime;
+ private String result;
+ private int status;
+ }
+
+ // MapReduce 和 Broadcast 任务的 extra ->
+ @Data
+ @NoArgsConstructor
+ public static class TaskDetail implements OmsSerializable {
+ private long totalTaskNum;
+ private long succeedTaskNum;
+ private long failedTaskNum;
+ }
+
+ public static InstanceDetailVO from(InstanceDetail origin) {
+ InstanceDetailVO vo = new InstanceDetailVO();
+ BeanUtils.copyProperties(origin, vo);
+
+ // 格式化时间
+ vo.setFinishedTime(CommonUtils.formatTime(origin.getFinishedTime()));
+ vo.setActualTriggerTime(CommonUtils.formatTime(origin.getActualTriggerTime()));
+
+ // 拷贝 TaskDetail
+ if (origin.getTaskDetail() != null) {
+ TaskDetail voDetail = new TaskDetail();
+ BeanUtils.copyProperties(origin.getTaskDetail(), voDetail);
+ vo.setTaskDetail(voDetail);
+ }
+
+ // 拷贝秒级任务数据
+ if (!CollectionUtils.isEmpty(origin.getSubInstanceDetails())) {
+ vo.subInstanceDetails = Lists.newLinkedList();
+
+ origin.getSubInstanceDetails().forEach(subDetail -> {
+
+ SubInstanceDetail voSubDetail = new SubInstanceDetail();
+ BeanUtils.copyProperties(subDetail, voSubDetail);
+
+ // 格式化时间
+ voSubDetail.setStartTime(CommonUtils.formatTime(subDetail.getStartTime()));
+ voSubDetail.setFinishedTime(CommonUtils.formatTime(subDetail.getFinishedTime()));
+
+ vo.subInstanceDetails.add(voSubDetail);
+ });
+ }
+
+ return vo;
+ }
+}
diff --git a/powerjob-worker-agent/pom.xml b/powerjob-worker-agent/pom.xml
index 4efd4128..4b4c7db2 100644
--- a/powerjob-worker-agent/pom.xml
+++ b/powerjob-worker-agent/pom.xml
@@ -10,12 +10,12 @@
4.0.0
powerjob-worker-agent
- 3.1.3
+ 3.2.0
jar
- 3.1.3
+ 3.2.0
1.2.3
4.3.2
diff --git a/powerjob-worker-samples/pom.xml b/powerjob-worker-samples/pom.xml
index b6dc739a..e11ca2cc 100644
--- a/powerjob-worker-samples/pom.xml
+++ b/powerjob-worker-samples/pom.xml
@@ -10,11 +10,11 @@
4.0.0
powerjob-worker-samples
- 3.1.3
+ 3.2.0
2.2.6.RELEASE
- 3.1.3
+ 3.2.0
1.2.68
diff --git a/powerjob-worker-samples/src/main/resources/application.properties b/powerjob-worker-samples/src/main/resources/application.properties
index 7d804f17..1f34c49a 100644
--- a/powerjob-worker-samples/src/main/resources/application.properties
+++ b/powerjob-worker-samples/src/main/resources/application.properties
@@ -1,4 +1,4 @@
-server.port=8081
+server.port=8082
spring.jpa.open-in-view=false
diff --git a/powerjob-worker/pom.xml b/powerjob-worker/pom.xml
index 6e7e9236..e4b55ef1 100644
--- a/powerjob-worker/pom.xml
+++ b/powerjob-worker/pom.xml
@@ -10,12 +10,12 @@
4.0.0
powerjob-worker
- 3.1.3
+ 3.2.0
jar
5.2.4.RELEASE
- 3.1.3
+ 3.2.0
1.4.200
3.4.2
5.6.1
diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java
index ed72f3f9..3e484b84 100644
--- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java
+++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java
@@ -17,7 +17,6 @@ import com.google.common.collect.Maps;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StringUtils;
@@ -121,14 +120,6 @@ public class FrequentTaskTracker extends TaskTracker {
subDetail.setStatus(status.getV());
subDetail.setSubInstanceId(subId);
- // 设置时间
- subDetail.setStartTime(DateFormatUtils.format(subInstanceInfo.getStartTime(), OmsConstant.TIME_PATTERN));
- if (status == InstanceStatus.SUCCEED || status == InstanceStatus.FAILED) {
- subDetail.setFinishedTime(DateFormatUtils.format(subInstanceInfo.getFinishedTime(), OmsConstant.TIME_PATTERN));
- }else {
- subDetail.setFinishedTime("N/A");
- }
-
history.add(subDetail);
});