You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by as...@apache.org on 2021/03/19 15:06:42 UTC
[airflow] 40/42: fix lossing duration < 1 secs in tree (#13537)
This is an automated email from the ASF dual-hosted git repository.
ash pushed a commit to branch v2-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 71b44a2244521582d94a4298d514234738e1b1e1
Author: Yujia Yang <33...@users.noreply.github.com>
AuthorDate: Fri Feb 19 00:14:44 2021 +0800
fix lossing duration < 1 secs in tree (#13537)
truncat duration to 3dp when duration < 10
Update airflow/www/views.py
Co-authored-by: Ash Berlin-Taylor <as...@firemirror.com>
fix import, retrigger ci
(cherry picked from commit 8f21fb1bf77fc67e37dc13613778ff1e6fa87cea)
---
airflow/www/views.py | 10 +++++++++-
tests/www/test_views.py | 14 +++++++++++++-
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/airflow/www/views.py b/airflow/www/views.py
index ab31607..4c272b5 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -111,6 +111,14 @@ FILTER_TAGS_COOKIE = 'tags_filter'
FILTER_STATUS_COOKIE = 'dag_status_filter'
+def truncate_task_duration(task_duration):
+ """
+ Cast the task_duration to an int was for optimization for large/huge dags if task_duration > 10s
+ otherwise we keep it as a float with 3dp
+ """
+ return int(task_duration) if task_duration > 10.0 else round(task_duration, 3)
+
+
def get_safe_url(url):
"""Given a user-supplied URL, ensure it points to our web server"""
valid_schemes = ['http', 'https', '']
@@ -1921,7 +1929,7 @@ class Airflow(AirflowBaseView): # noqa: D101 pylint: disable=too-many-public-m
# round to seconds to reduce payload size
task_instance_data[2] = int(task_instance.start_date.timestamp())
if task_instance.duration is not None:
- task_instance_data[3] = int(task_instance.duration)
+ task_instance_data[3] = truncate_task_duration(task_instance.duration)
return task_instance_data
diff --git a/tests/www/test_views.py b/tests/www/test_views.py
index b391e56..d284314 100644
--- a/tests/www/test_views.py
+++ b/tests/www/test_views.py
@@ -62,7 +62,7 @@ from airflow.utils.state import State
from airflow.utils.timezone import datetime
from airflow.utils.types import DagRunType
from airflow.www import app as application
-from airflow.www.views import ConnectionModelView, get_safe_url
+from airflow.www.views import ConnectionModelView, get_safe_url, truncate_task_duration
from tests.test_utils import fab_utils
from tests.test_utils.asserts import assert_queries_count
from tests.test_utils.config import conf_vars
@@ -3311,3 +3311,15 @@ class TestHelperFunctions(TestBase):
mock_url_for.return_value = "/home"
with self.app.test_request_context(base_url="http://localhost:8080"):
assert get_safe_url(test_url) == expected_url
+
+ @parameterized.expand(
+ [
+ (0.12345, 0.123),
+ (0.12355, 0.124),
+ (3.12, 3.12),
+ (9.99999, 10.0),
+ (10.01232, 10),
+ ]
+ )
+ def test_truncate_task_duration(self, test_duration, expected_duration):
+ assert truncate_task_duration(test_duration) == expected_duration