Merge remote-tracking branch 'upstream/dev' into spilit
commit
f7ca571f7d
|
|
@ -49,7 +49,7 @@ jobs:
|
|||
with:
|
||||
submodule: true
|
||||
- name: Check License Header
|
||||
uses: apache/skywalking-eyes@9bd5feb
|
||||
uses: apache/skywalking-eyes@ec88b7d850018c8983f87729ea88549e100c5c82
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
with:
|
||||
submodule: true
|
||||
- name: Check License Header
|
||||
uses: apache/skywalking-eyes@9bd5feb
|
||||
uses: apache/skywalking-eyes@ec88b7d850018c8983f87729ea88549e100c5c82
|
||||
- uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.m2/repository
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ jobs:
|
|||
with:
|
||||
submodule: true
|
||||
- name: Check License Header
|
||||
uses: apache/skywalking-eyes@9bd5feb
|
||||
uses: apache/skywalking-eyes@ec88b7d850018c8983f87729ea88549e100c5c82
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Only enable review / suggestion here
|
||||
- uses: actions/cache@v1
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ public class ProcessInstanceService extends BaseService {
|
|||
List<ProcessInstance> processInstances = processInstanceList.getRecords();
|
||||
|
||||
for (ProcessInstance processInstance : processInstances) {
|
||||
processInstance.setDuration(DateUtils.differSec(processInstance.getStartTime(), processInstance.getEndTime()));
|
||||
processInstance.setDuration(DateUtils.format2Duration(processInstance.getStartTime(), processInstance.getEndTime()));
|
||||
User executor = usersService.queryUser(processInstance.getExecutorId());
|
||||
if (null != executor) {
|
||||
processInstance.setExecutorName(executor.getUserName());
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ public class TaskInstanceService extends BaseService {
|
|||
List<TaskInstance> taskInstanceList = taskInstanceIPage.getRecords();
|
||||
|
||||
for (TaskInstance taskInstance : taskInstanceList) {
|
||||
taskInstance.setDuration(DateUtils.differSec(taskInstance.getStartTime(), taskInstance.getEndTime()));
|
||||
taskInstance.setDuration(DateUtils.format2Duration(taskInstance.getStartTime(), taskInstance.getEndTime()));
|
||||
User executor = usersService.queryUser(taskInstance.getExecutorId());
|
||||
if (null != executor) {
|
||||
taskInstance.setExecutorName(executor.getUserName());
|
||||
|
|
|
|||
|
|
@ -1292,7 +1292,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
|
|||
List<ProcessInstance> processInstanceList = processInstanceService.queryByProcessDefineId(processId, limit);
|
||||
|
||||
for (ProcessInstance processInstance : processInstanceList) {
|
||||
processInstance.setDuration(DateUtils.differSec(processInstance.getStartTime(), processInstance.getEndTime()));
|
||||
processInstance.setDuration(DateUtils.format2Duration(processInstance.getStartTime(), processInstance.getEndTime()));
|
||||
}
|
||||
|
||||
if (limit > processInstanceList.size()) {
|
||||
|
|
|
|||
|
|
@ -241,15 +241,50 @@ public class DateUtils {
|
|||
*/
|
||||
public static String format2Readable(long ms) {
|
||||
|
||||
long days = ms / (1000 * 60 * 60 * 24);
|
||||
long hours = (ms % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
|
||||
long minutes = (ms % (1000 * 60 * 60)) / (1000 * 60);
|
||||
long seconds = (ms % (1000 * 60)) / 1000;
|
||||
long days = MILLISECONDS.toDays(ms);
|
||||
long hours = MILLISECONDS.toDurationHours(ms);
|
||||
long minutes = MILLISECONDS.toDurationMinutes(ms);
|
||||
long seconds = MILLISECONDS.toDurationSeconds(ms);
|
||||
|
||||
return String.format("%02d %02d:%02d:%02d", days, hours, minutes, seconds);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* format time to duration
|
||||
*
|
||||
* @param d1 d1
|
||||
* @param d2 d2
|
||||
* @return format time
|
||||
*/
|
||||
public static String format2Duration(Date d1, Date d2) {
|
||||
return format2Duration(differMs(d1, d2));
|
||||
}
|
||||
|
||||
/**
|
||||
* format time to duration
|
||||
*
|
||||
* @param ms ms
|
||||
* @return format time
|
||||
*/
|
||||
public static String format2Duration(long ms) {
|
||||
|
||||
long days = MILLISECONDS.toDays(ms);
|
||||
long hours = MILLISECONDS.toDurationHours(ms);
|
||||
long minutes = MILLISECONDS.toDurationMinutes(ms);
|
||||
long seconds = MILLISECONDS.toDurationSeconds(ms);
|
||||
|
||||
StringBuilder strBuilder = new StringBuilder();
|
||||
strBuilder = days > 0 ? strBuilder.append(days).append("d").append(" ") : strBuilder;
|
||||
strBuilder = hours > 0 ? strBuilder.append(hours).append("h").append(" ") : strBuilder;
|
||||
strBuilder = minutes > 0 ? strBuilder.append(minutes).append("m").append(" ") : strBuilder;
|
||||
strBuilder = seconds > 0 ? strBuilder.append(seconds).append("s") : strBuilder;
|
||||
|
||||
return strBuilder.toString();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* get monday
|
||||
* <p>
|
||||
|
|
@ -454,4 +489,47 @@ public class DateUtils {
|
|||
return getCurrentTime(Constants.YYYYMMDDHHMMSSSSS);
|
||||
}
|
||||
|
||||
static final long C0 = 1L;
|
||||
static final long C1 = C0 * 1000L;
|
||||
static final long C2 = C1 * 1000L;
|
||||
static final long C3 = C2 * 1000L;
|
||||
static final long C4 = C3 * 60L;
|
||||
static final long C5 = C4 * 60L;
|
||||
static final long C6 = C5 * 24L;
|
||||
|
||||
/**
|
||||
* Time unit representing one thousandth of a second
|
||||
*/
|
||||
public static class MILLISECONDS {
|
||||
|
||||
public static long toSeconds(long d) {
|
||||
return d / (C3 / C2);
|
||||
}
|
||||
|
||||
public static long toMinutes(long d) {
|
||||
return d / (C4 / C2);
|
||||
}
|
||||
|
||||
public static long toHours(long d) {
|
||||
return d / (C5 / C2);
|
||||
}
|
||||
|
||||
public static long toDays(long d) {
|
||||
return d / (C6 / C2);
|
||||
}
|
||||
|
||||
public static long toDurationSeconds(long d) {
|
||||
return (d % (C4 / C2)) / (C3 / C2);
|
||||
}
|
||||
|
||||
public static long toDurationMinutes(long d) {
|
||||
return (d % (C5 / C2)) / (C4 / C2);
|
||||
}
|
||||
|
||||
public static long toDurationHours(long d) {
|
||||
return (d % (C6 / C2)) / (C5 / C2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,4 +157,43 @@ public class DateUtilsTest {
|
|||
Assert.assertNotNull(timeStamp);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormat2Duration() {
|
||||
|
||||
// days hours minutes seconds
|
||||
Date d1 = DateUtils.stringToDate("2020-01-20 11:00:00");
|
||||
Date d2 = DateUtils.stringToDate("2020-01-21 12:10:10");
|
||||
String duration = DateUtils.format2Duration(d2, d1);
|
||||
Assert.assertEquals("1d 1h 10m 10s", duration);
|
||||
|
||||
// hours minutes seconds
|
||||
d1 = DateUtils.stringToDate("2020-01-20 11:00:00");
|
||||
d2 = DateUtils.stringToDate("2020-01-20 12:10:10");
|
||||
duration = DateUtils.format2Duration(d2, d1);
|
||||
Assert.assertEquals("1h 10m 10s", duration);
|
||||
|
||||
// minutes seconds
|
||||
d1 = DateUtils.stringToDate("2020-01-20 11:00:00");
|
||||
d2 = DateUtils.stringToDate("2020-01-20 11:10:10");
|
||||
duration = DateUtils.format2Duration(d2, d1);
|
||||
Assert.assertEquals("10m 10s", duration);
|
||||
|
||||
// minutes seconds
|
||||
d1 = DateUtils.stringToDate("2020-01-20 11:10:00");
|
||||
d2 = DateUtils.stringToDate("2020-01-20 11:10:10");
|
||||
duration = DateUtils.format2Duration(d2, d1);
|
||||
Assert.assertEquals("10s", duration);
|
||||
|
||||
d1 = DateUtils.stringToDate("2020-01-20 11:10:00");
|
||||
d2 = DateUtils.stringToDate("2020-01-21 11:10:10");
|
||||
duration = DateUtils.format2Duration(d2, d1);
|
||||
Assert.assertEquals("1d 10s", duration);
|
||||
|
||||
d1 = DateUtils.stringToDate("2020-01-20 11:10:00");
|
||||
d2 = DateUtils.stringToDate("2020-01-20 16:10:10");
|
||||
duration = DateUtils.format2Duration(d2, d1);
|
||||
Assert.assertEquals("5h 10s", duration);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ public class ProcessInstance {
|
|||
* @return
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private Long duration;
|
||||
private String duration;
|
||||
|
||||
/**
|
||||
* process instance priority
|
||||
|
|
@ -561,11 +561,11 @@ public class ProcessInstance {
|
|||
this.dependenceScheduleTimes = dependenceScheduleTimes;
|
||||
}
|
||||
|
||||
public Long getDuration() {
|
||||
public String getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public void setDuration(Long duration) {
|
||||
public void setDuration(String duration) {
|
||||
this.duration = duration;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.dao.entity;
|
||||
|
||||
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
|
||||
|
|
@ -189,7 +190,7 @@ public class TaskInstance implements Serializable {
|
|||
* duration
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private Long duration;
|
||||
private String duration;
|
||||
|
||||
/**
|
||||
* max retry times
|
||||
|
|
@ -456,11 +457,11 @@ public class TaskInstance implements Serializable {
|
|||
this.processInstanceName = processInstanceName;
|
||||
}
|
||||
|
||||
public Long getDuration() {
|
||||
public String getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public void setDuration(Long duration) {
|
||||
public void setDuration(String duration) {
|
||||
this.duration = duration;
|
||||
}
|
||||
|
||||
|
|
@ -524,7 +525,6 @@ public class TaskInstance implements Serializable {
|
|||
return TaskType.CONDITIONS.equals(TaskType.valueOf(this.taskType));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* determine if you can try again
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue