mi/backend/src/rocket_trace.rs

45 lines
1.3 KiB
Rust
Raw Normal View History

2020-11-10 22:11:05 +00:00
use rocket::fairing::{AdHoc, Fairing, Info, Kind};
2020-11-05 22:52:32 +00:00
use rocket::http::Header;
2020-11-05 17:14:23 +00:00
use rocket::{Data, Request, Response};
2020-11-10 22:11:05 +00:00
use rocket_contrib::serve::StaticFiles;
2020-11-05 17:14:23 +00:00
use rusty_ulid::generate_ulid_string;
2020-11-10 22:11:05 +00:00
#[derive(Default)]
2020-11-05 22:52:32 +00:00
pub struct RequestId;
2020-11-05 17:14:23 +00:00
2020-11-05 22:52:32 +00:00
impl Fairing for RequestId {
2020-11-05 17:14:23 +00:00
fn info(&self) -> Info {
Info {
2020-11-05 22:52:32 +00:00
name: "Request ID",
2020-11-05 17:14:23 +00:00
kind: Kind::Request | Kind::Response,
}
}
fn on_request(&self, request: &mut Request, _: &Data) {
2020-11-05 22:52:32 +00:00
match request.headers().get_one("X-Request-Id") {
Some(_) => {}
2020-11-05 17:14:23 +00:00
None => {
let reqid = generate_ulid_string();
request.add_header(Header::new("X-Request-Id", reqid.clone()));
}
};
}
fn on_response(&self, request: &Request, response: &mut Response) {
match request.headers().get_one("X-Request-Id") {
Some(reqid) => {
response.set_header(Header::new("X-Request-Id", format!("{}", reqid)));
}
None => {}
};
}
}
2020-11-10 22:11:05 +00:00
pub fn static_files() -> AdHoc {
AdHoc::on_attach("Static fileserver", |rocket| {
let asset_path = rocket.config().get_string("asset_path").unwrap();
Ok(rocket.mount("/static", StaticFiles::from(asset_path)))
})
}