SDK de Python
Monitoriza tus jobs programados desde tu código Python con el SDK oficial de SteadyCron. Envuelve un job con @steadycron.job y recibe alertas ante ejecuciones perdidas, fallidas o bloqueadas — el monitor se declara como código en YAML o Terraform.
El paquete de Python steadycron es el SDK oficial de monitorización por código.
Envuelve un job programado con @steadycron.job y SteadyCron sabrá cuándo
comenzó, tuvo éxito o falló — y te alertará si no se ejecuta a
tiempo o comienza pero nunca termina.
El SDK nunca crea monitores. Declaras el monitor heartbeat como código — en un
manifiesto YAML o con el
provider de Terraform — y lo referencias desde tu aplicación por
su key estable. El horario cron, las reglas de alerta y la instrumentación viven
así en el mismo repositorio.
Instalación
pip install steadycron
Sin dependencias en tiempo de ejecución — el SDK usa únicamente la biblioteca estándar de Python.
Inicio rápido
import steadycron
steadycron.api_key = "sc_ro_..." # clave de solo lectura; o define STEADYCRON_API_KEY
@steadycron.job("nightly-db-backup") # el key del monitor, tal como se declaró en código
def backup():
run_backup() # start al entrar, success al retornar, fail (+ relanza) ante una excepción
La cadena "nightly-db-backup" es el mismo key que defines en el recurso
steadycron_heartbeat_monitor (Terraform) o como id del job heartbeat
(manifiesto YAML). Ese es el único contrato entre tu schedule-as-code y tu
aplicación.
Gestor de contexto
with steadycron.monitor("nightly-db-backup"):
run_backup()
Pings manuales
Para un control más fino, envía los pings tú mismo:
m = steadycron.Monitor("nightly-db-backup")
m.ping() # heartbeat de éxito
m.ping(state="start")
m.ping(state="fail", message="disk full")
Autenticación
El SDK usa una clave API de solo lectura para resolver un key de monitor a su token de ping al iniciar. Crea una en Configuración → Claves API → Nueva clave → Alcance: Solo lectura.
Proporciónala mediante cualquiera de estas opciones:
- Variable de entorno:
STEADYCRON_API_KEY=sc_ro_... - Atributo del módulo:
steadycron.api_key = "sc_ro_..." steadycron.configure(api_key="sc_ro_...")
Configuración
import steadycron
steadycron.configure(
api_key="sc_ro_...",
environment="production", # opcional — se envía con cada ping
capture_errors=True, # incluir el mensaje de excepción en los pings fail (por defecto: False)
ping_timeout=5.0, # segundos (por defecto: 5)
resolve_cache_ttl=3600.0, # segundos (por defecto: 3600 = 1 hora)
)
| Ajuste | Por defecto | Variable de entorno |
|---|---|---|
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 | — |
Cómo funciona
- En el primer uso, el SDK llama a
GET /api/monitors/resolve?key=<tu-key>con la clave API de solo lectura para obtener el token de ping. El token se almacena en caché durante una hora (configurable medianteresolve_cache_ttl). - Todos los pings son fire-and-forget: se aplica un
ping_timeoutacotado, y cualquier error se registra mediantelogging.getLogger("steadycron")con nivelWARNINGy se descarta. Los pings nunca lanzan excepciones. - Los errores de resolución —
404(key desconocido),409(key ambiguo) o tipo incorrecto — se lanzan inmediatamente en el primer uso. Indican un error de configuración. - Ante una excepción dentro del job envuelto, se envía un ping
faily la excepción original se relanza sin modificar.
Modo directo / token
Si no puedes usar la resolución por clave API (por ejemplo, en un entorno aislado), define el token de ping directamente y omite la llamada de resolución:
steadycron.monitors = {"nightly-db-backup": "hRkmWz8oZtlMFzvTAUdnRE"}
El token está visible en el dashboard bajo Detalle del job → Monitorización por código → Revelar token de ping.
Garantía de fiabilidad
- Los fallos de ping nunca se lanzan. Un error de transporte, timeout o respuesta no-2xx se registra y se descarta — una caída de la monitorización nunca derriba tu job.
- Los errores de resolución siempre se lanzan. Un
404o409del endpoint de resolución lanza una excepción en el primer uso; corrige el key o elimina el decorador. - Las excepciones originales pasan sin cambios. El decorador y el gestor de contexto no envuelven tus excepciones.
- Sin dependencias en tiempo de ejecución. El SDK usa
urllib.requestde la biblioteca estándar.
Relacionado
- Monitorización heartbeat — cómo se detectan ejecuciones perdidas, fallidas y bloqueadas
- SDK de .NET — el mismo flujo de monitorización por código para .NET
- Provider de Terraform — declarar el monitor y su
keyen HCL - YAML y CLI — declarar el monitor en un manifiesto en su lugar
- Snippets de ping — hacer ping desde cualquier lenguaje o shell, sin el SDK