This is an automated email from the ASF dual-hosted git repository.

xbis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 71019a866b HDDS-9933. Recon datanode 'Last Heartbeat' should print 
relative values (#5801)
71019a866b is described below

commit 71019a866b17c34fe30d3a90d019d47ddebcd5b7
Author: Christos Bisias <[email protected]>
AuthorDate: Tue Dec 19 19:41:59 2023 +0200

    HDDS-9933. Recon datanode 'Last Heartbeat' should print relative values 
(#5801)
---
 .../src/views/datanodes/datanodes.tsx              | 24 ++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.tsx
 
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.tsx
index e418bf2fef..6a6118494f 100644
--- 
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.tsx
+++ 
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.tsx
@@ -42,7 +42,7 @@ interface IDatanodeResponse {
   hostname: string;
   state: DatanodeState;
   opState: DatanodeOpState;
-  lastHeartbeat: number;
+  lastHeartbeat: string;
   storageReport: IStorageReport;
   pipelines: IPipeline[];
   containers: number;
@@ -182,7 +182,7 @@ const COLUMNS = [
     isVisible: true,
     sorter: (a: IDatanode, b: IDatanode) => a.lastHeartbeat - b.lastHeartbeat,
     render: (heartbeat: number) => {
-      return heartbeat > 0 ? moment(heartbeat).format('ll LTS') : 'NA';
+      return heartbeat > 0 ? getTimeDiffFromTimestamp(heartbeat) : 'NA';
     }
   },
   {
@@ -303,6 +303,26 @@ const defaultColumns: IOption[] = COLUMNS.map(column => ({
   value: column.key
 }));
 
+const getTimeDiffFromTimestamp = (timestamp: number): string => {
+  const timestampDate = new Date(timestamp);
+  const currentDate = new Date();
+
+  let elapsedTime = "";
+  let duration: moment.Duration = moment.duration(
+    moment(currentDate).diff(moment(timestampDate))
+  )
+
+  const durationKeys = ["seconds", "minutes", "hours", "days", "months", 
"years"]
+  durationKeys.forEach((k) => {
+    let time = duration["_data"][k]
+    if (time !== 0){
+      elapsedTime = time + `${k.substring(0, 1)} ` + elapsedTime
+    }
+  })
+
+  return elapsedTime.trim().length === 0 ? "Just now" : elapsedTime.trim() + " 
ago";
+}
+
 let cancelSignal: AbortController;
 
 export class Datanodes extends React.Component<Record<string, object>, 
IDatanodesState> {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to