Code-monitoring SDK for SteadyCron — wrap your scheduled jobs with @steadycron.job to send start/success/fail pings automatically.
Project description
SteadyCron Python SDK
steadycron is the official Python code-monitoring SDK for SteadyCron.
Wrap your scheduled jobs with @steadycron.job and SteadyCron will:
- Know when a job started, succeeded, or failed
- Alert you when a job doesn't run on time (missed heartbeat)
- Detect stuck runs that start but never finish
The monitor must already exist — create it in the Dashboard, via YAML manifest, or Terraform. The SDK never creates monitors. For a fully code-driven workflow, declare the monitor in your Terraform configuration or YAML manifest and reference it from your application by key: the cron schedule, alert rules, and SDK instrumentation all live in the same repository.
Installation
pip install steadycron
No runtime dependencies — uses Python's standard library only.
Quick start
import steadycron
steadycron.api_key = "sc_ro_..." # read-only key; or set STEADYCRON_API_KEY env var
@steadycron.job("nightly-db-backup")
def backup():
run_backup() # start on entry, success on return, fail (+re-raise) on exception
Context manager
with steadycron.monitor("nightly-db-backup"):
run_backup()
Manual pings
m = steadycron.Monitor("nightly-db-backup")
m.ping() # bare success heartbeat
m.ping(state="start")
m.ping(state="fail", message="disk full")
Authentication
The SDK uses a read-only API key to resolve monitor keys to ping tokens at startup. Create one in:
SteadyCron Dashboard → Settings → API keys → New key → Scope: Read-only
Set it via:
- Environment variable:
STEADYCRON_API_KEY=sc_ro_... - Module attribute:
steadycron.api_key = "sc_ro_..." steadycron.configure(api_key="sc_ro_...")
Configuration
import steadycron
steadycron.configure(
api_key="sc_ro_...",
environment="production", # optional — sent on every ping
capture_errors=True, # include exception message on fail pings (default False)
ping_timeout=5.0, # seconds (default 5)
resolve_cache_ttl=3600.0, # seconds (default 3600 = 1 hour)
)
| Setting | Default | Env var fallback |
|---|---|---|
api_key |
None |
STEADYCRON_API_KEY |
api_url |
https://api.steadycron.com |
STEADYCRON_API_URL |
ping_url |
https://ping.steadycron.com |
STEADYCRON_PING_URL |
environment |
None |
STEADYCRON_ENVIRONMENT |
capture_errors |
False |
— |
ping_timeout |
5.0 s |
— |
resolve_cache_ttl |
3600.0 s |
— |
How it works
- On first use, the SDK calls
GET /api/monitors/resolve?key=<your-key>with the read-only API key to retrieve the ping token. The token is cached for 1 hour (configurable). - All pings are fire-and-forget: a bounded
ping_timeoutis applied; any error is logged vialogging.getLogger("steadycron")at WARNING and discarded. They never raise. - Resolution errors (404 unknown key, 409 ambiguous key, wrong kind) raise immediately — they indicate misconfiguration.
- On exception, a
failping is sent and the original exception is re-raised unchanged.
Direct / token mode (hardened path)
If you cannot use API key resolution (e.g. air-gapped environments), set the ping token directly:
steadycron.monitors = {"nightly-db-backup": "hRkmWz8oZtlMFzvTAUdnRE"}
The token is visible via Job detail → Code monitoring → Reveal ping token in the Dashboard.
Reliability contract
- Ping failures are never raised. A transport error, timeout, or non-2xx response is logged and discarded.
- Resolution errors always raise. A 404 or 409 from the resolve endpoint raises on first use; fix the key or remove the decorator.
- Original exceptions pass through unchanged. The decorator and context manager do not wrap exceptions.
- No runtime dependencies. The SDK uses
urllib.requestfrom the standard library.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file steadycron-0.1.0.tar.gz.
File metadata
- Download URL: steadycron-0.1.0.tar.gz
- Upload date:
- Size: 41.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d085cae83550603356ff8970fc96ae3d5632ea940c27f581a60aba8908a5f0d
|
|
| MD5 |
a49d3e7e9f5ae024e0e09f961cd7aa22
|
|
| BLAKE2b-256 |
c14e6888e5c5da917cdbbb2e695bf3efd5865d6ec7f06b1a044e48aec6096401
|
File details
Details for the file steadycron-0.1.0-py3-none-any.whl.
File metadata
- Download URL: steadycron-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d330dfc54b28f507f2c2c0f9c7abcdc10420081daa9458597d1f72151aedac0
|
|
| MD5 |
d58b6cbac76e5ab2421aae56c5c014c5
|
|
| BLAKE2b-256 |
097a08ccc9cf263a584cf50d3414b6e7b6107138d197ede4d5f0226eb64fe147
|