Skip to main content

tellmewhendown

Report from inside your app to TellMeWhenDown — cron heartbeats and self-checks in one line. Zero dependencies (stdlib only), never raises, never slows a request.

pip install tellmewhendown

Put your app's API key (from your app's Setup tab) in the environment:

TMWD_API_KEY=tmwd_...

Heartbeats — "alert me if this stops running"

Call at the end of any scheduled job. If the job dies, the beat stops coming, and that silence is what alerts you.

from tellmewhendown import tmwd

# after your cron job finishes:
tmwd.heartbeat("nightly-backup")

# or decorate the whole job — a raising job sends nothing (which is the point):
@tmwd.beat("nightly-backup")
def run_backup():
    ...

Self-checks — "report what only the app can see"

import time
from tellmewhendown import tmwd

started = time.monotonic()
try:
    db.execute("select 1")
    tmwd.check("db", status="ok", latency_ms=(time.monotonic() - started) * 1000)
except Exception as err:
    tmwd.check("db", status="fail", detail={"error": str(err)})

Two consecutive fail reports open an incident and email you; the next ok resolves it. Monitors register themselves on the first signal — nothing to configure on the dashboard first.

Declare — "alert me even if a job never runs once"

A job that never sends its first signal has no monitor, so its silence is invisible. Declaring registers everything up front, with the real schedule:

# once at startup (idempotent — safe to call every boot):
tmwd.declare([
    {"kind": "heartbeat", "type": "nightly-backup", "interval_seconds": 86400},
    {"kind": "check", "type": "db", "interval_seconds": 3600},
])

Framework notes

  • Django: call from management commands, Celery tasks, or a periodic task.
  • Flask / FastAPI: call from your scheduled jobs (APScheduler, Celery) or a small health task.
  • Anywhere else: it's one POST — see the ingest API docs.

API

from tellmewhendown import TellMeWhenDown

client = TellMeWhenDown(
    api_key="tmwd_...",              # default: os.environ["TMWD_API_KEY"]
    base_url="https://...",          # default: https://ingest.tellmewhendown.com
    timeout=5.0,                     # seconds
    on_error=lambda msg: None,       # observe failures; reporting never raises
)

Every method returns True on success, False on any failure. A failure to report is never allowed to become your app's failure.

Metadata

Release files for tellmewhendown 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tellmewhendown 0.2.0
File Size Uploaded Provenance Actions
tellmewhendown-0.2.0.tar.gz 4.7 kB Without provenance Details for tellmewhendown-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tellmewhendown 0.2.0
File Interpreter ABI Platform Actions
tellmewhendown-0.2.0-py3-none-any.whl Python 3 none any Details for tellmewhendown-0.2.0-py3-none-any.whl

Total release size: 9.7 kB

Release files / tellmewhendown-0.2.0.tar.gz

Download URL tellmewhendown-0.2.0.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
eb5884f67d10284895056cae7e8c18232ca0dbe50c9532d09a0a4c40d6bfcded
BLAKE2b-256 checksum
How to use checksums
34b8fd9860bddb1c9855913fca3a2c20b2ae08d4eb239d68352dd4c4e7e8b701
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.3

Release files / tellmewhendown-0.2.0-py3-none-any.whl

Download URL tellmewhendown-0.2.0-py3-none-any.whl
Size 5.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
15717183f7c91c460a6568251f5fdc6e256c8bdb98ba47ba694ab84bcb638e1b
BLAKE2b-256 checksum
How to use checksums
717188f2ca30976209064b5c142774106e1e8cb3d173610ada358fd23312a8b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.3

Security for tellmewhendown 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page