From c508f78043c00c705193a8e3d97baca098dc39e9 Mon Sep 17 00:00:00 2001 From: "Wyatt J. Miller" Date: Sat, 28 Sep 2024 01:49:40 -0400 Subject: [PATCH] added rate limiting layer to activate, added author nested router --- backend/public/src/main.rs | 51 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/backend/public/src/main.rs b/backend/public/src/main.rs index b9cfa46..c5edf72 100644 --- a/backend/public/src/main.rs +++ b/backend/public/src/main.rs @@ -55,25 +55,25 @@ async fn main() { ) .init(); - if std::env::var("RUST_ENV").unwrap_or_else(|_| "development".to_string()) != "development" { - println!("we're not in development, starting up the rate limiter"); - let governor_conf = Arc::new( - GovernorConfigBuilder::default() - .per_second(2) - .burst_size(5) - .finish() - .unwrap(), - ); + // if std::env::var("RUST_ENV").unwrap_or_else(|_| "development".to_string()) != "development" { + println!("we're not in development, starting up the rate limiter"); + let governor_conf = Arc::new( + GovernorConfigBuilder::default() + .per_second(2) + .burst_size(5) + .finish() + .unwrap(), + ); - let governor_limiter = governor_conf.limiter().clone(); - let interval = Duration::from_secs(60); - // a separate background task to clean up - std::thread::spawn(move || loop { - std::thread::sleep(interval); - tracing::info!("rate limiting storage size: {}", governor_limiter.len()); - governor_limiter.retain_recent(); - }); - } + let governor_limiter = governor_conf.limiter().clone(); + let interval = Duration::from_secs(60); + // a separate background task to clean up + std::thread::spawn(move || loop { + std::thread::sleep(interval); + tracing::info!("rate limiting storage size: {}", governor_limiter.len()); + governor_limiter.retain_recent(); + }); + // } // grabbing the database url from our env variables let db_connection_str = std::env::var("DATABASE_URL") @@ -93,15 +93,22 @@ async fn main() { let app = Router::new() .nest("/", routes::root::RootRoute::routes()) .nest("/posts", routes::posts::PostsRoute::routes(&app_state)) + .nest( + "/comments", + routes::comments::CommentsRoute::routes(&app_state), + ) + .nest( + "/authors", + routes::authors::AuthorsRoute::routes(&app_state), + ) .layer( TraceLayer::new_for_http() .make_span_with(trace::DefaultMakeSpan::new().level(tracing::Level::INFO)) .on_response(trace::DefaultOnResponse::new().level(tracing::Level::INFO)), ) - .nest( - "/comments", - routes::comments::CommentsRoute::routes(&app_state), - ); + .layer(GovernorLayer { + config: governor_conf, + }); // run it with hyper let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();