Skip to main content

Monitor batch pipelines via API and send email alerts for failures and missed runs

Project description

Pipeline Batch Monitor

Monitor batch jobs from CSV, check status via API, and email alerts for failures, missed runs, long-running jobs, and missing API data.

Version: see VERSION file.

Quick start (development)

cp .env.example .env          # edit with real SMTP/API credentials
./pipeline-monitor setup      # create .venv + dependencies
./pipeline-monitor validate   # check .env, CSV, Python
./pipeline-monitor run-once   # single test cycle
./pipeline-monitor run        # continuous local run

Same commands via Make: make setup, make validate, make run-once, make build.

Package workflow (build → deploy → use)

One CLI drives the full lifecycle:

./pipeline-monitor <command>
Command Purpose
setup Create .venv, install requirements.txt
validate Validate .env, jfl_batch.csv, syntax
run Run locally (foreground, continuous)
run-once One monitoring cycle (cron/debug)
build Create dist/pipeline-status-mailer-<version>.tar.gz + dist/latest.tar.gz
install Production install from source (+ systemd, needs sudo)
deploy Install from tarball (needs sudo)
status systemctl status
logs Follow journal or app log

1. Build release package

On your build machine (with .env configured for validation only — secrets are not bundled by default):

./pipeline-monitor validate
./pipeline-monitor build

Output:

  • dist/pipeline-status-mailer-1.0.0.tar.gz
  • dist/latest.tar.gz (copy of latest build)
  • MANIFEST.txt inside the package (file list + SHA256)

Private pipeline (bundle .env — handle tarball as secret):

./pipeline-monitor build --with-env

2. Copy to target server

scp dist/latest.tar.gz user@prod-server:/tmp/

3. Deploy on target server

ssh user@prod-server
tar -xzf /tmp/latest.tar.gz -C /tmp
cd /tmp/pipeline-status-mailer-*
cp .env.example .env && vi .env
sudo ./pipeline-monitor install --user inferyx --group inferyx

One-step deploy (from dev machine with .env present, copies .env into package during deploy):

sudo ./pipeline-monitor deploy dist/latest.tar.gz --user inferyx --group inferyx

On server after install:

sudo ./pipeline-monitor status
sudo ./pipeline-monitor logs
/opt/pipeline-status-mailer/pipeline-monitor run-once

See package/INSTALL.md inside the release tarball for server-side notes.

Default production paths

Item Path
Application /opt/pipeline-status-mailer
Python venv /home/inferyx/monitoring
Config /opt/pipeline-status-mailer/.env
Batches /opt/pipeline-status-mailer/jfl_batch.csv
systemd unit pipeline-status-mailer.service

Batch CSV (jfl_batch.csv)

Column Required Description
Name Yes Batch name for API
Frequency Yes Daily, Hourly, Monthly, Continuous, …
ExpectedStartTime Scheduled e.g. 9:30, 7:20:00, or 09:00,12:00
AvgExecutionTime Recommended e.g. 10 mins, 1 Hr
ExpectedDayOfMonth Monthly Day 1–31 (default 1)

Monthly example:

batch_monthly_finance_close,Monthly,9:30,10 mins,1

Configuration

Required in .env (see .env.example):

  • SMTP: PIPELINE_SMTP_*, PIPELINE_MAIL_TO, PIPELINE_FROM_NAME
  • API: PIPELINE_API_BASE_URL, PIPELINE_API_TOKEN, PIPELINE_API_TOKEN_HEADER
  • PIPELINE_DEVOPS_EMAIL

Optional tuning:

Variable Default
PIPELINE_CHECK_INTERVAL 60
PIPELINE_SCHEDULE_GRACE_MINUTES 5
PIPELINE_POST_RUN_GRACE_MINUTES 60

Email templates: config.py.

Project layout

Monitor/
  pipeline-monitor      # Main CLI (build / deploy / run)
  pipeline_status_mailer.py
  config.py
  jfl_batch.csv
  .env.example
  VERSION
  Makefile
  scripts/
    lib/common.sh
    build_release.sh
    deploy_release.sh
    install_pipeline_status_mailer.sh
    validate_env.sh
    setup_python_env.sh
    run_with_venv.sh
  package/INSTALL.md
  dist/                 # Created by build

Publish to PyPI (pip install)

Package name: inferyx-monitoring

Full step-by-step guide: docs/PYPI_PUBLISHING.md

Quick publish:

pip install build twine
make pip-build          # creates dist/*.whl and dist/*.tar.gz
make pip-check
make pip-test-upload    # optional: TestPyPI first
make pip-upload         # production PyPI (needs token)

Install from PyPI:

pip install inferyx-monitoring
mkdir -p /opt/pipeline-monitor && cd /opt/pipeline-monitor

# First time only — creates .env / jfl_batch.csv if missing
inferyx-monitoring --init-config
vi .env jfl_batch.csv

inferyx-monitoring --once --work-dir .

pip upgrade never changes your live config

File Shipped in pip package On pip upgrade
.env.example Yes (template) Updated in package only
jfl_batch.csv.example Yes (template) Updated in package only
.env No (you create locally) Never overwritten
jfl_batch.csv No (you create locally) Never overwritten

Upgrade code only:

pip install --upgrade inferyx-monitoring
# .env and jfl_batch.csv in /opt/pipeline-monitor stay as-is
sudo systemctl restart inferyx-monitoring.service

Makefile shortcuts

make setup validate build
make install    # sudo install from source
make deploy     # sudo deploy dist/latest.tar.gz
make status logs clean
make pip-build pip-upload   # PyPI release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inferyx_monitoring-1.0.7.tar.gz (20.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inferyx_monitoring-1.0.7-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file inferyx_monitoring-1.0.7.tar.gz.

File metadata

  • Download URL: inferyx_monitoring-1.0.7.tar.gz
  • Upload date:
  • Size: 20.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for inferyx_monitoring-1.0.7.tar.gz
Algorithm Hash digest
SHA256 e73a6266abff3d4f920d1b5fca904a2edae47df8c622e172c9066b7db66ddbd6
MD5 a4cf457cc0fb871ba8e96a70c6cf07d5
BLAKE2b-256 3ba044c0c3f82f1358849589388ab61c48dee07f465d8fae0c3debace2148065

See more details on using hashes here.

File details

Details for the file inferyx_monitoring-1.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for inferyx_monitoring-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 9e725e7a9500672ff97462eed971866e288ef04bcc7a170fa5f171f45b3496a9
MD5 4d8bebbc4c7d2e6707db974f9a01e715
BLAKE2b-256 0a0d73cad11ccfa4723886cf42d1153c6bcb88543cd72296b6a4688b964f2647

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page