You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ki...@apache.org on 2021/02/18 02:08:56 UTC
[incubator-dolphinscheduler] branch dev updated:
[Improvement-4751][API] Improvement the duration field modify the display
to a time-based minute-second format (e.g. 1d 10h 20m 1s) (#4752)
This is an automated email from the ASF dual-hosted git repository.
kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 23591b7 [Improvement-4751][API] Improvement the duration field modify the display to a time-based minute-second format (e.g. 1d 10h 20m 1s) (#4752)
23591b7 is described below
commit 23591b71a2859021e9280899b1f1b6ff3b679fbc
Author: zhuangchong <37...@users.noreply.github.com>
AuthorDate: Thu Feb 18 10:08:23 2021 +0800
[Improvement-4751][API] Improvement the duration field modify the display to a time-based minute-second format (e.g. 1d 10h 20m 1s) (#4752)
* imp ui instance duration field display content.
* update DateUtils format2Duration method.
---
.../api/service/ProcessInstanceService.java | 2 +-
.../api/service/TaskInstanceService.java | 2 +-
.../service/impl/ProcessDefinitionServiceImpl.java | 2 +-
.../dolphinscheduler/common/utils/DateUtils.java | 86 +++++++++++++++++++++-
.../common/utils/DateUtilsTest.java | 39 ++++++++++
.../dao/entity/ProcessInstance.java | 6 +-
.../dolphinscheduler/dao/entity/TaskInstance.java | 8 +-
7 files changed, 131 insertions(+), 14 deletions(-)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
index b41ff71..6458a76 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
@@ -256,7 +256,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());
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java
index dd2caff..6c68202 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskInstanceService.java
@@ -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());
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index af91ed2..2a2ae78 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -1327,7 +1327,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()) {
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
index 80c0ed4..a531299 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/DateUtils.java
@@ -241,16 +241,51 @@ 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>
* note: Set the first day of the week to Monday, the default is Sunday
@@ -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);
+ }
+
+ }
+
}
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
index fa16446..63f0be5 100644
--- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/DateUtilsTest.java
@@ -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);
+
+ }
+
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
index f1d43a3..03e81dc 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
@@ -202,7 +202,7 @@ public class ProcessInstance {
* @return
*/
@TableField(exist = false)
- private Long duration;
+ private String duration;
/**
* process instance priority
@@ -547,11 +547,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;
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
index b13ca87..ce8d6d5 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
@@ -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;
@@ -170,7 +171,7 @@ public class TaskInstance implements Serializable {
* duration
*/
@TableField(exist = false)
- private Long duration;
+ private String duration;
/**
* max retry times
@@ -437,11 +438,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;
}
@@ -505,7 +506,6 @@ public class TaskInstance implements Serializable {
return TaskType.CONDITIONS.equals(TaskType.valueOf(this.taskType));
}
-
/**
* determine if you can try again
*