v0.34.0_fina;

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-18 12:00:59 +02:00
1 parent 1ca019d849
commit c207e8a03f
69 files changed
+1496 -13838

No files matched your search

+33 -17
View File
@@ -3,8 +3,16 @@ include!("request_id.rs");
// Retain the exchange through the response, but do not allocate an additional
// body adapter for a request whose body has no frames or trailers.
fn wrap_observed_request(body: Body, exchange: &Arc<Exchange>, idle: Duration) -> Body {
if body.is_end_stream() { body }
else { Body::new(MeteredBody::new(body, exchange.clone(), Direction::Request, idle)) }
if body.is_end_stream() {
body
} else {
Body::new(MeteredBody::new(
body,
exchange.clone(),
Direction::Request,
idle,
))
}
}
fn log_prefix(input: &str, max_chars: usize) -> String {
@@ -51,13 +59,12 @@ async fn observe(State(state): State<Arc<App>>, mut request: Request, next: Next
.unwrap_or_default()
.tls;
request.extensions_mut().insert(snapshot.clone());
let original_headers = if snapshot.envelope.config.compression.enabled()
&& request.method() != Method::HEAD
{
crate::compression::request_headers(request.headers())
} else {
HeaderMap::new()
};
let original_headers =
if snapshot.envelope.config.compression.enabled() && request.method() != Method::HEAD {
crate::compression::request_headers(request.headers())
} else {
HeaderMap::new()
};
let method = request.method().clone();
let is_head = method == Method::HEAD;
let ws_attempt = request
@@ -71,9 +78,15 @@ async fn observe(State(state): State<Arc<App>>, mut request: Request, next: Next
&& request.method() == Method::CONNECT
&& websocket::h3_protocol(&request) == Some("websocket"));
match request.version() {
Version::HTTP_11 => { state.metrics.http1_requests.fetch_add(1, Ordering::Relaxed); }
Version::HTTP_2 => { state.metrics.http2_requests.fetch_add(1, Ordering::Relaxed); }
Version::HTTP_3 => { state.metrics.http3_requests.fetch_add(1, Ordering::Relaxed); }
Version::HTTP_11 => {
state.metrics.http1_requests.fetch_add(1, Ordering::Relaxed);
}
Version::HTTP_2 => {
state.metrics.http2_requests.fetch_add(1, Ordering::Relaxed);
}
Version::HTTP_3 => {
state.metrics.http3_requests.fetch_add(1, Ordering::Relaxed);
}
_ => {}
}
let id = state.metrics.requests.fetch_add(1, Ordering::Relaxed) + 1;
@@ -132,7 +145,9 @@ async fn observe(State(state): State<Arc<App>>, mut request: Request, next: Next
frontend.metrics.active.fetch_add(1, Ordering::Relaxed);
}
let host = log_prefix(
request.headers().get(HOST)
request
.headers()
.get(HOST)
.and_then(|h| h.to_str().ok())
.unwrap_or_else(|| request.uri().authority().map(|v| v.as_str()).unwrap_or("")),
253,
@@ -315,7 +330,8 @@ async fn observe(State(state): State<Arc<App>>, mut request: Request, next: Next
// global encoding (e.g. Accept-Encoding: identity), encode is a no-op:
// avoid even constructing/resolving the per-request settings.
if method != Method::HEAD
&& crate::compression::preferred_encoding(&original_headers, global_compression).is_some()
&& crate::compression::preferred_encoding(&original_headers, global_compression)
.is_some()
{
let mut compression = global_compression.clone();
if let Some(frontend) = frontend_context.as_ref() {
@@ -330,9 +346,9 @@ async fn observe(State(state): State<Arc<App>>, mut request: Request, next: Next
.resolve(global_compression, &compression);
}
}
response = crate::compression::encode(
response, &original_headers, &method, &compression,
).await;
response =
crate::compression::encode(response, &original_headers, &method, &compression)
.await;
}
if let Some(encoding) = response
.extensions()