fix: use redis aio

This commit is contained in:
trisua 2025-05-02 22:59:44 -04:00
parent 0df2cd7b56
commit ecde5d3d46
6 changed files with 240 additions and 30 deletions

View file

@ -11,10 +11,14 @@ pub use tetratto_core::*;
use axum::{Extension, Router};
use reqwest::Client;
use tera::{Tera, Value};
use tower_http::trace::{self, TraceLayer};
use tower_http::{
trace::{self, TraceLayer},
catch_panic::CatchPanicLayer,
};
use tower_governor::{GovernorLayer, governor::GovernorConfigBuilder};
use tracing::{Level, info};
use std::{collections::HashMap, env::var, process::exit, sync::Arc};
use std::{collections::HashMap, env::var, net::SocketAddr, process::exit, sync::Arc, time::Duration};
use tokio::sync::RwLock;
pub(crate) type State = Arc<RwLock<(DataManager, Tera, Client)>>;
@ -47,6 +51,27 @@ async fn main() {
init_dirs(&config).await;
let html_path = write_assets(&config).await;
// governor
// (1000/125) * 32 = 256 requests/second
let governor_config = Arc::new(
GovernorConfigBuilder::default()
.per_millisecond(125)
.burst_size(32)
.finish()
.unwrap(),
);
let governor_limiter = governor_config.limiter().clone();
let governor_interval = Duration::from_secs(60);
std::thread::spawn(move || {
loop {
std::thread::sleep(governor_interval);
tracing::info!("rate limiting storage size: {}", governor_limiter.len());
governor_limiter.retain_recent();
}
});
// ...
let database = DataManager::new(config.clone()).await.unwrap();
database.init().await.unwrap();
@ -78,7 +103,11 @@ async fn main() {
TraceLayer::new_for_http()
.make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
.on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
);
)
.layer(CatchPanicLayer::new())
.layer(GovernorLayer {
config: governor_config,
});
let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{}", config.port))
.await
@ -86,5 +115,10 @@ async fn main() {
info!("🐇 tetratto.");
info!("listening on http://0.0.0.0:{}", config.port);
axum::serve(listener, app).await.unwrap();
axum::serve(
listener,
app.into_make_service_with_connect_info::<SocketAddr>(),
)
.await
.unwrap();
}