#rocket-web #sentry #rocket #monitoring #web-apps #web-framework #error-reporting

rocket-sentry

Simplifies integration between the Rocket web framework and Sentry application monitoring system

17 breaking releases

0.18.0 Jul 2, 2024
0.17.0 Nov 28, 2023
0.16.0 Nov 19, 2023
0.15.0 Feb 25, 2023
0.1.0 Nov 24, 2019

#752 in Web programming

Download history 43/week @ 2024-03-28 14/week @ 2024-04-04 15/week @ 2024-04-11 53/week @ 2024-04-18 5/week @ 2024-04-25 4/week @ 2024-05-09 4/week @ 2024-05-16 31/week @ 2024-05-23 9/week @ 2024-05-30 15/week @ 2024-06-06 30/week @ 2024-06-13 157/week @ 2024-06-27 73/week @ 2024-07-04 14/week @ 2024-07-11

244 downloads per month

MIT license

26KB
295 lines

Rocket Sentry

Crates.io version Documentation Tests status Changelog

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

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, if the sentry_traces_sample_rate setting is configured or traces_sampler callback is provided (see example below).

    Transactions currently include the following fields:

    • HTTP method
    • GET query string
    • headers
    • POST data
    • cookies
    • environment
    • 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:

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:

[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.

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.

Testing

The functionality can be tested with the examples/panic.rs example. Just change the Rocket.toml file and run it...

cargo run --example panic

Then try accessing this URL: http://localhost:8012/panic?msg=Is+it+time+to+panic+yet?

Dependencies

~17–51MB
~849K SLoC