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",