in issue-bot/src/main.rs [129:162]
fn app(state: AppState) -> Router {
Router::new()
.nest("/event", routes::event_router())
.route("/index", post(index_repository))
.route_layer(middleware::from_fn(middlewares::track_metrics))
.layer(
ServiceBuilder::new()
.layer(HandleErrorLayer::new(|error: BoxError| async move {
if error.is::<tower::timeout::error::Elapsed>() {
Ok(StatusCode::REQUEST_TIMEOUT)
} else {
Err((
StatusCode::INTERNAL_SERVER_ERROR,
format!("Unhandled internal error: {error}"),
))
}
}))
.timeout(Duration::from_secs(10))
.layer(
TraceLayer::new_for_http()
.make_span_with(RequestSpan)
.on_response(|res: &Response<_>, latency: Duration, _span: &Span| {
info!(
latency_micros = latency.as_micros(),
status_code = res.status().as_u16(),
)
}),
)
.into_inner(),
)
.layer(middleware::from_fn(middlewares::add_request_id))
.route("/health", get(health))
.with_state(state)
}