https://github.com/intgr/rocket-sentry
Simplifies integration between the Rocket web framework and Sentry application monitoring system.
https://github.com/intgr/rocket-sentry
Last synced: 2 months ago
JSON representation
Simplifies integration between the Rocket web framework and Sentry application monitoring system.
- Host: GitHub
- URL: https://github.com/intgr/rocket-sentry
- Owner: intgr
- License: mit
- Created: 2019-11-24T21:54:05.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2026-03-10T18:19:07.000Z (4 months ago)
- Last Synced: 2026-04-22T05:09:28.114Z (2 months ago)
- Language: Rust
- Homepage:
- Size: 99.6 KB
- Stars: 9
- Watchers: 1
- Forks: 9
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
Rocket Sentry
=============
[](https://crates.io/crates/rocket-sentry)
[](https://docs.rs/rocket-sentry/)
[](https://github.com/intgr/rocket-sentry/actions/workflows/tests.yml)
[](https://github.com/intgr/rocket-sentry/blob/main/CHANGELOG.md)
`rocket-sentry` is a simple add-on for the **Rocket** web framework to simplify
integration with the **Sentry** application monitoring system.
Or maybe...
> "The Rocket Sentry is a static rocket-firing gun platform that is based on a
> Personality Construct and used in the Aperture Science Enrichment Center."
>
> -- [Half-Life wiki](https://half-life.fandom.com/wiki/Rocket_Sentry)
Features
--------
Currently `rocket-sentry` includes two integrations:
* **Rust panic handler:** when a panic happens, it is reported as a Sentry event.
* **Performance Monitoring:** HTTP requests are reported as [Transactions](https://docs.sentry.io/product/performance/transaction-summary/),
if the `sentry_traces_sample_rate` setting is configured or `traces_sampler` callback is provided (see example below).
Transactions currently include the following fields:
- [X] HTTP method
- [X] GET query string
- [X] headers
- [X] environment name (based on Rocket configuration profile)
- [ ] POST data
- [ ] cookies
- [ ] URL
Pull requests welcome!
Usage
-----
`rocket-sentry` can be configured via `Rocket.toml` (`sentry_dsn=`) or
environment variable `ROCKET_SENTRY_DSN`.
To use this, add the dependency to your `Cargo.toml`, and add the fairing
to your code:
```rust
use rocket_sentry::RocketSentry;
#[launch]
fn rocket() -> _ {
rocket::build()
.attach(RocketSentry::fairing())
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ add this line
}
```
Then, the Sentry integration can be enabled by adding a `sentry_dsn=` value to
the `Rocket.toml` file, for example:
```toml
[debug]
sentry_dsn = "" # Disabled
[release]
sentry_dsn = "https://057006d7dfe5fff0fbed461cfca5f757@sentry.io/1111111"
sentry_traces_sample_rate = 0.2 # 20% of requests will be logged under the performance tab
```
### Performance Monitoring
`traces_sampler` can be used instead of `sentry_traces_sample_rate` to have a more granular control over performance monitoring,
[see Sentry documentation](https://docs.sentry.io/platforms/rust/configuration/sampling/#configuring-the-transaction-sample-rate).
```rust
use rocket_sentry::RocketSentry;
#[launch]
fn rocket() -> _ {
let traces_sampler = move |ctx: &TransactionContext| -> f32 {
match ctx.name() {
"GET /specific/path/1" | "GET /specific/path/2" => 0., // Drop the performance transaction
_ => 1.,
}
};
rocket::build()
.attach(RocketSentry::builder().traces_sampler(Arc::new(traces_sampler)).build());
}
```
See [a more advanced example](examples/performance.rs).
Testing
-------
The functionality can be tested with the `examples/panic.rs` example. Just
change the `Rocket.toml` file and run it...
```shell script
cargo run --example panic
```
Then try accessing this URL:
http://localhost:8012/panic?msg=Is+it+time+to+panic+yet?