From c9e64e5f0b9c4dc2dcd237189d13b41fefdc109d Mon Sep 17 00:00:00 2001 From: Brent Schroeter Date: Sat, 8 Mar 2025 21:47:31 -0800 Subject: [PATCH] fix tracing spans across awaits --- src/auth.rs | 30 +++++++++++++++++------------- src/sessions.rs | 6 ++++-- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/auth.rs b/src/auth.rs index d3ba448..d3549a0 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -13,7 +13,7 @@ use oauth2::{ ClientSecret, CsrfToken, RedirectUrl, RefreshToken, TokenResponse, TokenUrl, }; use serde::{Deserialize, Serialize}; -use tracing::trace_span; +use tracing::{trace_span, Instrument}; use crate::{ app_error::AppError, @@ -197,17 +197,21 @@ impl FromRequestParts for AuthInfo { parts: &mut Parts, state: &AppState, ) -> Result>::Rejection> { - let _ = trace_span!("AuthInfo from_request_parts()").enter(); - let session = parts - .extract_with_state::(state) - .await? - .0 - .ok_or(AppError::auth_redirect_from_base_path( - state.settings.base_path.clone(), - ))?; - let user = session.get::(SESSION_KEY_AUTH_INFO).ok_or( - AppError::auth_redirect_from_base_path(state.settings.base_path.clone()), - )?; - Ok(user) + async move { + let session = parts + .extract_with_state::(state) + .await? + .0 + .ok_or(AppError::auth_redirect_from_base_path( + state.settings.base_path.clone(), + ))?; + let user = session.get::(SESSION_KEY_AUTH_INFO).ok_or( + AppError::auth_redirect_from_base_path(state.settings.base_path.clone()), + )?; + Ok(user) + } + // The Span.enter() guard pattern doesn't play nicely async + .instrument(trace_span!("AuthInfo from_request_parts()")) + .await } } diff --git a/src/sessions.rs b/src/sessions.rs index a02cb7d..12348c6 100644 --- a/src/sessions.rs +++ b/src/sessions.rs @@ -8,7 +8,7 @@ use axum::{ use axum_extra::extract::CookieJar; use chrono::{DateTime, TimeDelta, Utc}; use diesel::{pg::Pg, prelude::*, upsert::excluded}; -use tracing::trace_span; +use tracing::{trace_span, Instrument}; use crate::{app_error::AppError, app_state::AppState, schema::browser_sessions}; @@ -134,7 +134,7 @@ impl FromRequestParts for AppSession { parts: &mut Parts, state: &AppState, ) -> Result>::Rejection> { - let _ = trace_span!("AppSession::from_request_parts()").enter(); + async move { let jar = parts.extract::().await.unwrap(); let session_cookie = match jar.get(&state.settings.auth.cookie_name) { Some(cookie) => cookie, @@ -167,5 +167,7 @@ impl FromRequestParts for AppSession { tracing::debug!("no matching session found in database"); Ok(AppSession(None)) } + // The Span.enter() guard pattern doesn't play nicely async + }.instrument(trace_span!("AppSession::from_request_parts()")).await } }