Skip to content

Commit cd42c3b

Browse files
committed
feat(trogon-nats): propagate X-Req-Id header across NATS requests
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
1 parent 0523f13 commit cd42c3b

4 files changed

Lines changed: 13 additions & 4 deletions

File tree

rsworkspace/crates/acp-nats/src/agent/prompt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::agent::Bridge;
1111
use crate::nats::{FlushClient, PublishClient, RequestClient, SubscribeClient, agent};
1212
use crate::session_id::AcpSessionId;
1313

14-
pub const REQ_ID_HEADER: &str = "X-Req-Id";
14+
pub use trogon_nats::REQ_ID_HEADER;
1515

1616
#[instrument(
1717
name = "acp.session.prompt",

rsworkspace/crates/trogon-nats/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ tokio = { workspace = true, features = ["time"] }
1717
tracing = { workspace = true }
1818
tracing-opentelemetry = { workspace = true }
1919
trogon-std = { workspace = true }
20+
uuid = { workspace = true }
2021

2122
[dev-dependencies]
2223
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }

rsworkspace/crates/trogon-nats/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ pub use client::{FlushClient, PublishClient, RequestClient, SubscribeClient};
5050
pub use connect::{ConnectError, connect};
5151
pub use messaging::{
5252
FlushPolicy, NatsError, PublishOperationError, PublishOptions, PublishOptionsBuilder,
53-
RetryPolicy, headers_with_trace_context, inject_trace_context, publish, request,
54-
request_with_timeout,
53+
REQ_ID_HEADER, RetryPolicy, build_request_headers, headers_with_trace_context,
54+
inject_trace_context, publish, request, request_with_timeout,
5555
};
5656

5757
#[cfg(feature = "test-support")]

rsworkspace/crates/trogon-nats/src/messaging.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,20 @@ pub fn inject_trace_context(headers: &mut HeaderMap) {
2323
});
2424
}
2525

26+
pub const REQ_ID_HEADER: &str = "X-Req-Id";
27+
2628
pub fn headers_with_trace_context() -> HeaderMap {
2729
let mut headers = HeaderMap::new();
2830
inject_trace_context(&mut headers);
2931
headers
3032
}
3133

34+
pub fn build_request_headers() -> HeaderMap {
35+
let mut headers = headers_with_trace_context();
36+
headers.insert(REQ_ID_HEADER, uuid::Uuid::new_v4().to_string().as_str());
37+
headers
38+
}
39+
3240
pub async fn request_with_timeout<N: RequestClient, Req, Res>(
3341
client: &N,
3442
subject: &str,
@@ -40,7 +48,7 @@ where
4048
Res: DeserializeOwned,
4149
{
4250
let payload = serde_json::to_vec(request).map_err(NatsError::Serialize)?;
43-
let headers = headers_with_trace_context();
51+
let headers = build_request_headers();
4452

4553
let response = tokio::time::timeout(
4654
timeout,

0 commit comments

Comments
 (0)