Skip to main content

Sentinelle monitoring agent for Python apps (Flask, FastAPI, Django)

Project description

sentinelle-agent (Python)

Sentinelle monitoring agent for Python web apps. Supports Flask, FastAPI, Django.

Mirror of the official Node.js SDK (sentinelle-agent on npm) - same backend, same payload contract, same dashboard.

Install

pip install sentinelle-agent

Optional extras for framework auto-detection of typed dependencies:

pip install "sentinelle-agent[flask]"     # Flask
pip install "sentinelle-agent[fastapi]"   # FastAPI / Starlette
pip install "sentinelle-agent[django]"    # Django

Configuration

Two ways, equivalent:

Env vars (recommended for production):

export SENTINELLE_API_KEY=your-project-api-key
export SENTINELLE_SERVER_URL=https://api.sentinelle.dev
export SENTINELLE_APP_NAME=my-python-app

Code:

import sentinelle_agent

sentinelle_agent.init(
    api_key="your-project-api-key",
    server_url="https://api.sentinelle.dev",
    app_name="my-python-app",
)

Get your api_key from your Sentinelle dashboard - project settings.

Flask

from flask import Flask
import sentinelle_agent
from sentinelle_agent.flask_adapter import wrap_flask

sentinelle_agent.init(app_name="my-flask-app")

app = Flask(__name__)
wrap_flask(app)

@app.get("/hello")
def hello():
    return {"ok": True}

That's it. Routes are auto-discovered, request metrics tracked, errors captured.

FastAPI

from fastapi import FastAPI
import sentinelle_agent
from sentinelle_agent.fastapi_adapter import wrap_fastapi

sentinelle_agent.init(app_name="my-fastapi-app")

app = FastAPI()
wrap_fastapi(app)

@app.get("/hello")
async def hello():
    return {"ok": True}

Works with Starlette too (FastAPI is built on Starlette).

Django

In settings.py:

import sentinelle_agent
sentinelle_agent.init(app_name="my-django-app")

MIDDLEWARE = [
    # ... your other middlewares ...
    "sentinelle_agent.django_adapter.SentinelleMiddleware",
]

What it does

Per-request:

  • Times each request (HTTP middleware)
  • Tracks method, path, route template, status code, response ms
  • Aggregates top routes, errors 4xx / 5xx, status distribution

Errors:

  • Captures unhandled exceptions raised by your handlers
  • Captures uncaught exceptions on any thread (via sys.excepthook and threading.excepthook)
  • Captures slow requests (> 5000 ms) as warnings
  • Sensitive fields auto-redacted in request bodies / headers / query: password, token, secret, authorization, cookie, credit_card, cvv, ssn, api_key, session

Routes:

  • Discovered at startup (Flask url_map, FastAPI app.routes, Django URL conf)
  • Posted once to /api/webhooks/agent/routes

Heartbeat (every 60s by default):

  • App uptime, RSS memory (via psutil if available, else resource)
  • Python version, hostname, PID, platform, arch
  • Request metrics (total, avg ms, errors 4xx/5xx, top 5 routes)
  • Posted to /api/webhooks/agent/heartbeat

Server-driven kill switch:

  • If the backend returns kill_switch_active: true in a heartbeat response, the agent stops uploading new errors (but keeps sending heartbeats so the project stays observable).

Custom errors

import sentinelle_agent

try:
    do_something()
except Exception as e:
    sentinelle_agent.report_error({
        "type": "PaymentFailed",
        "message": str(e),
        "fatal": False,
    })
    raise

Sentinelle agent options

sentinelle_agent.init(
    api_key="...",
    server_url="https://api.sentinelle.dev",
    app_name="my-app",
    heartbeat_interval=60,     # seconds, default 60
    capture_unhandled=True,    # install sys/threading excepthooks, default True
    debug=False,               # print [Sentinelle Agent] log lines, default False
)

Memory & performance

  • Two daemon threads (heartbeat + flush). Both exit when the process exits.
  • Per-request middleware overhead: < 100us in steady state (a few dict updates under a lock, no I/O on the hot path).
  • Errors are buffered and sent in batches (every 30s, or sooner when 10+ accumulated, or immediately on fatal).
  • Request body sanitization is bounded (3 levels deep, lists capped at 50 items).

License

MIT

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

sentinelle_agent-0.1.0.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

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

sentinelle_agent-0.1.0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file sentinelle_agent-0.1.0.tar.gz.

File metadata

  • Download URL: sentinelle_agent-0.1.0.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for sentinelle_agent-0.1.0.tar.gz
Algorithm Hash digest
SHA256 22b207a0e872b5aa6cc8682a0e9a08e0813e9ae0ad2ed055b0b9dd8e3e1adf60
MD5 de68a62de489ad51dc4279d60e69b246
BLAKE2b-256 b27f77f0e01c5eb6b6092abaadc37fc7a95fe33517c5db961666e03e23d92241

See more details on using hashes here.

File details

Details for the file sentinelle_agent-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sentinelle_agent-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f793f693df08a836b7d7cbc5aac7a4c3d7972a0ffc400b1a212b87baed7e7ec
MD5 05bbe77ada3a846e533e07c98e29edde
BLAKE2b-256 91767f0b5290cb06dafaf4597e6d7925f6d2025f5233ecb27f4c93169c186951

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