diff options
Diffstat (limited to 'rust')
-rw-r--r-- | rust/env.example | 1 | ||||
-rw-r--r-- | rust/src/bin/fatcatd.rs | 16 | ||||
-rw-r--r-- | rust/src/endpoints.rs | 21 |
3 files changed, 38 insertions, 0 deletions
diff --git a/rust/env.example b/rust/env.example index d31bcac1..482f2400 100644 --- a/rust/env.example +++ b/rust/env.example @@ -4,3 +4,4 @@ AUTH_LOCATION="dev.fatcat.wiki" AUTH_KEY_IDENT="20190101-dev-dummy-key" AUTH_SECRET_KEY="5555555555555555555555555555555555555555xms=" AUTH_ALT_KEYS="20181220-dev:6666666666666666666666666666666666666666xms=,20181210-dev:7777777777777777777777777777777777777777xms=" +#SENTRY_DSN= diff --git a/rust/src/bin/fatcatd.rs b/rust/src/bin/fatcatd.rs index 34652105..388c6e61 100644 --- a/rust/src/bin/fatcatd.rs +++ b/rust/src/bin/fatcatd.rs @@ -12,7 +12,9 @@ use iron::middleware::AfterMiddleware; use iron::modifiers::RedirectRaw; use iron::{status, Chain, Iron, IronResult, Request, Response}; use iron_slog::{DefaultLogFormatter, LoggerMiddleware}; +use sentry::integrations::panic; use slog::{Drain, Logger}; +use std::env; // HTTP header middleware header! { (XClacksOverhead, "X-Clacks-Overhead") => [String] } @@ -38,12 +40,26 @@ fn main() -> Result<()> { ) .get_matches(); + dotenv::dotenv().ok(); + let decorator = slog_term::TermDecorator::new().build(); let drain = slog_term::CompactFormat::new(decorator).build().fuse(); let drain = slog_async::Async::new(drain).build().fuse(); let logger = Logger::root(drain, o!()); let formatter = DefaultLogFormatter; + // sentry exception handling + let sentry_dsn = env::var("SENTRY_DSN"); + let _guard = if let Ok(dsn) = sentry_dsn { + let client = sentry::init(dsn); + panic::register_panic_handler(); + info!(logger, "Sentry configured via DSN"); + Some(client) + } else { + info!(logger, "Sentry not configured"); + None + }; + let server = create_server()?; info!( logger, diff --git a/rust/src/endpoints.rs b/rust/src/endpoints.rs index ada13654..c49fbfc7 100644 --- a/rust/src/endpoints.rs +++ b/rust/src/endpoints.rs @@ -19,6 +19,7 @@ use fatcat_api_spec::models; use fatcat_api_spec::models::*; use fatcat_api_spec::*; use futures::{self, Future}; +use sentry::integrations::error_chain::capture_error_chain; use std::str::FromStr; use uuid::Uuid; @@ -79,6 +80,7 @@ macro_rules! wrap_entity_handlers { $get_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -127,6 +129,7 @@ macro_rules! wrap_entity_handlers { $post_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $post_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -177,6 +180,7 @@ macro_rules! wrap_entity_handlers { $post_batch_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $post_batch_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -231,6 +235,7 @@ macro_rules! wrap_entity_handlers { $update_resp::Forbidden(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $update_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -280,6 +285,7 @@ macro_rules! wrap_entity_handlers { $delete_resp::Forbidden(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $delete_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -311,6 +317,7 @@ macro_rules! wrap_entity_handlers { $get_history_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_history_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -354,6 +361,7 @@ macro_rules! wrap_entity_handlers { $get_rev_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_rev_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -379,6 +387,7 @@ macro_rules! wrap_entity_handlers { $get_edit_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_edit_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -415,6 +424,7 @@ macro_rules! wrap_entity_handlers { $delete_edit_resp::Forbidden(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $delete_edit_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -446,6 +456,7 @@ macro_rules! wrap_entity_handlers { $get_redirects_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_redirects_resp::GenericError(ErrorResponse { message: e.to_string() }) }, }; @@ -490,6 +501,7 @@ macro_rules! wrap_lookup_handler { $get_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_resp::BadRequest(ErrorResponse { message: e.to_string() }) }, }; @@ -523,6 +535,7 @@ macro_rules! wrap_fcid_handler { $get_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_resp::BadRequest(ErrorResponse { message: e.to_string() }) }, }; @@ -561,6 +574,7 @@ macro_rules! wrap_fcid_hide_handler { $get_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => { error!("{}", e); + capture_error_chain(&e); $get_resp::BadRequest(ErrorResponse { message: e.to_string() }) }, }; @@ -829,6 +843,7 @@ impl Api for Server { } Err(e) => { error!("{}", e); + capture_error_chain(&e); LookupFileResponse::BadRequest(ErrorResponse { message: e.to_string(), }) @@ -891,6 +906,7 @@ impl Api for Server { } Err(e) => { error!("{}", e); + capture_error_chain(&e); LookupReleaseResponse::BadRequest(ErrorResponse { message: e.to_string(), }) @@ -967,6 +983,7 @@ impl Api for Server { } Err(e) => { error!("{}", e); + capture_error_chain(&e); UpdateEditorResponse::GenericError(ErrorResponse { message: e.to_string(), }) @@ -1111,6 +1128,7 @@ impl Api for Server { Ok(changelog) => GetChangelogResponse::Success(changelog), Err(e) => { error!("{}", e); + capture_error_chain(&e); GetChangelogResponse::GenericError(ErrorResponse { message: e.to_string(), }) @@ -1135,6 +1153,7 @@ impl Api for Server { } Err(e) => { error!("{}", e); + capture_error_chain(&e); GetChangelogEntryResponse::GenericError(ErrorResponse { message: e.to_string(), }) @@ -1217,6 +1236,7 @@ impl Api for Server { } Err(e) => { error!("{}", e); + capture_error_chain(&e); AuthOidcResponse::GenericError(ErrorResponse { message: e.to_string(), }) @@ -1279,6 +1299,7 @@ impl Api for Server { } Err(e) => { error!("{}", e); + capture_error_chain(&e); AuthCheckResponse::GenericError(ErrorResponse { message: e.to_string(), }) |