Skip to content

Commit 133e059

Browse files
committed
Tidy up logic for ID conversion
1 parent 0091096 commit 133e059

2 files changed

Lines changed: 40 additions & 14 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ddtrace"
3-
version = "0.0.5"
3+
version = "0.0.6"
44
authors = ["David Steiner <david_j_steiner@yahoo.co.nz", "Fergus Strangways-Dixon <fergusdixon101@gmail.com>"]
55
edition = "2021"
66
license = "MIT"

src/formatter.rs

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use std::io;
1010
use chrono::Utc;
1111
use opentelemetry::trace::{SpanId, TraceContextExt, TraceId};
1212
use serde::ser::{SerializeMap, Serializer as _};
13+
use serde::Serialize;
1314
use tracing::{Event, Subscriber};
1415
use tracing_opentelemetry::OtelData;
1516
use tracing_serde::fields::AsMap;
@@ -18,31 +19,34 @@ use tracing_subscriber::fmt::format::Writer;
1819
use tracing_subscriber::fmt::{FmtContext, FormatEvent, FormatFields};
1920
use tracing_subscriber::registry::{LookupSpan, SpanRef};
2021

22+
#[derive(Serialize)]
23+
struct DatadogId(u64);
24+
2125
struct TraceInfo {
22-
trace_id: String,
23-
span_id: String,
26+
trace_id: DatadogId,
27+
span_id: DatadogId,
2428
}
2529

26-
fn convert_trace_id(id: TraceId) -> String {
27-
let bytes = &id.to_bytes()[std::mem::size_of::<u64>()..std::mem::size_of::<u128>()];
28-
let dd_id = u64::from_be_bytes(bytes.try_into().unwrap());
29-
30-
dd_id.to_string()
30+
impl From<TraceId> for DatadogId {
31+
fn from(value: TraceId) -> Self {
32+
let bytes = &value.to_bytes()[std::mem::size_of::<u64>()..std::mem::size_of::<u128>()];
33+
Self(u64::from_be_bytes(bytes.try_into().unwrap()))
34+
}
3135
}
3236

33-
fn convert_span_id(id: SpanId) -> String {
34-
let dd_id = u64::from_be_bytes(id.to_bytes());
35-
36-
dd_id.to_string()
37+
impl From<SpanId> for DatadogId {
38+
fn from(value: SpanId) -> Self {
39+
Self(u64::from_be_bytes(value.to_bytes()))
40+
}
3741
}
3842

3943
fn lookup_trace_info<S>(span_ref: &SpanRef<S>) -> Option<TraceInfo>
4044
where
4145
S: Subscriber + for<'a> LookupSpan<'a>,
4246
{
4347
span_ref.extensions().get::<OtelData>().map(|o| TraceInfo {
44-
trace_id: convert_trace_id(o.parent_cx.span().span_context().trace_id()),
45-
span_id: convert_span_id(o.builder.span_id.unwrap_or(SpanId::INVALID)),
48+
trace_id: o.parent_cx.span().span_context().trace_id().into(),
49+
span_id: o.builder.span_id.unwrap_or(SpanId::INVALID).into(),
4650
})
4751
}
4852

@@ -114,3 +118,25 @@ impl<'a> io::Write for WriteAdaptor<'a> {
114118
Ok(())
115119
}
116120
}
121+
122+
#[cfg(test)]
123+
mod tests {
124+
use crate::formatter::DatadogId;
125+
use opentelemetry::trace::{SpanId, TraceId};
126+
127+
#[test]
128+
fn test_trace_id_converted_to_datadog_id() {
129+
let trace_id = TraceId::from_hex("2de7888d8f42abc9c7ba048b78f7a9fb").unwrap();
130+
let datadog_id: DatadogId = trace_id.into();
131+
132+
assert_eq!(datadog_id.0, 14391820556292303355);
133+
}
134+
135+
#[test]
136+
fn test_span_id_converted_to_datadog_id() {
137+
let span_id = SpanId::from_hex("58406520a0066491").unwrap();
138+
let datadog_id: DatadogId = span_id.into();
139+
140+
assert_eq!(datadog_id.0, 6359193864645272721);
141+
}
142+
}

0 commit comments

Comments
 (0)