Skip to content

Commit 1ee39e8

Browse files
committed
revert main
1 parent a76b1fc commit 1ee39e8

File tree

1 file changed

+63
-7
lines changed
  • opentelemetry-otlp/examples/basic-otlp/src

1 file changed

+63
-7
lines changed

opentelemetry-otlp/examples/basic-otlp/src/main.rs

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,9 @@ fn init_logs() -> SdkLoggerProvider {
5959
.build()
6060
}
6161

62-
// #[tokio::main]
63-
fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
64-
let rt = tokio::runtime::Runtime::new()?;
65-
let logger_provider = rt.block_on(async {
66-
init_logs()
67-
});
62+
#[tokio::main]
63+
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
64+
let logger_provider = init_logs();
6865

6966
// Create a new OpenTelemetryTracingBridge using the above LoggerProvider.
7067
let otel_layer = OpenTelemetryTracingBridge::new(&logger_provider);
@@ -101,8 +98,67 @@ fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
10198
.with(otel_layer)
10299
.with(fmt_layer)
103100
.init();
101+
102+
// At this point Logs (OTel Logs and Fmt Logs) are initialized, which will
103+
// allow internal-logs from Tracing/Metrics initializer to be captured.
104+
105+
let tracer_provider = init_traces();
106+
// Set the global tracer provider using a clone of the tracer_provider.
107+
// Setting global tracer provider is required if other parts of the application
108+
// uses global::tracer() or global::tracer_with_version() to get a tracer.
109+
// Cloning simply creates a new reference to the same tracer provider. It is
110+
// important to hold on to the tracer_provider here, so as to invoke
111+
// shutdown on it when application ends.
112+
global::set_tracer_provider(tracer_provider.clone());
113+
114+
let meter_provider = init_metrics();
115+
// Set the global meter provider using a clone of the meter_provider.
116+
// Setting global meter provider is required if other parts of the application
117+
// uses global::meter() or global::meter_with_version() to get a meter.
118+
// Cloning simply creates a new reference to the same meter provider. It is
119+
// important to hold on to the meter_provider here, so as to invoke
120+
// shutdown on it when application ends.
121+
global::set_meter_provider(meter_provider.clone());
122+
123+
let common_scope_attributes = vec![KeyValue::new("scope-key", "scope-value")];
124+
let scope = InstrumentationScope::builder("basic")
125+
.with_version("1.0")
126+
.with_attributes(common_scope_attributes)
127+
.build();
128+
129+
let tracer = global::tracer_with_scope(scope.clone());
130+
let meter = global::meter_with_scope(scope);
131+
132+
let counter = meter
133+
.u64_counter("test_counter")
134+
.with_description("a simple counter for demo purposes.")
135+
.with_unit("my_unit")
136+
.build();
137+
for _ in 0..10 {
138+
counter.add(1, &[KeyValue::new("test_key", "test_value")]);
139+
}
140+
141+
tracer.in_span("Main operation", |cx| {
142+
let span = cx.span();
143+
span.add_event(
144+
"Nice operation!".to_string(),
145+
vec![KeyValue::new("bogons", 100)],
146+
);
147+
span.set_attribute(KeyValue::new("another.key", "yes"));
148+
149+
info!(name: "my-event-inside-span", target: "my-target", "hello from {}. My price is {}. I am also inside a Span!", "banana", 2.99);
150+
151+
tracer.in_span("Sub operation...", |cx| {
152+
let span = cx.span();
153+
span.set_attribute(KeyValue::new("another.key", "yes"));
154+
span.add_event("Sub span event", vec![]);
155+
});
156+
});
157+
104158
info!(name: "my-event", target: "my-target", "hello from {}. My price is {}", "apple", 1.99);
159+
tracer_provider.shutdown()?;
160+
meter_provider.shutdown()?;
105161
logger_provider.shutdown()?;
106162

107163
Ok(())
108-
}
164+
}

0 commit comments

Comments
 (0)