PyForge è in vendita solo qui, sul sito ufficiale py-forge.com — diffida delle imitazioni.

Torna al catalogo
CronPulse: Guida agli alert per i fallimenti silenziosiAI & Automation

CronPulse: Guida agli alert per i fallimenti silenziosi

#python#automation#microsaas

Elimina per sempre i fallimenti silenziosi dei cron. Questo tutorial tecnico avanzato mostra come costruire un heartbeat watchdog self-hosted e pronto per la produzione in Go, sostituendo i costi SaaS da 80 $/mese. Esegui il wrap dei job CLI, rileva i blocchi silenziosi e invia alert istantanei su Slack e Discord con zero dipendenze. Include recipe complete per Docker e systemd.

Leggi l'approfondimento tecnicoEliminare i Fallimenti Silenziosi dei Cron con un Watchdog Heartbeat Self-Hosted
main.pymain.py — estratto d'esempio nello stile del tool
#!/usr/bin/env python3
"""CronPulse - Production-Ready Cron Heartbeat & Silent Failure Watchdog.

A zero-dependency CLI watchdog that wraps scheduled jobs, detects silent hangs,
captures non-zero exit codes, and routes real-time failure alerts to webhooks.

Features:
- Zero-dependency execution wrapper for CLI commands and shell scripts
- Configurable execution timeouts to catch silent background hangs
- Multi-channel webhook alert dispatching for Slack and Discord
- Detailed execution payload capturing stdout, stderr, and exit codes
- Self-contained environment variable parsing and payload formatting

Usage:
    python main.py wrap --name "daily-backup" --timeout 300 -- ./backup.sh
    python main.py ping --heartbeat-id "hb_123456" --status success
"""

import enum
import json
import os
import subprocess
import sys
import time
import urllib.request
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Tuple


class JobStatus(enum.Enum):
    """Execution status for tracked cron jobs."""

    SUCCESS = "success"
    FAILURE = "failure"
    TIMEOUT = "timeout"
    RUNNING = "running"


@dataclass(frozen=True)
class JobResult:
    """Immutable domain model representing the execution outcome of a job."""

    job_name: str
    status: JobStatus
    exit_code: int
    duration_seconds: float
    stdout: str
    stderr: str
    timestamp: float = field(default_factory=time.time)


class CronPulseWatchdog:
    """Core engine for wrapping command execution and dispatching heartbeat alerts."""

# ... the full file ships with your download