Skip to main content

A CLI utility to poll dbt Cloud jobs and send macOS notifications

Project description

dbt Cloud Job Poller

A Python CLI tool to poll dbt Cloud jobs and send system (macOS) notifications about their status.

Why This Exists

When working with large dbt projects, developers often need to wait for CI jobs to complete after syncing their branches with main. This tool solves two key problems:

  1. Manual Monitoring: Instead of repeatedly checking job status, get notified when your specific job completes
  2. Notification Control: Since Slack/email notifications are either unavailable for notifs specific to a run (job_id) or too noisy if set for all CI alerts, this provides targeted notifications just for your target jobs.

Simply provide your dbt Cloud PAT and Job ID, and get notified on your laptop when the job finishes.

Features

  • Poll dbt Cloud jobs and monitor their status
  • Cute terminal output with color-coded status updates
  • System notifications for job completion (aka terminal sends alerts to macOS notification center)
  • Configurable polling interval
  • Somewhat detailed job status information once complete

Project Structure

dbt-heartrate/
├── src/
│   ├── dbt_heartbeat.py      # Main Python module/entrypoint   └── utils/
│       ├── __init__.py
│       ├── dbt_cloud_api.py  # dbt Cloud API interactions       └── os_notifs.py      # macOS notifs
├── pyproject.toml
└── README.md

Prerequisites

  • Python 3.8 or higher
  • dbt Cloud account with API access (via developer PAT)
  • macOS (for system notifications)

Installation

  1. Clone the repository:
git clone git remote add origin git@github.com:jairus-m/dbt-heartbeat.git
cd dbt-heartrate
  1. Create and activate a virtual environment:
uv sync
source .venv/bin/activate
  1. Install the package in development mode:
uv pip install -e .

Configuration

Create a .env file in the project root with your dbt Cloud credentials:

DBT_CLOUD_API_KEY=your_api_key
DBT_CLOUD_ACCOUNT_ID=your_account_id

Or export them directly in your terminal session:

export DBT_CLOUD_API_KEY=your_dbt_cloud_api_key
export DBT_CLOUD_ACCOUNT_ID=your_dbt_cloud_account_id

Usage

For help:

dh --help

Poll a dbt Cloud job:

dh <job_run_id> [--log-level LEVEL] [--poll-interval SECONDS]

Arguments

  • job_run_id: The ID of the dbt Cloud job run to monitor
  • --log-level: Set the logging level (default: INFO)
    • Choices: DEBUG, INFO, WARNING, ERROR, CRITICAL
  • --poll-interval: Time in seconds between polls (default: 30)

Example

# Poll job with default settings
dh 123456

# Poll job with debug logging and 15-second interval
dh 123456 --log-level DEBUG --poll-interval 15

Bash Output

macOS Notification

Future Work & Limitations

  1. The dbt CLoud API has a runs/ endpoint that's supposed to have a run_steps key within the data dict.
    • This would allow for dynamic output of which dbt command is running
    • Unforunately, with dbt Cloud API v2, that endpoint has been unstable and is no longer populated leading to missing functionality for a better CLI status output
  2. I focused the notifications for my MacBook and thus, have used pync which is a wrapper for terminal-notifer for macOS system notifications
    • So unfortuntaely, the current version does not support notifications for other OS systems (the CLI output should still work!)

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

dbt_heartbeat-0.1.1.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

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

dbt_heartbeat-0.1.1-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file dbt_heartbeat-0.1.1.tar.gz.

File metadata

  • Download URL: dbt_heartbeat-0.1.1.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.11

File hashes

Hashes for dbt_heartbeat-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d6a0349c9540ac3a2b7f0b1f6c7292af29710e94268845e6766fb6897fb29cd3
MD5 7b09fdb7646cae69df20fc9132c1919d
BLAKE2b-256 8c04211d3027ba978c05c3224f3a1c3708607280f40702bb4087e512328688ad

See more details on using hashes here.

File details

Details for the file dbt_heartbeat-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for dbt_heartbeat-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9a9c4fd2e70ed87a7e92ace36b9a4eecc06cd2921bcb4453dc9e5801fa44d8f4
MD5 5e0132b47107336b8937b7fae86bb61b
BLAKE2b-256 b43e3e89c8e601973c59a4e5098a5776897d1f276f32ec1beada3c323b368887

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