tdm_server_rust/telemetry/skywalking/
exit.rs1use super::{context, sw_propagation};
4use ::skywalking::trace::span::Span;
5
6pub fn create_exit_span(operation: &str, url: &str) -> Option<(Span, String)> {
8 let peer = remote_peer(url);
9 let span = context::with_current_mut(|ctx| ctx.create_exit_span(operation, &peer))?;
10 Some((span, peer))
11}
12
13pub fn inject_outbound(headers: &mut reqwest::header::HeaderMap, endpoint: &str, peer: &str) {
15 context::with_current(|ctx| {
16 let sw8 = sw_propagation::encode_sw8_value(ctx, endpoint, peer);
17 if let Ok(name) = reqwest::header::HeaderName::from_bytes(b"sw8") {
18 if let Ok(val) = reqwest::header::HeaderValue::from_str(&sw8) {
19 headers.insert(name, val);
20 }
21 }
22 sw_propagation::inject_traceparent_reqwest(headers, ctx.trace_id());
23 });
24}
25
26fn remote_peer(url: &str) -> String {
28 reqwest::Url::parse(url)
29 .ok()
30 .and_then(|u| {
31 let host = u.host_str()?.to_string();
32 u.port().map(|p| format!("{host}:{p}")).or(Some(host))
33 })
34 .unwrap_or_else(|| "unknown".into())
35}