Indico Sentry Plugin
Sends errors and performance data from Indico to Sentry.
Indico already has basic Sentry support built in: if you set SENTRY_DSN in indico.conf, errors are
reported through the Flask, logging and Redis integrations. This plugin replaces that client with a
richer one and moves the configuration into the admin area.
What it adds
| Indico core | This plugin | |
|---|---|---|
| Configuration | indico.conf only |
Admin UI, with indico.conf as fallback |
| Integrations | Flask, logging, Redis, pure_eval | + Celery, + SQLAlchemy (optional) |
| Performance tracing | – | Per-endpoint sample rates |
| Profiling | – | Yes |
| Error filtering | – | By exception, logger or endpoint |
| Data scrubbing | SDK defaults | Configurable field list, query strings, breadcrumbs |
| Indico context | user, endpoint, RH class | + event, category, contribution, registration |
| Test event | – | Button on the settings page and indico sentry test |
Requirements
- Indico 3.3 or newer
- Python 3.12
Installation
pip install indico-plugin-sentry
Enable it in indico.conf:
PLUGINS = {'sentry'}
Then restart Indico (and the Celery workers) and open Administration → Plugins → Sentry.
Configuration
All settings live on the plugin page. The DSN can also come from SENTRY_DSN in indico.conf; the
plugin setting wins when both are set.
Connection
| Setting | Notes |
|---|---|
Sentry DSN |
Falls back to SENTRY_DSN from indico.conf |
Environment |
Falls back to SENTRY_ENVIRONMENT, default production |
Release |
Defaults to the Indico version |
Server name |
Overrides the reported hostname |
Performance
Tracing is off by default. Set Trace sample rate to something small (0.01–0.05) on a busy
instance, then tune individual endpoints:
assets.* = 0
events.display = 0.5
api.* = 0.1
A trailing * matches a prefix. Profile sample rate is a fraction of traced requests, so it
does nothing while tracing is at 0.
Filtering
Three lists, one entry per line:
- Ignored exceptions — bare (
NotFound) or dotted (werkzeug.exceptions.NotFound) class names. Subclasses are matched too. Defaults cover the HTTP errors that are part of normal operation. - Ignored loggers — logger names,
*suffix allowed. - Ignored endpoints — Indico endpoint names such as
assets.*orcore.ping. Applies to both errors and traces.
Transactions are named after the Indico endpoint (events.display), not the URL rule — that is
what these lists and the sample-rate overrides match against.
Privacy
- Send personal data off → no user, cookies, request body or auth headers leave the server.
- Send user email and name off → only the numeric user id is sent, so issues can still be counted per user.
- Scrubbed fields — any field whose name contains one of these fragments is replaced with
[Filtered], in the request body, cookies, headers, query string, breadcrumbs, tags and extras.
Which settings need a restart?
Sentry is configured once per worker process, so anything that goes into the client itself needs a restart of Indico and the Celery workers:
dsn, environment, release, server_name, logging_level, max_breadcrumbs,
attach_stacktrace, and the integration toggles.
Everything else — sample rates, filtering, scrubbing, privacy and context options — is evaluated per event and takes effect within 30 seconds (the settings cache TTL). The settings page tells you which saved settings the current worker has not picked up yet.
Reload in this worker rebuilds the client in the single process that served the page. It is meant for testing a new DSN, not as a substitute for a restart.
Verifying it works
From the settings page use Send test event, or from the command line:
indico sentry info # what this process is running
indico sentry test # send a test message
indico sentry test --crash # send a real exception with a stack trace
How it interacts with Indico core
Core calls sentry_sdk.init() in make_app() before plugins are loaded. This plugin re-initialises
the SDK on the app_created signal, which replaces the global client and closes the old one. If you
remove the plugin, core's client stays in charge and keeps using indico.conf.
Development
pip install -e '.[dev]'
pytest
ruff check .
The tests under tests/ cover the hooks and helpers and do not need a database.
License
MIT
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 indico_plugin_sentry-1.0.2.tar.gz.
File metadata
- Download URL: indico_plugin_sentry-1.0.2.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9fbe0bf84e77f34bfef5ba1faa2f33a563f302fbf528822feea819b3bc66de1
|
|
| MD5 |
817428b5a4a78d10481ea6c265561121
|
|
| BLAKE2b-256 |
2aa598f66e36c2976a07702393ebc9bb9fcb570c72b1714c71d4e95ae4209d18
|
Provenance
The following attestation bundles were made for indico_plugin_sentry-1.0.2.tar.gz:
Publisher:
publish.yml on RobotHanzo/IndicoSentry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
indico_plugin_sentry-1.0.2.tar.gz -
Subject digest:
e9fbe0bf84e77f34bfef5ba1faa2f33a563f302fbf528822feea819b3bc66de1 - Sigstore transparency entry: 2361811998
- Sigstore integration time:
-
Permalink:
RobotHanzo/IndicoSentry@b08ad70ca01a2c394b2a024e068d2a22c24b93b8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/RobotHanzo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b08ad70ca01a2c394b2a024e068d2a22c24b93b8 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file indico_plugin_sentry-1.0.2-py3-none-any.whl.
File metadata
- Download URL: indico_plugin_sentry-1.0.2-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c28c73425919fd188151f449bbb04a57be5f1c74b82321954acb9771c02b4535
|
|
| MD5 |
a92fa4e0b21b709304d5a52866cecbff
|
|
| BLAKE2b-256 |
313a71ff9f7b233c18de6c1130e0af6680cf5eebfcb933b430944849c5d80a53
|
Provenance
The following attestation bundles were made for indico_plugin_sentry-1.0.2-py3-none-any.whl:
Publisher:
publish.yml on RobotHanzo/IndicoSentry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
indico_plugin_sentry-1.0.2-py3-none-any.whl -
Subject digest:
c28c73425919fd188151f449bbb04a57be5f1c74b82321954acb9771c02b4535 - Sigstore transparency entry: 2361812001
- Sigstore integration time:
-
Permalink:
RobotHanzo/IndicoSentry@b08ad70ca01a2c394b2a024e068d2a22c24b93b8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/RobotHanzo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b08ad70ca01a2c394b2a024e068d2a22c24b93b8 -
Trigger Event:
workflow_dispatch
-
Statement type: