[fix] remove all DateFromat in worker (fix the bug of secondly job's time error)

This commit is contained in:
朱八 2020-07-18 22:50:35 +08:00
parent ce7c7baa8a
commit e860e74717
13 changed files with 139 additions and 30 deletions

View File

@ -10,11 +10,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>powerjob-client</artifactId>
<version>3.1.3</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<properties>
<powerjob.common.version>3.1.3</powerjob.common.version>
<powerjob.common.version>3.2.0</powerjob.common.version>
<junit.version>5.6.1</junit.version>
</properties>

View File

@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>powerjob-common</artifactId>
<version>3.1.3</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<properties>

View File

@ -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<SubInstanceDetail>
@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;
}

View File

@ -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;
}
}

View File

@ -10,13 +10,13 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>powerjob-server</artifactId>
<version>3.1.3</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<properties>
<swagger.version>2.9.2</swagger.version>
<springboot.version>2.2.6.RELEASE</springboot.version>
<powerjob.common.version>3.1.3</powerjob.common.version>
<powerjob.common.version>3.2.0</powerjob.common.version>
<mysql.version>8.0.19</mysql.version>
<h2.db.version>1.4.200</h2.db.version>
<zip4j.version>2.5.2</zip4j.version>

View File

@ -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());
}
// 失败则返回基础版信息

View File

@ -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<InstanceDetail> getInstanceDetail(String instanceId) {
return ResultDTO.success(instanceService.getInstanceDetail(Long.valueOf(instanceId)));
public ResultDTO<InstanceDetailVO> getInstanceDetail(String instanceId) {
return ResultDTO.success(InstanceDetailVO.from(instanceService.getInstanceDetail(Long.valueOf(instanceId))));
}
@GetMapping("/log")

View File

@ -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<InstanceDetailVO.SubInstanceDetail> subInstanceDetails;
// 重试次数
private Long runningTimes;
// 秒级任务的 extra -> List<SubInstanceDetail>
@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;
}
}

View File

@ -10,12 +10,12 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>powerjob-worker-agent</artifactId>
<version>3.1.3</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<properties>
<powerjob.worker.version>3.1.3</powerjob.worker.version>
<powerjob.worker.version>3.2.0</powerjob.worker.version>
<logback.version>1.2.3</logback.version>
<picocli.version>4.3.2</picocli.version>

View File

@ -10,11 +10,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>powerjob-worker-samples</artifactId>
<version>3.1.3</version>
<version>3.2.0</version>
<properties>
<springboot.version>2.2.6.RELEASE</springboot.version>
<powerjob.worker.version>3.1.3</powerjob.worker.version>
<powerjob.worker.version>3.2.0</powerjob.worker.version>
<fastjson.version>1.2.68</fastjson.version>
<!-- 部署时跳过该module -->

View File

@ -1,4 +1,4 @@
server.port=8081
server.port=8082
spring.jpa.open-in-view=false

View File

@ -10,12 +10,12 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>powerjob-worker</artifactId>
<version>3.1.3</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<properties>
<spring.version>5.2.4.RELEASE</spring.version>
<powerjob.common.version>3.1.3</powerjob.common.version>
<powerjob.common.version>3.2.0</powerjob.common.version>
<h2.db.version>1.4.200</h2.db.version>
<hikaricp.version>3.4.2</hikaricp.version>
<junit.version>5.6.1</junit.version>

View File

@ -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);
});