Skip to content

Commit 3333a7b

Browse files
committed
chore(deps): Update to OpenTelemetry 0.14
1 parent 155e867 commit 3333a7b

File tree

5 files changed

+53
-29
lines changed

5 files changed

+53
-29
lines changed

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ bytes = "1"
3131
chrono = "0.4"
3232
http = "0.2"
3333
thiserror = "1"
34-
opentelemetry = "0.13"
35-
opentelemetry-semantic-conventions = "0.5"
34+
opentelemetry = "0.14"
35+
opentelemetry-semantic-conventions = "0.6"
3636
reqwest = { version = "0.11", optional = true, default-features = false }
3737
serde = { version = "1", features = ["derive"] }
3838
serde_json = "1"
@@ -43,10 +43,10 @@ once_cell = "1"
4343
async-std = { version = "1.9.0", features = ["attributes"] }
4444
backtrace = "0.3.56"
4545
env_logger = "0.8.3"
46-
opentelemetry = { version = "0.13.0", features = ["rt-tokio"] }
46+
opentelemetry = { version = "0.14.0", features = ["rt-tokio"] }
4747
opentelemetry-application-insights = { path = ".", features = ["reqwest-client", "reqwest-blocking-client"] }
4848
test-case = "1.1.0"
49-
tokio = { version = "1.4.0", features = ["rt", "macros", "process", "time"] }
49+
tokio = { version = "1.6.0", features = ["rt", "macros", "process", "time"] }
5050
version-sync = "0.9.2"
5151

5252
[package.metadata.docs.rs]

examples/opentelemetry.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use tokio::time::sleep;
1414

1515
async fn spawn_children(n: u32, process_name: String) {
1616
let tracer = global::tracer("spawn_children");
17-
let span = tracer.start("spawn_children");
17+
let mut span = tracer.start("spawn_children");
1818
span.set_attribute(Key::new("n").i64(n.into()));
1919
span.set_attribute(Key::new("process_name").string(process_name.clone()));
2020
let cx = Context::current_with_span(span);
@@ -27,7 +27,7 @@ async fn spawn_children(n: u32, process_name: String) {
2727

2828
async fn spawn_child_process(process_name: &str) {
2929
let tracer = global::tracer("spawn_child_process");
30-
let span = tracer
30+
let mut span = tracer
3131
.span_builder("spawn_child_process")
3232
.with_kind(SpanKind::Client)
3333
.start(&tracer);
@@ -54,7 +54,7 @@ async fn spawn_child_process(process_name: &str) {
5454

5555
async fn run_in_child_process() {
5656
let tracer = global::tracer("run_in_child_process");
57-
let span = tracer.start("run_in_child_process");
57+
let mut span = tracer.start("run_in_child_process");
5858
span.add_event("leaf fn".into(), vec![]);
5959
sleep(Duration::from_millis(50)).await
6060
}

src/convert.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use opentelemetry::{
55
trace::{SpanId, TraceId},
66
};
77
use std::time::{Duration, SystemTime};
8+
use std::sync::Arc;
89

910
pub(crate) fn trace_id_to_string(trace_id: TraceId) -> String {
1011
format!("{:032x}", trace_id.to_u128())
@@ -33,16 +34,27 @@ pub(crate) fn time_to_string(time: SystemTime) -> String {
3334

3435
pub(crate) fn attrs_to_properties(
3536
attributes: &EvictedHashMap,
36-
resource: &Resource,
37+
resource: Option<Arc<Resource>>,
3738
) -> Option<Properties> {
38-
Some(
39-
attributes
40-
.iter()
41-
.map(|(k, v)| (k.as_str().into(), v.into()))
42-
.chain(resource.iter().map(|(k, v)| (k.as_str().into(), v.into())))
43-
.collect(),
44-
)
45-
.filter(|x: &Properties| !x.is_empty())
39+
let properties = attributes
40+
.iter()
41+
.map(|(k, v)| (k.as_str().into(), v.into()));
42+
43+
if let Some(resource) = resource {
44+
Some(
45+
properties
46+
.chain(resource.iter().map(|(k, v)| (k.as_str().into(), v.into())))
47+
.collect(),
48+
)
49+
.filter(|x: &Properties| !x.is_empty())
50+
} else {
51+
Some(
52+
properties.collect(),
53+
)
54+
.filter(|x: &Properties| !x.is_empty())
55+
}
56+
57+
4658
}
4759

4860
#[cfg(test)]

src/lib.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,20 @@ impl<C> PipelineBuilder<C> {
284284
/// .install_simple();
285285
/// ```
286286
pub fn with_trace_config(self, config: sdk::trace::Config) -> Self {
287-
let merged_resource = match self.config {
288-
Some(base_config) => base_config.resource.merge(&config.resource),
289-
None => (*config.resource).clone(),
287+
let config = match config.resource {
288+
Some(ref resource) => {
289+
let merged_resource = match self.config {
290+
Some(base_config) => base_config.resource.map(|r| r.merge(&resource)).unwrap_or(resource.as_ref().clone()),
291+
None => resource.as_ref().clone(),
292+
};
293+
294+
Some(config.with_resource(merged_resource))
295+
},
296+
None => Some(config)
290297
};
291298

292-
let config = config.with_resource(merged_resource);
293-
294299
PipelineBuilder {
295-
config: Some(config),
300+
config: config,
296301
..self
297302
}
298303
}
@@ -313,9 +318,10 @@ impl<C> PipelineBuilder<C> {
313318
/// ```
314319
pub fn with_service_name<T: Into<Cow<'static, str>>>(self, name: T) -> Self {
315320
let config = self.config.unwrap_or_default();
316-
let merged_resource = config.resource.merge(&sdk::Resource::new(vec![
321+
let new_resource = sdk::Resource::new(vec![
317322
semcov::resource::SERVICE_NAME.string(name),
318-
]));
323+
]);
324+
let merged_resource = config.resource.as_ref().map(|r| r.merge(&new_resource)).unwrap_or(new_resource);
319325
let config = config.with_resource(merged_resource);
320326

321327
PipelineBuilder {
@@ -359,7 +365,7 @@ where
359365
let config = self.config.take();
360366
let exporter = self.init_exporter();
361367
let mut builder =
362-
sdk::trace::TracerProvider::builder().with_default_batch_exporter(exporter, runtime);
368+
sdk::trace::TracerProvider::builder().with_batch_exporter(exporter, runtime);
363369
if let Some(config) = config {
364370
builder = builder.with_config(config);
365371
}
@@ -441,7 +447,7 @@ impl<C> Exporter<C> {
441447
}
442448

443449
fn create_envelopes(&self, span: SpanData) -> Vec<Envelope> {
444-
let mut result = Vec::with_capacity(1 + span.message_events.len());
450+
let mut result = Vec::with_capacity(1 + span.events.len());
445451

446452
let (data, tags, name) = match span.span_kind {
447453
SpanKind::Server | SpanKind::Consumer => {
@@ -472,7 +478,7 @@ impl<C> Exporter<C> {
472478
data: Some(data),
473479
});
474480

475-
for event in span.message_events.iter() {
481+
for event in span.events.iter() {
476482
let (data, name) = match event.name.as_ref() {
477483
"exception" => (
478484
Data::Exception(event.into()),
@@ -565,7 +571,7 @@ impl From<&SpanData> for RequestData {
565571
success: span.status_code != StatusCode::Error,
566572
source: None,
567573
url: None,
568-
properties: attrs_to_properties(&span.attributes, span.resource.as_ref()),
574+
properties: attrs_to_properties(&span.attributes, span.resource.clone()),
569575
};
570576

571577
if let Some(method) = span.attributes.get(&semcov::trace::HTTP_METHOD) {
@@ -631,7 +637,7 @@ impl From<&SpanData> for RemoteDependencyData {
631637
data: None,
632638
target: None,
633639
type_: None,
634-
properties: attrs_to_properties(&span.attributes, span.resource.as_ref()),
640+
properties: attrs_to_properties(&span.attributes, span.resource.clone()),
635641
};
636642

637643
if let Some(status_code) = span.attributes.get(&semcov::trace::HTTP_STATUS_CODE) {

src/models/sanitize.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ macro_rules! limited_len_string {
1818
}
1919
}
2020

21+
impl <'a> From<std::borrow::Cow<'a, str>> for $name {
22+
fn from(s: std::borrow::Cow<'a, str>) -> Self {
23+
Self(String::from(&s[0..std::cmp::min(s.len(), $len)]))
24+
}
25+
}
26+
2127
impl From<&opentelemetry::Value> for $name {
2228
fn from(v: &opentelemetry::Value) -> Self {
2329
v.as_str().into_owned().into()

0 commit comments

Comments
 (0)