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 d663d8bc76 Clean up webserver endpoints adding to audit log (#37580)
d663d8bc76 is described below

commit d663d8bc76ec3de3356cadbda392b9e0c90e0a36
Author: Brent Bovenzi <br...@astronomer.io>
AuthorDate: Fri Feb 23 01:04:26 2024 -0500

    Clean up webserver endpoints adding to audit log (#37580)
    
    * Clean up webserver endpoints adding to audit log
    
    * Remove all view-only action logging and change excluded events list
    
    * Restore robots logging
    
    * Remove two extra loggings+tests, add test for robots.txt
    
    * Fix rendered template test
---
 airflow/config_templates/config.yml      |  4 +--
 airflow/www/views.py                     | 43 +++++---------------------------
 tests/www/views/test_views_decorators.py | 36 +++++---------------------
 3 files changed, 14 insertions(+), 69 deletions(-)

diff --git a/airflow/config_templates/config.yml 
b/airflow/config_templates/config.yml
index 4db178cd8f..41d0b56c9f 100644
--- a/airflow/config_templates/config.yml
+++ b/airflow/config_templates/config.yml
@@ -1837,8 +1837,8 @@ webserver:
         The audit logs in the db will not be affected by this parameter.
       version_added: 2.3.0
       type: string
-      example: ~
-      default: 
"gantt,landing_times,tries,duration,calendar,graph,grid,tree,tree_data"
+      example: "cli_task_run,running,success"
+      default: ~
     audit_view_included_events:
       description: |
         Comma separated string of view events to include in dag audit view.
diff --git a/airflow/www/views.py b/airflow/www/views.py
index 1e00e86423..9b19f26fc6 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -1325,8 +1325,7 @@ class Airflow(AirflowBaseView):
 
     @expose("/dags/<string:dag_id>/code")
     @auth.has_access_dag("GET", DagAccessEntity.CODE)
-    @provide_session
-    def code(self, dag_id, session: Session = NEW_SESSION):
+    def code(self, dag_id):
         """Dag Code."""
         kwargs = {
             **sanitize_args(request.args),
@@ -1348,7 +1347,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/rendered-templates")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def rendered_templates(self, session):
         """Get rendered Dag."""
@@ -1362,7 +1360,7 @@ class Airflow(AirflowBaseView):
 
         logging.info("Retrieving rendered templates.")
         dag: DAG = get_airflow_app().dag_bag.get_dag(dag_id)
-        dag_run = dag.get_dagrun(execution_date=dttm, session=session)
+        dag_run = dag.get_dagrun(execution_date=dttm)
         raw_task = dag.get_task(task_id).prepare_for_execution()
 
         no_dagrun = False
@@ -1467,7 +1465,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/rendered-k8s")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def rendered_k8s(self, *, session: Session = NEW_SESSION):
         """Get rendered k8s yaml."""
@@ -1533,7 +1530,6 @@ class Airflow(AirflowBaseView):
     @expose("/get_logs_with_metadata")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
     @auth.has_access_dag("GET", DagAccessEntity.TASK_LOGS)
-    @action_logging
     @provide_session
     def get_logs_with_metadata(self, session: Session = NEW_SESSION):
         """Retrieve logs including metadata."""
@@ -1614,7 +1610,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/log")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_LOGS)
-    @action_logging
     @provide_session
     def log(self, session: Session = NEW_SESSION):
         """Retrieve log."""
@@ -1659,7 +1654,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/redirect_to_external_log")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_LOGS)
-    @action_logging
     @provide_session
     def redirect_to_external_log(self, session: Session = NEW_SESSION):
         """Redirects to external log."""
@@ -1691,7 +1685,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/task")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def task(self, session: Session = NEW_SESSION):
         """Retrieve task."""
@@ -1817,7 +1810,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/xcom")
     @auth.has_access_dag("GET", DagAccessEntity.XCOM)
-    @action_logging
     @provide_session
     def xcom(self, session: Session = NEW_SESSION):
         """Retrieve XCOM."""
@@ -2346,6 +2338,7 @@ class Airflow(AirflowBaseView):
 
     @expose("/blocked", methods=["POST"])
     @auth.has_access_dag("GET", DagAccessEntity.RUN)
+    @action_logging
     @provide_session
     def blocked(self, session: Session = NEW_SESSION):
         """Mark Dag Blocked."""
@@ -2491,7 +2484,7 @@ class Airflow(AirflowBaseView):
 
     @expose("/dagrun_details")
     def dagrun_details(self):
-        """Redirect to the GRID DAGRun page. This is avoids breaking links."""
+        """Redirect to the Grid DagRun page. This is avoids breaking links."""
         dag_id = request.args.get("dag_id")
         run_id = request.args.get("run_id")
         return redirect(url_for("Airflow.grid", dag_id=dag_id, 
dag_run_id=run_id))
@@ -2762,16 +2755,12 @@ class Airflow(AirflowBaseView):
             )
 
     @expose("/dags/<string:dag_id>")
-    @gzipped
-    @action_logging
     def dag(self, dag_id):
         """Redirect to default DAG view."""
         kwargs = {**sanitize_args(request.args), "dag_id": dag_id}
         return redirect(url_for("Airflow.grid", **kwargs))
 
     @expose("/tree")
-    @gzipped
-    @action_logging
     def legacy_tree(self):
         """Redirect to the replacement - grid view. Kept for backwards 
compatibility."""
         return redirect(url_for("Airflow.grid", **sanitize_args(request.args)))
@@ -2779,7 +2768,6 @@ class Airflow(AirflowBaseView):
     @expose("/dags/<string:dag_id>/grid")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
     @gzipped
-    @action_logging
     @provide_session
     def grid(self, dag_id: str, session: Session = NEW_SESSION):
         """Get Dag's grid view."""
@@ -2838,8 +2826,6 @@ class Airflow(AirflowBaseView):
         )
 
     @expose("/calendar")
-    @gzipped
-    @action_logging
     def legacy_calendar(self):
         """Redirect from url param."""
         return redirect(url_for("Airflow.calendar", 
**sanitize_args(request.args)))
@@ -2847,7 +2833,6 @@ class Airflow(AirflowBaseView):
     @expose("/dags/<string:dag_id>/calendar")
     @auth.has_access_dag("GET", DagAccessEntity.RUN)
     @gzipped
-    @action_logging
     @provide_session
     def calendar(self, dag_id: str, session: Session = NEW_SESSION):
         """Get DAG runs as calendar."""
@@ -2953,15 +2938,12 @@ class Airflow(AirflowBaseView):
         )
 
     @expose("/graph")
-    @gzipped
-    @action_logging
     def legacy_graph(self):
         """Redirect from url param."""
         return redirect(url_for("Airflow.graph", 
**sanitize_args(request.args)))
 
     @expose("/dags/<string:dag_id>/graph")
     @gzipped
-    @action_logging
     @provide_session
     def graph(self, dag_id: str, session: Session = NEW_SESSION):
         """Redirect to the replacement - grid + graph. Kept for backwards 
compatibility."""
@@ -2984,14 +2966,12 @@ class Airflow(AirflowBaseView):
         return redirect(url_for("Airflow.grid", **kwargs))
 
     @expose("/duration")
-    @action_logging
     def legacy_duration(self):
         """Redirect from url param."""
         return redirect(url_for("Airflow.duration", 
**sanitize_args(request.args)))
 
     @expose("/dags/<string:dag_id>/duration")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def duration(self, dag_id: str, session: Session = NEW_SESSION):
         """Get Dag as duration graph."""
@@ -3137,14 +3117,12 @@ class Airflow(AirflowBaseView):
         )
 
     @expose("/tries")
-    @action_logging
     def legacy_tries(self):
         """Redirect from url param."""
         return redirect(url_for("Airflow.tries", 
**sanitize_args(request.args)))
 
     @expose("/dags/<string:dag_id>/tries")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def tries(self, dag_id: str, session: Session = NEW_SESSION):
         """Show all tries."""
@@ -3220,14 +3198,12 @@ class Airflow(AirflowBaseView):
         )
 
     @expose("/landing_times")
-    @action_logging
     def legacy_landing_times(self):
         """Redirect from url param."""
         return redirect(url_for("Airflow.landing_times", 
**sanitize_args(request.args)))
 
     @expose("/dags/<string:dag_id>/landing-times")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def landing_times(self, dag_id: str, session: Session = NEW_SESSION):
         """Show landing times."""
@@ -3326,14 +3302,12 @@ class Airflow(AirflowBaseView):
         return "OK"
 
     @expose("/gantt")
-    @action_logging
     def legacy_gantt(self):
         """Redirect from url param."""
         return redirect(url_for("Airflow.gantt", 
**sanitize_args(request.args)))
 
     @expose("/dags/<string:dag_id>/gantt")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def gantt(self, dag_id: str, session: Session = NEW_SESSION):
         """Redirect to the replacement - grid + gantt. Kept for backwards 
compatibility."""
@@ -3349,7 +3323,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/extra_links")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     @provide_session
     def extra_links(self, *, session: Session = NEW_SESSION):
         """
@@ -3406,12 +3379,10 @@ class Airflow(AirflowBaseView):
     @expose("/object/graph_data")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
     @gzipped
-    @action_logging
-    @provide_session
-    def graph_data(self, session: Session = NEW_SESSION):
+    def graph_data(self):
         """Get Graph Data."""
         dag_id = request.args.get("dag_id")
-        dag = get_airflow_app().dag_bag.get_dag(dag_id, session=session)
+        dag = get_airflow_app().dag_bag.get_dag(dag_id)
         root = request.args.get("root")
         if root:
             filter_upstream = request.args.get("filter_upstream") == "true"
@@ -3435,7 +3406,6 @@ class Airflow(AirflowBaseView):
 
     @expose("/object/task_instances")
     @auth.has_access_dag("GET", DagAccessEntity.TASK_INSTANCE)
-    @action_logging
     def task_instances(self):
         """Show task instances."""
         dag_id = request.args.get("dag_id")
@@ -5798,7 +5768,6 @@ class DagDependenciesView(AirflowBaseView):
     @expose("/dag-dependencies")
     @auth.has_access_dag("GET", DagAccessEntity.DEPENDENCIES)
     @gzipped
-    @action_logging
     def list(self):
         """Display DAG dependencies."""
         title = "DAG Dependencies"
diff --git a/tests/www/views/test_views_decorators.py 
b/tests/www/views/test_views_decorators.py
index 00e657a2d7..4cfab0926e 100644
--- a/tests/www/views/test_views_decorators.py
+++ b/tests/www/views/test_views_decorators.py
@@ -17,8 +17,6 @@
 # under the License.
 from __future__ import annotations
 
-import urllib.parse
-
 import pytest
 
 from airflow.models import DagBag, Variable
@@ -92,39 +90,17 @@ def clean_db():
     clear_db_variables()
 
 
-def test_action_logging_get(session, admin_client):
-    url = (
-        f"dags/example_bash_operator/grid?"
-        
f"execution_date={urllib.parse.quote_plus(str(EXAMPLE_DAG_DEFAULT_DATE))}"
-    )
-    resp = admin_client.get(url, follow_redirects=True)
-    check_content_in_response("success", resp)
+def test_action_logging_robots(session, admin_client):
+    url = "/robots.txt"
+    admin_client.get(url, follow_redirects=True)
 
     # In mysql backend, this commit() is needed to write down the logs
     session.commit()
     _check_last_log(
         session,
-        dag_id="example_bash_operator",
-        event="grid",
-        execution_date=EXAMPLE_DAG_DEFAULT_DATE,
-    )
-
-
-def test_action_logging_get_legacy_view(session, admin_client):
-    url = (
-        f"tree?dag_id=example_bash_operator&"
-        
f"execution_date={urllib.parse.quote_plus(str(EXAMPLE_DAG_DEFAULT_DATE))}"
-    )
-    resp = admin_client.get(url, follow_redirects=True)
-    check_content_in_response("success", resp)
-
-    # In mysql backend, this commit() is needed to write down the logs
-    session.commit()
-    _check_last_log(
-        session,
-        dag_id="example_bash_operator",
-        event="legacy_tree",
-        execution_date=EXAMPLE_DAG_DEFAULT_DATE,
+        event="robots",
+        dag_id=None,
+        execution_date=None,
     )
 
 

Reply via email to