feat(usage): record request origin metadata (#362)

Record client IP and User-Agent in usage request_metadata for local execution requests without adding schema, API, or table fields.

References #357 and supersedes #358.

Co-authored-by: RWDai <27391645+RWDai@users.noreply.github.com>
This commit is contained in:
fawney19
2026-04-30 11:26:56 +08:00
committed by GitHub
parent 2b5247b9a8
commit 7fcb9e6292
12 changed files with 242 additions and 6 deletions

View File

@@ -49,7 +49,10 @@ use crate::handlers::shared::{
local_proxy_route_requires_buffered_body, request_enables_control_execute,
should_strip_forwarded_provider_credential_header, should_strip_forwarded_trusted_admin_header,
};
use crate::headers::{extract_or_generate_trace_id, should_skip_request_header};
use crate::headers::{
extract_or_generate_trace_id, request_origin_from_headers_and_remote_addr,
should_skip_request_header,
};
use crate::router::RequestAdmissionError;
use crate::{
AppState, FrontdoorUserRpmOutcome, GatewayError, GatewayFallbackMetricKind,
@@ -707,7 +710,13 @@ pub(crate) async fn proxy_request(
)) => return Err(GatewayError::Internal(message)),
};
let request_admission_ms = started_at.elapsed().as_millis() as u64;
let (parts, body) = request.into_parts();
let (mut parts, body) = request.into_parts();
parts
.extensions
.insert(request_origin_from_headers_and_remote_addr(
&parts.headers,
&remote_addr,
));
let trace_id = extract_or_generate_trace_id(&parts.headers);
state.clear_local_execution_runtime_miss_diagnostic(&trace_id);
if request_hits_execution_loop_guard(&parts) {