aws_smithy_observability_otel/
lib.rs1#![cfg_attr(docsrs, feature(doc_auto_cfg))]
8#![warn(
10 missing_docs,
11 rustdoc::missing_crate_level_docs,
12 unreachable_pub,
13 rust_2018_idioms
14)]
15#![cfg(not(target_arch = "powerpc"))]
17
18pub mod attributes;
23pub mod meter;
24
25#[cfg(test)]
26mod tests {
27
28 use std::sync::Arc;
29
30 use crate::meter::OtelMeterProvider;
31 use aws_smithy_observability::{
32 global::{get_telemetry_provider, set_telemetry_provider},
33 TelemetryProvider,
34 };
35 use opentelemetry_sdk::metrics::{data::Sum, PeriodicReader, SdkMeterProvider};
36 use opentelemetry_sdk::runtime::Tokio;
37 use opentelemetry_sdk::testing::metrics::InMemoryMetricsExporter;
38
39 #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
41 async fn can_construct_set_and_use_otel_as_global_telemetry_provider() {
42 let exporter = InMemoryMetricsExporter::default();
44 let reader = PeriodicReader::builder(exporter.clone(), Tokio).build();
45 let otel_mp = SdkMeterProvider::builder().with_reader(reader).build();
46
47 let sdk_mp = Arc::new(OtelMeterProvider::new(otel_mp));
49 let sdk_ref = sdk_mp.clone();
50 let sdk_tp = TelemetryProvider::builder().meter_provider(sdk_mp).build();
51
52 let _ = set_telemetry_provider(sdk_tp);
54 let global_tp = get_telemetry_provider().unwrap();
55
56 let global_meter = global_tp
58 .meter_provider()
59 .get_meter("TestGlobalMeter", None);
60
61 let mono_counter = global_meter
62 .create_monotonic_counter("TestMonoCounter")
63 .build();
64 mono_counter.add(4, None, None);
65
66 sdk_ref.flush().unwrap();
67 let finished_metrics = exporter.get_finished_metrics().unwrap();
68
69 let extracted_mono_counter_data = &finished_metrics[0].scope_metrics[0].metrics[0]
70 .data
71 .as_any()
72 .downcast_ref::<Sum<u64>>()
73 .unwrap()
74 .data_points[0]
75 .value;
76 assert_eq!(extracted_mono_counter_data, &4);
77 }
78}