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

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new b402f8a356 Store duration in seconds and scale to handle case when a 
value in the series has a larger unit than the preceding durations. (#38374)
b402f8a356 is described below

commit b402f8a35633beb4a41e09365a57008c67d377e8
Author: Karthikeyan Singaravelan <[email protected]>
AuthorDate: Mon Mar 25 16:41:48 2024 +0530

    Store duration in seconds and scale to handle case when a value in the 
series has a larger unit than the preceding durations. (#38374)
---
 .../static/js/dag/details/dag/RunDurationChart.tsx | 44 +++++++++++-----------
 .../static/js/dag/details/task/TaskDuration.tsx    | 36 +++++++++---------
 2 files changed, 41 insertions(+), 39 deletions(-)

diff --git a/airflow/www/static/js/dag/details/dag/RunDurationChart.tsx 
b/airflow/www/static/js/dag/details/dag/RunDurationChart.tsx
index 0c5c83c30b..29a09b7792 100644
--- a/airflow/www/static/js/dag/details/dag/RunDurationChart.tsx
+++ b/airflow/www/static/js/dag/details/dag/RunDurationChart.tsx
@@ -51,6 +51,7 @@ const RunDurationChart = ({ showLandingTimes }: Props) => {
 
   let maxDuration = 0;
   let unit = "seconds";
+  let unitDivisor = 1;
 
   const orderingLabel = ordering[0] || ordering[1] || "startDate";
 
@@ -82,35 +83,21 @@ const RunDurationChart = ({ showLandingTimes }: Props) => {
 
     if (maxDuration <= 60 * 2) {
       unit = "seconds";
+      unitDivisor = 1;
     } else if (maxDuration <= 60 * 60 * 2) {
       unit = "minutes";
+      unitDivisor = 60;
     } else if (maxDuration <= 24 * 60 * 60 * 2) {
       unit = "hours";
+      unitDivisor = 60 * 60;
     } else {
       unit = "days";
+      unitDivisor = 60 * 60 * 24;
     }
 
-    let landingDurationUnit;
-    let queuedDurationUnit;
-    let runDurationUnit;
-
-    if (unit === "seconds") {
-      landingDurationUnit = landingDuration.asSeconds();
-      queuedDurationUnit = queuedDuration.asSeconds();
-      runDurationUnit = runDuration.asSeconds();
-    } else if (unit === "minutes") {
-      landingDurationUnit = landingDuration.asMinutes();
-      queuedDurationUnit = queuedDuration.asMinutes();
-      runDurationUnit = runDuration.asMinutes();
-    } else if (unit === "hours") {
-      landingDurationUnit = landingDuration.asHours();
-      queuedDurationUnit = queuedDuration.asHours();
-      runDurationUnit = runDuration.asHours();
-    } else {
-      landingDurationUnit = landingDuration.asDays();
-      queuedDurationUnit = queuedDuration.asDays();
-      runDurationUnit = runDuration.asDays();
-    }
+    const landingDurationUnit = landingDuration.asSeconds();
+    const queuedDurationUnit = queuedDuration.asSeconds();
+    const runDurationUnit = runDuration.asSeconds();
 
     return {
       ...dagRun,
@@ -219,7 +206,20 @@ const RunDurationChart = ({ showLandingTimes }: Props) => {
         "queuedDurationUnit",
         "runDurationUnit",
       ],
-      source: durations,
+      source: durations.map((duration) => {
+        if (duration) {
+          const durationInSeconds = duration as RunDuration;
+          return {
+            ...durationInSeconds,
+            landingDurationUnit:
+              durationInSeconds.landingDurationUnit / unitDivisor,
+            queuedDurationUnit:
+              durationInSeconds.queuedDurationUnit / unitDivisor,
+            runDurationUnit: durationInSeconds.runDurationUnit / unitDivisor,
+          };
+        }
+        return duration;
+      }),
     },
     tooltip: {
       trigger: "axis",
diff --git a/airflow/www/static/js/dag/details/task/TaskDuration.tsx 
b/airflow/www/static/js/dag/details/task/TaskDuration.tsx
index 5b978189d3..0808f7d4f6 100644
--- a/airflow/www/static/js/dag/details/task/TaskDuration.tsx
+++ b/airflow/www/static/js/dag/details/task/TaskDuration.tsx
@@ -50,6 +50,7 @@ const TaskDuration = () => {
   } = useGridData();
   let maxDuration = 0;
   let unit = "seconds";
+  let unitDivisor = 1;
 
   const task = getTask({ taskId, task: groups });
 
@@ -82,30 +83,20 @@ const TaskDuration = () => {
 
     if (maxDuration <= 60 * 2) {
       unit = "seconds";
+      unitDivisor = 1;
     } else if (maxDuration <= 60 * 60 * 2) {
       unit = "minutes";
+      unitDivisor = 60;
     } else if (maxDuration <= 24 * 60 * 60 * 2) {
       unit = "hours";
+      unitDivisor = 60 * 60;
     } else {
       unit = "days";
+      unitDivisor = 60 * 60 * 24;
     }
 
-    let runDurationUnit;
-    let queuedDurationUnit;
-
-    if (unit === "seconds") {
-      runDurationUnit = runDuration.asSeconds();
-      queuedDurationUnit = queuedDuration.asSeconds();
-    } else if (unit === "minutes") {
-      runDurationUnit = runDuration.asMinutes();
-      queuedDurationUnit = queuedDuration.asMinutes();
-    } else if (unit === "hours") {
-      runDurationUnit = runDuration.asHours();
-      queuedDurationUnit = queuedDuration.asHours();
-    } else {
-      runDurationUnit = runDuration.asDays();
-      queuedDurationUnit = queuedDuration.asDays();
-    }
+    const runDurationUnit = runDuration.asSeconds();
+    const queuedDurationUnit = queuedDuration.asSeconds();
 
     return {
       ...instance,
@@ -187,7 +178,18 @@ const TaskDuration = () => {
     // @ts-ignore
     dataset: {
       dimensions: ["runId", "queuedDurationUnit", "runDurationUnit"],
-      source: durations,
+      source: durations.map((duration) => {
+        if (duration) {
+          const durationInSeconds = duration as TaskInstanceDuration;
+          return {
+            ...durationInSeconds,
+            queuedDurationUnit:
+              durationInSeconds.queuedDurationUnit / unitDivisor,
+            runDurationUnit: durationInSeconds.runDurationUnit / unitDivisor,
+          };
+        }
+        return duration;
+      }),
     },
     tooltip: {
       trigger: "axis",

Reply via email to