Deep visibility into your Airflow task changes
Project description
DagSonar
Deep visibility into your Airflow task changes through AST parsing and tracking
What is DagSonar?
DagSonar is a monitoring tool that provides deep visibility into your Airflow DAG tasks by tracking changes through AST (Abstract Syntax Tree) parsing. It detects modifications in task definitions, external variables, shell scripts, and function calls, ensuring you never miss critical changes to your DAGs.
Key Features
- AST-Based Detection: Tracks changes by parsing the Abstract Syntax Tree of your DAG files
- Task Reference Tracking: Monitors task definitions, external variables, and function calls
- Shell Script Integration: Tracks associated shell scripts referenced in BashOperator tasks
- Change History: Maintains a JSON-based history of all task modifications
- Task Hash Generation: Generates unique hashes for each task state to detect changes
- Support for Multiple DAGs: Track tasks across multiple DAG configurations
Installation
pip install dagsonar
Basic Usage
from pathlib import Path
from dagsonar import TaskTracker, DagConfig
# Initialize the tracker
tracker = TaskTracker(history_file=Path("task_history.json"))
# Configure DAGs to track
dag_configs = {
"example_dag": DagConfig(
path=Path("/path/to/dag.py"),
tasks=["task1", "task2"] # Optional: specify tasks to track
)
}
# Track tasks and get references
references = tracker.track_tasks(dag_configs)
# Check for changes
changes = tracker.check_for_changes(references)
# Save the new state
tracker.save_history(references)
Features in Detail
Task Reference Tracking
DagSonar tracks several aspects of your tasks:
- Task content and structure through AST
- External variable references
- Called functions
- Shell scripts referenced in bash tasks
- Task-specific hashes for change detection
Supported Task Types
Currently supports tracking of:
- Function-based task definitions
- BashOperator task instances
- Referenced shell scripts
- External variable dependencies
Configuration
DagConfig
from dagsonar import DagConfig
from pathlib import Path
config = DagConfig(
path=Path("/path/to/dag.py"), # Path to DAG file
tasks=["task1", "task2"] # Optional: List of specific tasks to track
)
Task History
Task history is stored in JSON format with the following structure:
[
{
"dag_id": "example_dag",
"reference": {
"dag_id": "example_dag",
"task_history": [
{
"task_id": "task1",
"content": "<ast_content>",
"hash": "<computed_hash>",
"external_variables": [],
"called_functions": [],
"shell_scripts": []
}
]
}
}
]
Contributing
We welcome contributions! Please check out our Contributing Guide to get started.
Development Setup
- Clone the repository:
git clone https://github.com/pesnik/dagsonar.git
cd dagsonar
- Create a virtual environment:
python -m venv venv
source venv/bin/activate # Linux/Mac
# or
.\venv\Scripts\activate # Windows
- Install development dependencies:
pip install -e ".[dev]"
Running Tests
pytest tests/
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Acknowledgments
- Apache Airflow community
- All contributors and users providing valuable feedback
Built for the Airflow community
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dagsonar-0.0.2.tar.gz.
File metadata
- Download URL: dagsonar-0.0.2.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
798d062b511801ce753767b8d5a462795be952feeba53d15bb64e5f6b2cc8445
|
|
| MD5 |
427cbfa13019dcfe19858e42790ba0e0
|
|
| BLAKE2b-256 |
f2145a12eb8dfa24e73097a76c68980ea4b552e33eb718640a8f7e89b811268c
|
File details
Details for the file dagsonar-0.0.2-py3-none-any.whl.
File metadata
- Download URL: dagsonar-0.0.2-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
953491dd2aff68de894c75650b7eba4412934fb7485c1f0c957625d1aff4851f
|
|
| MD5 |
33700bd1f81cb17ebd53383095d3ced3
|
|
| BLAKE2b-256 |
9632af0d182a51c9741715b9f8241b9617d52d2b422504073b834dac2e1f1d3a
|