|
68 | 68 | from airflow.version import version as airflow_version |
69 | 69 |
|
70 | 70 | import dateutil.parser |
71 | | -from sqlalchemy import and_, func |
| 71 | +from sqlalchemy import and_, func, text |
72 | 72 | from sqlalchemy.exc import ProgrammingError |
73 | 73 | from sqlalchemy.orm import load_only |
74 | 74 |
|
@@ -461,16 +461,42 @@ def cleanup_function(**context): |
461 | 461 | session.close() |
462 | 462 |
|
463 | 463 |
|
| 464 | +def cleanup_sessions(): |
| 465 | + session = settings.Session() |
| 466 | + |
| 467 | + try: |
| 468 | + logging.info("Deleting sessions...") |
| 469 | + before = len(session.execute(text("SELECT * FROM session WHERE expiry > now()::timestamp(0);")).mappings().all()) |
| 470 | + session.execute(text("DELETE FROM session WHERE expiry > now()::timestamp(0);")) |
| 471 | + after = len(session.execute(text("SELECT * FROM session WHERE expiry > now()::timestamp(0);")).mappings().all()) |
| 472 | + logging.info("Deleted {} expired sessions.".format(before-after)) |
| 473 | + except Exception as e: |
| 474 | + logging.error(e) |
| 475 | + |
| 476 | + session.commit() |
| 477 | + session.close() |
| 478 | + |
| 479 | + |
464 | 480 | def analyze_db(): |
465 | 481 | session = settings.Session() |
466 | 482 | session.execute("ANALYZE") |
467 | 483 | session.commit() |
| 484 | + session.close() |
468 | 485 |
|
469 | 486 |
|
470 | 487 | analyze_op = PythonOperator( |
471 | 488 | task_id="analyze_query", python_callable=analyze_db, provide_context=True, dag=dag |
472 | 489 | ) |
473 | 490 |
|
| 491 | +cleanup_session_op = PythonOperator( |
| 492 | + task_id="cleanup_sessions", |
| 493 | + python_callable=cleanup_sessions, |
| 494 | + provide_context=True, |
| 495 | + dag=dag |
| 496 | +) |
| 497 | + |
| 498 | +cleanup_session_op.set_downstream(analyze_op) |
| 499 | + |
474 | 500 | for db_object in DATABASE_OBJECTS: |
475 | 501 | cleanup_op = PythonOperator( |
476 | 502 | task_id="cleanup_" + str(db_object["airflow_db_model"].__name__), |
|
0 commit comments