Data Quality Monitoring Scripts Setup
This guide covers setup for the observability monitoring table scripts in apps/platform/scripts/observability/.
Purpose
Create and sync Supabase monitoring tables used by the client observability pages:
- monitoring config tables
- historical layer/source/workflow/QA checks
- current-state rollup tables
Script location
apps/platform/scripts/observability/client_config.template.jsonapps/platform/scripts/observability/runtime.pyapps/platform/scripts/observability/run_ingestion_layer.pyapps/platform/scripts/observability/run_source_freshness_layer.pyapps/platform/scripts/observability/run_cicd_layer.pyapps/platform/scripts/observability/run_modeling_freshness_layer.pyapps/platform/scripts/observability/run_metrics_qa_layer.py
Required environment variables
NEXT_PUBLIC_SUPABASE_URLorBF_SUPABASE_URLBF_SUPABASE_SERVICE_KEYSUPABASE_DB_URL(required because each layer script runsCREATE TABLE IF NOT EXISTS)
Optional:
DQ_CLIENT_CONFIG_PATH(path to your client config JSON)DQ_CHECKED_AT(fixed ISO timestamp for deterministic tests)
Run layers independently
From repo root:
python3 apps/platform/scripts/observability/run_ingestion_layer.py --dry-run
python3 apps/platform/scripts/observability/run_source_freshness_layer.py --dry-run
python3 apps/platform/scripts/observability/run_cicd_layer.py --dry-run
python3 apps/platform/scripts/observability/run_modeling_freshness_layer.py --dry-run
python3 apps/platform/scripts/observability/run_metrics_qa_layer.py --dry-runWrite mode (remove --dry-run):
python3 apps/platform/scripts/observability/run_ingestion_layer.py
python3 apps/platform/scripts/observability/run_source_freshness_layer.py
python3 apps/platform/scripts/observability/run_cicd_layer.py
python3 apps/platform/scripts/observability/run_modeling_freshness_layer.py
python3 apps/platform/scripts/observability/run_metrics_qa_layer.pyCompleting templated collectors
Each layer script includes placeholder collector logic. Replace defaults with real providers:
- ingestion checks (e.g. Polytomic/Fivetran/Snowflake load checks)
- source freshness checks
- GitHub Actions workflow checks
- modeling freshness (dbt workflow state)
- metrics and QA checks
Keep credentials in env vars or 1Password-backed runtime injection; do not hardcode secrets in repo files.