Skip to main content

Unified Airflow + dbt reliability and quality platform

Project description

PyAirflowTester: Unified Airflow + dbt Reliability Platform

CI/CD Code Coverage PyPI

A correlation-first reliability and quality platform that unifies static analysis and runtime monitoring for Airflow DAGs and dbt projects.

Features

๐Ÿ” Static Analysis (Shift-Left)

  • DAG Validation: Circular dependencies, dynamic DAGs, expensive imports, parse time analysis
  • dbt Analysis: Missing tests, redundant tests, untested models, test failure analysis
  • Configuration Auditing: Detect misconfigurations and anti-patterns before deployment
  • 35+ Built-in Rules across reliability, performance, maintainability, security, and cost categories

โšก Runtime Analysis (Production)

  • Failure Pattern Detection: Identify chronic failures, hotspots, and cascading failures
  • Correlation Engine: Automatic root cause analysis linking source code to failures
  • Blast Radius Analysis: Understand downstream impact of failures
  • Failure Prediction: Predict failures 7 days in advance using historical data

๐Ÿ“Š Intelligence & Scoring

  • Multi-Dimensional Risk Scores: Reliability, performance, maintainability, security, cost
  • Health Scorecards: Comprehensive view of pipeline health
  • Trend Analysis: Track improvements and degradation over time

๐Ÿ”Œ OpenTelemetry Integration

  • Export to 6+ observability platforms: Datadog, New Relic, Honeycomb, Splunk, Dynatrace, Elastic
  • Alert routing to PagerDuty, Slack, email
  • Full trace instrumentation

๐Ÿ“ˆ Reporting

  • CLI Reports: Rich terminal output with colors and tables
  • Multiple Formats: JSON, HTML, Markdown, SARIF (GitHub integration), CSV
  • Custom Templates: Jinja2-based report customization

Installation

pip install pyairflowtester

Development Installation

git clone https://github.com/mullassery/pyairflowtester.git
cd pyairflowtester
pip install -e ".[dev,otel]"

Quick Start

Scan Airflow DAGs and dbt Projects

# Scan current directory
pyairflowtester scan .

# Scan specific paths
pyairflowtester scan --dags /path/to/dags --dbt /path/to/dbt

# Filter by severity
pyairflowtester scan . --severity high

# Generate HTML report
pyairflowtester scan . --format html --output report.html

Calculate Risk Scores

# Score your pipeline
pyairflowtester score .

# Compare to baseline
pyairflowtester score . --compare main

List Rules

# Show all rules
pyairflowtester rules

# Filter by category
pyairflowtester rules --category reliability

# Filter by severity
pyairflowtester rules --severity critical

Connect to Live Airflow (Runtime Analysis)

# Auto-detect Airflow instance
pyairflowtester connect --airflow-home /path/to/AIRFLOW_HOME

# Manual database connection
pyairflowtester connect --airflow-db postgresql://user:pass@localhost/airflow

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   CLI / API / Dashboards        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                 โ”‚
โ”‚  Artifact Analysis    Runtime   โ”‚
โ”‚  (Shift-Left)         (Prod)    โ”‚
โ”‚  โ€ข DAG Parser         โ€ข DB       โ”‚
โ”‚  โ€ข dbt Analyzer       โ€ข Collectorโ”‚
โ”‚  โ€ข Config Audit       โ€ข Logs     โ”‚
โ”‚                                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Correlation & Analysis Engine  โ”‚
โ”‚  โ€ข Failure Attribution          โ”‚
โ”‚  โ€ข Root Cause Analysis          โ”‚
โ”‚  โ€ข Blast Radius Calc            โ”‚
โ”‚  โ€ข Risk Scoring                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Storage Layer                  โ”‚
โ”‚  โ€ข PostgreSQL                   โ”‚
โ”‚  โ€ข TimescaleDB                  โ”‚
โ”‚  โ€ข S3/Cloud                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Rules

DAG Rules (AFW)

  • AFW001: Circular dependencies (Critical)
  • AFW002: Missing SLA (High)
  • AFW003: Expensive imports (Medium)
  • AFW004: Parse time analysis (Medium)
  • ... 15+ more DAG rules

dbt Rules (DBT)

  • DBT001: Missing tests (High)
  • DBT002: Redundant tests (Low)
  • DBT003: Untested public models (Medium)
  • ... 20+ more dbt rules

Configuration Rules (CFG)

  • CFG001: Executor misconfiguration
  • CFG002: Pool/queue bottlenecks
  • ... 15+ more configuration rules

Python API

from pyairflowtester import Scanner, Analyzer, ReportGenerator

# Artifact analysis
scanner = Scanner()
violations = scanner.scan_dags(Path("dags"))
violations += scanner.scan_dbt(Path("dbt"))

# Generate report
generator = ReportGenerator()
generator.generate("html", violations, Path("report.html"))

# Runtime analysis
analyzer = Analyzer(airflow_db="postgresql://...")
analyzer.connect()
failures = analyzer.analyze_dag_failures("my_dag")
hotspots = analyzer.detect_hotspots()
blast_radius = analyzer.calculate_blast_radius("my_dag", source_type="dag")

# Scoring
from pyairflowtester.scoring import Scorer
scorer = Scorer()
risk_score = scorer.calculate_risk_score(violations)
risk_level = scorer.categorize_risk(risk_score)

CI/CD Integration

GitHub Actions

- name: PyAirflowTester Scan
  uses: mullassery/pyairflowtester-action@v1
  with:
    dags-path: ./dags
    dbt-path: ./dbt
    format: sarif

Pre-commit Hook

repos:
  - repo: https://github.com/mullassery/pyairflowtester
    rev: v0.1.0
    hooks:
      - id: pyairflowtester
        args: [--severity, high]

Configuration

Create .pyairflowtester.yml:

artifacts:
  dags_path: ./dags
  dbt_path: ./dbt
  scan_on_commit: true

runtime:
  airflow_db: postgresql://localhost/airflow
  retention_days: 30

rules:
  enabled_categories:
    - reliability
    - performance
  min_severity: medium
  exclude_rules:
    - DBT002

scoring:
  weights:
    reliability: 0.5
    performance: 0.3
    maintainability: 0.2

otel:
  enabled: true
  exporter: datadog
  sample_rate: 1.0

Development

Build

# Build Rust extension
cargo build --release

# Build Python wheel
maturin build --release

Test

# Rust tests
cargo test

# Python tests
pytest python/tests/

# Integration tests
pytest python/tests/integration/

# Coverage
pytest --cov=pyairflowtester

Documentation

pip install sphinx sphinx-rtd-theme
cd docs
make html

Roadmap

  • v0.1 (Q4 2026): MVP - DAG + dbt analysis, 35 rules, basic risk scoring
  • v0.2 (Q1 2027): Runtime analysis, correlation engine, OTEL metrics
  • v0.3 (Q2 2027): Prediction & anomalies, CLI reports, Python API, OTEL tracing
  • v1.0 (Q3 2027): Enterprise features, multi-tenant, RBAC, 6+ OTEL platforms
  • v1.1+ (2028): IDE plugins, advanced ML, cost attribution, more platforms

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Development Setup

git clone https://github.com/mullassery/pyairflowtester.git
cd pyairflowtester
pre-commit install
pip install -e ".[dev]"

Running Tests

pytest python/tests/ -v
cargo test --verbose

License

PyAirflowTester is a proprietary product. See LICENSE for terms and conditions.

Support

Acknowledgments

Inspired by SonarQube, Ruff, Checkov, Monte Carlo, and Datadog.

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

pyairflowtester-0.1.0.tar.gz (134.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyairflowtester-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (285.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

Details for the file pyairflowtester-0.1.0.tar.gz.

File metadata

  • Download URL: pyairflowtester-0.1.0.tar.gz
  • Upload date:
  • Size: 134.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for pyairflowtester-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f270c9b0c96eb7f55bc39e06f2ab0cc7a283566f46ee7230397b7165ffd22a35
MD5 4905ad7fc545773fb33fcb262fcd9a6a
BLAKE2b-256 82258aa21b188fcc1cdd0c1ec28f4c13613c96a4ac5285230bb63dce4d97271e

See more details on using hashes here.

File details

Details for the file pyairflowtester-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyairflowtester-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2f05416b4309ebcecb8f870c5c0c856a22a5aa4df9ea431df7cc4048c60a5a6a
MD5 0307f6da11e7bb198e8b3f2a482fedc6
BLAKE2b-256 2b7c96945b2140fea567eeb46ceeac99a115bfa2fa9eef299ad5a3f47103c59c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page