mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
[fix] remove all DateFromat in worker (fix the bug of secondly job's time error)
This commit is contained in:
parent
ce7c7baa8a
commit
e860e74717
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
// 失败则返回基础版信息
|
||||
|
@ -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")
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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>
|
||||
|
||||
|
@ -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 -->
|
||||
|
@ -1,4 +1,4 @@
|
||||
server.port=8081
|
||||
server.port=8082
|
||||
|
||||
spring.jpa.open-in-view=false
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user