diff --git a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py index 9372fc798d484..de6eac73a9b65 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid.py @@ -196,18 +196,18 @@ def _collect_ids(nodes: list[dict[str, Any]]) -> set[str]: return ids existing_ids = _collect_ids(merged_nodes) - historical_task_ids = session.scalars( - select(TaskInstance.task_id) + historical_tasks = session.execute( + select(TaskInstance.task_id, TaskInstance.task_display_name) .join(TaskInstance.dag_run) .where(TaskInstance.dag_id == dag_id, DagRun.id.in_(run_ids)) .distinct() ) - for task_id in historical_task_ids: + for task_id, task_display_name in historical_tasks: if task_id not in existing_ids: merged_nodes.append( { "id": task_id, - "label": task_id, + "label": task_display_name, "is_mapped": None, "children": None, } diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/task_group.py b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/task_group.py index ed9a96718e9c6..3b71ea1cff0a9 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/task_group.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/task_group.py @@ -25,6 +25,7 @@ from airflow.configuration import conf from airflow.models.mappedoperator import MappedOperator, is_mapped +from airflow.sdk import TaskGroup from airflow.serialization.serialized_objects import SerializedBaseOperator @@ -90,15 +91,17 @@ def task_group_to_dict_grid(task_item_or_group, parent_group_is_mapped=False): setup_teardown_type = "setup" elif task.is_teardown is True: setup_teardown_type = "teardown" + # we explicitly want the short task ID here, not the full doted notation if in a group + task_display_name = task.task_display_name if task.task_display_name != task.task_id else task.label return { "id": task.task_id, - "label": task.label, + "label": task_display_name, "is_mapped": mapped, "children": None, "setup_teardown_type": setup_teardown_type, } - task_group = task_item_or_group + task_group: TaskGroup = task_item_or_group task_group_sort = get_task_group_children_getter() mapped = is_mapped(task_group) children = [ @@ -108,7 +111,7 @@ def task_group_to_dict_grid(task_item_or_group, parent_group_is_mapped=False): return { "id": task_group.group_id, - "label": task_group.label, + "label": task_group.group_display_name or task_group.label, "is_mapped": mapped or None, "children": children or None, } diff --git a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx index 37349d8f030e5..0698baeaddc4c 100644 --- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx +++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx @@ -125,7 +125,6 @@ export const Header = ({ isRefreshing={isRefreshing} state={taskInstance.state} stats={stats} - subTitle={