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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.