added response_timer

This commit is contained in:
Philippe Loctaux 2023-02-28 17:24:40 +01:00
parent 44793eb8d4
commit 95b908836e
2 changed files with 37 additions and 0 deletions

View file

@ -7,6 +7,9 @@ async fn main() -> std::result::Result<(), rocket::Error> {
// Build server
let rocket_builder = rocket::build();
// Response timer
let rocket_builder = response_timer::ResponseTimer::rocket(rocket_builder);
// Database
let rocket_builder = database::Database::rocket(rocket_builder);

View file

@ -0,0 +1,34 @@
// Code stolen from https://crates.io/crates/rocket-response-time
// Copyright Thomas Parsley <info@thomasparsley.cz>, MIT License
use rocket::fairing::{Fairing, Kind};
use rocket::{Build, Request, Rocket};
pub struct ResponseTimer {}
impl ResponseTimer {
pub fn rocket(rocket_builder: Rocket<Build>) -> Rocket<Build> {
rocket_builder.attach(Self {})
}
}
#[rocket::async_trait]
impl Fairing for ResponseTimer {
fn info(&self) -> rocket::fairing::Info {
rocket::fairing::Info {
name: "ResponseTimer",
kind: Kind::Request | Kind::Response,
}
}
async fn on_request(&self, request: &mut Request<'_>, _: &mut rocket::Data<'_>) {
request.local_cache(std::time::Instant::now);
}
async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut rocket::Response<'r>) {
let start_time = request.local_cache(std::time::Instant::now);
let end_time = start_time.elapsed();
response.set_raw_header("X-Response-Time", format!("{end_time:.2?}"));
}
}