Skip to main content

CLI to set overrides idempotently for multiple SLO's

Project description

datadog slo overrides CLI

Version Python License uv Ruff ty Pylint complexipy pyscn pytest tox ProperDocs pre-commit Conventional Commits Changelog Documentation: Diátaxis Build Coverage pyscn quality

CLI to set overrides idempotently for multiple SLO's

Usage

Set Datadog SLO corrections ("SLO overrides") on many SLOs at once, selected by tag. A correction excludes a time window from an SLO's error budget (e.g. for planned downtime); this tool is the bulk, idempotent, scriptable way to apply them.

Install

uv tool install datadog-slo-overrides       # global `datadog-slo-overrides` command
# or run without installing:
uvx datadog-slo-overrides --help
# or, from a checkout:
uv run datadog-slo-overrides --help

Check the installed version with datadog-slo-overrides --version.

Commands

Command What it does
run Preview (default) or --apply corrections to every SLO matching the tags.
init-config Write a starter config of non-secret defaults.
init-envrc Write a starter .envrc for optional, direnv-managed credential loading.

Credentials

The tool never stores credentials. They are resolved in this order (first wins):

  1. --api-key / --app-key flags
  2. DD_API_KEY / DD_APP_KEY environment variables
  3. an optional .envrc in the config dir, loaded via direnv

direnv-loaded values can never override a flag or a real environment variable.

Optional direnv setup (keep secret-fetching logic in a file that direnv's approval model governs, rather than the tool executing shell itself):

datadog-slo-overrides init-envrc                 # writes ~/.config/datadog-slo-overrides/.envrc
# edit it to `export DD_API_KEY=...` / `export DD_APP_KEY=...` (e.g. from Vault), then:
direnv allow ~/.config/datadog-slo-overrides

If the .envrc is present but unapproved, or doesn't export the keys, the tool prints an actionable hint instead of failing silently. The config dir honours XDG_CONFIG_HOME.

Selecting SLOs

  • --tag key:value — repeat to require several tags. One tag is sent to Datadog's (single-tag) server query; the rest are ANDed client-side.
  • --tags-query "<raw>" — a raw single-tag Datadog query, used as-is instead of --tag.

Idempotency strategies

run is idempotent: re-running the same command never creates duplicate corrections. --strategy controls when an existing correction counts as already covering your window:

--strategy Skips (creates nothing) when…
skip-if-covered (default) your window is fully inside an existing correction
skip-if-overlap any existing correction overlaps your window (may leave gaps)
skip-if-exact an existing correction matches your window exactly

Examples

Preview which SLOs would be corrected (dry run — nothing is written):

datadog-slo-overrides run --tag app:gitlab --tag customer:sbp \
    --start 2026-06-10T22:00 --end 2026-06-11T00:00

Apply a 2-hour scheduled-maintenance correction:

datadog-slo-overrides run --tag app:gitlab --tag customer:sbp \
    --start 2026-06-10T22:00 --end 2026-06-11T00:00 \
    --category "Scheduled Maintenance" --description "DB maintenance" \
    --apply

When a matched SLO is already covered, it is skipped rather than duplicated:

Already satisfied under --strategy skip-if-covered (will skip): 1
  SBP - SLO monitor for the sbp gitlab Website  (fbb8a2c3…)  -> correction d9e08dd2-…

DRY RUN — would create 0, skip 1 already present. Re-run with --apply to write.

Configuration file

init-config writes non-secret defaults (site, timezone, category, strategy) to ~/.config/datadog-slo-overrides/config.toml. CLI flags override the config, which overrides the built-in defaults. Credentials are never read from this file.

datadog-slo-overrides init-config

Run datadog-slo-overrides run --help for the full list of options.

Developing further

Development flow as Paleofuturistic Python

Prerequisite: uv

Setup

  • Fork and clone this repository.
  • On first run of any workflow command, the bootstrap step will prompt to install pre-commit hooks.

Workflow

All commands are invoked via ./workflow.cmd <namespace>.<task>:

Command Description
./workflow.cmd format Format code and sort imports
./workflow.cmd lint Run all linters (ruff, pylint, ty, complexipy, commitizen)
./workflow.cmd test Run all tests (pytest)
./workflow.cmd build Run security checks and build the package
./workflow.cmd release -i <type> Bump version, tag, push, build, publish, and upload SBOM
./workflow.cmd quality Run code quality analysis (pyscn)
./workflow.cmd secure Run security audit and generate SBOM
./workflow.cmd document Build and view documentation (properdocs)
./workflow.cmd develop.pre-commit Run all pre-commit hooks on the codebase
./workflow.cmd bootstrap --force Re-run the development environment setup

Development cycle

  • Add dependencies: uv add some_lib_you_need
  • Develop (optional, tinker: uvx --with-editable . ptpython)
  • Format: ./workflow.cmd format
  • Lint: ./workflow.cmd lint
  • Test: ./workflow.cmd test
  • Build: ./workflow.cmd build
  • Review docs: ./workflow.cmd document
  • Make a pull request.

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

datadog_slo_overrides_cli-0.0.4.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

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

datadog_slo_overrides_cli-0.0.4-py3-none-any.whl (38.6 kB view details)

Uploaded Python 3

File details

Details for the file datadog_slo_overrides_cli-0.0.4.tar.gz.

File metadata

  • Download URL: datadog_slo_overrides_cli-0.0.4.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for datadog_slo_overrides_cli-0.0.4.tar.gz
Algorithm Hash digest
SHA256 b03d27c0e3afe91851d573a6ea12d382897a6aa22eb33f15e5f2bfabca58ff43
MD5 f044db5a91ed9a70309824c1c14e1768
BLAKE2b-256 4761ebeddaf31aa46f2e07badeb76a237db330d707d45ff1ab8d7fab82199b42

See more details on using hashes here.

File details

Details for the file datadog_slo_overrides_cli-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: datadog_slo_overrides_cli-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 38.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for datadog_slo_overrides_cli-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 5e56a55a45ae9409517691fd55459f8b7bbb9fcd8173de00a0e514123fd959e7
MD5 31139e4511f94106deed9b20d5b06e5f
BLAKE2b-256 ca0ad8ccbdbb4b4900a8a27bcabcca52fac6b377b860ed28a75ca29b529fceb9

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