Skip to content

Commit 34dfd8b

Browse files
committed
save
1 parent ef2d64b commit 34dfd8b

File tree

5 files changed

+222
-122
lines changed

5 files changed

+222
-122
lines changed

crates/cli/src/args.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use katana_node::config::Config;
2727
use katana_node::Node;
2828
use katana_primitives::genesis::allocation::DevAllocationsGenerator;
2929
use katana_primitives::genesis::constant::DEFAULT_PREFUNDED_ACCOUNT_BALANCE;
30+
use katana_tracing::LogFormat;
3031
use serde::{Deserialize, Serialize};
3132
use tracing::info;
3233
use url::Url;
@@ -129,7 +130,17 @@ impl NodeArgs {
129130
pub async fn execute(&self) -> Result<()> {
130131
// Initialize logging with tracer
131132
let tracer_config = self.tracer_config();
132-
katana_tracing::init(self.logging.log_format, tracer_config).await?;
133+
134+
match self.logging.log_format {
135+
LogFormat::Full => {
136+
katana_tracing::TracingBuilder::new().build()?;
137+
}
138+
LogFormat::Json => {
139+
katana_tracing::TracingBuilder::new().json().init(tracer_config)?;
140+
}
141+
}
142+
143+
// katana_tracing::init(self.logging.log_format, tracer_config).await?;
133144
self.start_node().await
134145
}
135146

crates/tracing/src/builder.rs

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
use std::marker::PhantomData;
22

3-
use opentelemetry::trace::noop::NoopTracer;
43
use tracing_opentelemetry::OpenTelemetryLayer;
54
use tracing_subscriber::fmt::format::{self};
65
use tracing_subscriber::layer::{Layered, SubscriberExt};
76
use tracing_subscriber::util::SubscriberInitExt;
87
use tracing_subscriber::{fmt, EnvFilter, Layer, Registry};
98

109
use crate::fmt::LocalTime;
11-
use crate::{Error, GCloudTracingBuilder, LogFormat, TelemetryTracer};
10+
use crate::{Error, LogFormat, TelemetryTracer};
1211

13-
type DefaultFormat = format::Full;
12+
const DEFAULT_LOG_FILTER: &str = "katana_db::mdbx=trace,cairo_native::compiler=off,pipeline=debug,\
13+
stage=debug,tasks=debug,executor=trace,forking::backend=trace,\
14+
blockifier=off,jsonrpsee_server=off,hyper=off,messaging=debug,\
15+
node=error,explorer=info,rpc=trace,pool=trace,info";
16+
17+
pub type NoopTracer = opentelemetry::trace::noop::NoopTracer;
18+
19+
// Format trait markers
20+
pub type DefaultFormat = format::Full;
21+
pub type Full = format::Full;
22+
pub type Json = format::Json;
1423

1524
type Subscriber<Tracer> = Layered<
1625
OpenTelemetryLayer<
@@ -28,25 +37,19 @@ type Subscriber<Tracer> = Layered<
2837

2938
struct TracingSubscriber<Fmt, Tracer> {
3039
subscriber: Subscriber<Tracer>,
40+
tracer: Tracer,
3141
_fmt: PhantomData<Fmt>,
3242
}
3343

3444
impl<Fmt, Tracer: TelemetryTracer> TracingSubscriber<Fmt, Tracer> {
35-
fn init(self) {
36-
self.subscriber.init();
45+
pub fn init(self) {
46+
use tracing_subscriber::registry;
47+
48+
self.tracer.init().unwrap();
49+
registry().with(self.filter).with(self.fmt_layer).with(self.tracer).init();
3750
}
3851
}
3952

40-
const DEFAULT_LOG_FILTER: &str = "katana_db::mdbx=trace,cairo_native::compiler=off,pipeline=debug,\
41-
stage=debug,tasks=debug,executor=trace,forking::backend=trace,\
42-
blockifier=off,jsonrpsee_server=off,hyper=off,messaging=debug,\
43-
node=error,explorer=info,rpc=trace,pool=trace,info";
44-
45-
// /// Identity type-state markers for [`TracingBuilder`].
46-
// #[derive(Debug)]
47-
// pub struct Identity;
48-
49-
// Main builder struct with type-state for format
5053
#[derive(Debug)]
5154
pub struct TracingBuilder<Fmt = format::Full, Telemetry = NoopTracer> {
5255
log_format: LogFormat,
@@ -146,8 +149,13 @@ impl Default for TracingBuilder {
146149
#[cfg(test)]
147150
#[tokio::test]
148151
async fn foo() {
152+
use crate::{GCloudTracerBuilder, OtlpTracerBuilder};
153+
149154
let builder = TracingBuilder::new().build().unwrap();
150155

151-
let gcloud = GCloudTracingBuilder::new().build().await.unwrap();
152-
let builder = TracingBuilder::new().json().with_telemetry(gcloud).build().unwrap();
156+
let oltp = OtlpTracerBuilder::new().build().unwrap();
157+
let gcloud = GCloudTracerBuilder::new().build().await.unwrap();
158+
159+
let builder_w_otlp = TracingBuilder::new().json().with_telemetry(oltp).build().unwrap();
160+
let builder_w_gcloud = TracingBuilder::new().json().with_telemetry(gcloud).build().unwrap();
153161
}

crates/tracing/src/gcloud.rs

Lines changed: 83 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@ use http::Request;
22
use opentelemetry::trace::Tracer;
33
use opentelemetry_gcloud_trace::{GcpCloudTraceExporterBuilder, SdkTracer};
44
use opentelemetry_http::HeaderExtractor;
5-
use opentelemetry_sdk::Resource;
5+
use opentelemetry_sdk::{trace::SdkTracerProvider, Resource};
66
use opentelemetry_stackdriver::google_trace_context_propagator::GoogleTraceContextPropagator;
77
use tower_http::trace::MakeSpan;
8-
use tracing_opentelemetry::{OpenTelemetryLayer, OpenTelemetrySpanExt, PreSampledTracer};
9-
use tracing_subscriber::Registry;
8+
use tracing_opentelemetry::{OpenTelemetrySpanExt, PreSampledTracer};
109

11-
use crate::Error;
12-
13-
/// Wrapper type for SdkTracer that implements the Tracer trait
14-
#[derive(Debug, Clone)]
15-
pub struct GCloudTracer {
16-
tracer: SdkTracer,
17-
}
10+
use crate::{Error, TelemetryTracer};
1811

1912
#[derive(Debug, Clone, Default)]
2013
pub struct GoogleStackDriverMakeSpan;
@@ -45,13 +38,17 @@ pub struct GcloudConfig {
4538

4639
/// Builder for creating an OpenTelemetry layer with Google Cloud Trace exporter
4740
#[derive(Debug, Clone)]
48-
pub struct GCloudTracingBuilder {
41+
pub struct GCloudTracerBuilder {
4942
service_name: String,
5043
project_id: Option<String>,
5144
resource: Option<Resource>,
5245
}
5346

54-
impl GCloudTracingBuilder {
47+
/////////////////////////////////////////////////////////////////////////////////
48+
// GCloudTracerBuilder implementations
49+
/////////////////////////////////////////////////////////////////////////////////
50+
51+
impl GCloudTracerBuilder {
5552
/// Create a new Google Cloud tracing builder
5653
pub fn new() -> Self {
5754
Self { service_name: "katana".to_string(), project_id: None, resource: None }
@@ -105,22 +102,39 @@ impl GCloudTracingBuilder {
105102
let tracer_provider = trace_exporter.create_provider().await?;
106103
let tracer = trace_exporter.install(&tracer_provider).await?;
107104

108-
// Set the Google Cloud trace context propagator globally
109-
// This will handle both extraction and injection of X-Cloud-Trace-Context headers
110-
opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
111-
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
105+
// // Set the Google Cloud trace context propagator globally
106+
// // This will handle both extraction and injection of X-Cloud-Trace-Context headers
107+
// opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
108+
// opentelemetry::global::set_tracer_provider(tracer_provider.clone());
112109

113110
// Return the layer
114-
Ok(GCloudTracer { tracer })
111+
Ok(GCloudTracer { tracer, tracer_provider })
115112
}
116113
}
117114

118-
impl Default for GCloudTracingBuilder {
115+
impl Default for GCloudTracerBuilder {
119116
fn default() -> Self {
120117
Self::new()
121118
}
122119
}
123120

121+
/// Wrapper type for SdkTracer that implements the Tracer trait
122+
#[derive(Debug, Clone)]
123+
pub struct GCloudTracer {
124+
tracer: SdkTracer,
125+
tracer_provider: SdkTracerProvider,
126+
}
127+
128+
/////////////////////////////////////////////////////////////////////////////////
129+
// GCloudTracer implementations
130+
/////////////////////////////////////////////////////////////////////////////////
131+
132+
impl GCloudTracer {
133+
pub fn builder() -> GCloudTracerBuilder {
134+
GCloudTracerBuilder::new()
135+
}
136+
}
137+
124138
impl Tracer for GCloudTracer {
125139
type Span = <SdkTracer as Tracer>::Span;
126140

@@ -154,46 +168,56 @@ impl PreSampledTracer for GCloudTracer {
154168
}
155169
}
156170

157-
/// Initialize Google Cloud Trace exporter with custom service name (backward compatibility)
158-
pub(crate) async fn init_tracer_with_service(
159-
gcloud_config: &GcloudConfig,
160-
service_name: &str,
161-
) -> Result<GCloudTracer, Error> {
162-
rustls::crypto::ring::default_provider()
163-
.install_default()
164-
.map_err(|_| Error::InstallCryptoFailed)?;
165-
166-
let resource = Resource::builder().with_service_name(service_name.to_string()).build();
167-
168-
let mut trace_exporter = if let Some(project_id) = &gcloud_config.project_id {
169-
GcpCloudTraceExporterBuilder::new(project_id.clone())
170-
} else {
171-
// Default will attempt to find project ID from environment variables in the following
172-
// order:
173-
// - GCP_PROJECT
174-
// - PROJECT_ID
175-
// - GCP_PROJECT_ID
176-
GcpCloudTraceExporterBuilder::for_default_project_id().await?
177-
};
178-
179-
trace_exporter = trace_exporter.with_resource(resource);
180-
181-
let tracer_provider = trace_exporter.create_provider().await?;
182-
let tracer = trace_exporter.install(&tracer_provider).await?;
183-
184-
// Set the Google Cloud trace context propagator globally
185-
// This will handle both extraction and injection of X-Cloud-Trace-Context headers
186-
opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
187-
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
188-
189-
Ok(GCloudTracer::new(tracer))
171+
impl TelemetryTracer for GCloudTracer {
172+
fn init(&self) -> Result<(), Error> {
173+
// Set the Google Cloud trace context propagator globally
174+
// This will handle both extraction and injection of X-Cloud-Trace-Context headers
175+
opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
176+
opentelemetry::global::set_tracer_provider(self.tracer_provider.clone());
177+
Ok(())
178+
}
190179
}
191180

192-
/// Initialize Google Cloud Trace exporter and OpenTelemetry propagators for Google Cloud trace
193-
/// context support (backward compatibility).
194-
///
195-
/// Make sure to set `GOOGLE_APPLICATION_CREDENTIALS` env var to authenticate to gcloud
196-
#[allow(dead_code)]
197-
pub(crate) async fn init_tracer(gcloud_config: &GcloudConfig) -> Result<GCloudTracer, Error> {
198-
init_tracer_with_service(gcloud_config, "katana").await
199-
}
181+
// /// Initialize Google Cloud Trace exporter with custom service name (backward compatibility)
182+
// pub(crate) async fn init_tracer_with_service(
183+
// gcloud_config: &GcloudConfig,
184+
// service_name: &str,
185+
// ) -> Result<GCloudTracer, Error> {
186+
// rustls::crypto::ring::default_provider()
187+
// .install_default()
188+
// .map_err(|_| Error::InstallCryptoFailed)?;
189+
190+
// let resource = Resource::builder().with_service_name(service_name.to_string()).build();
191+
192+
// let mut trace_exporter = if let Some(project_id) = &gcloud_config.project_id {
193+
// GcpCloudTraceExporterBuilder::new(project_id.clone())
194+
// } else {
195+
// // Default will attempt to find project ID from environment variables in the following
196+
// // order:
197+
// // - GCP_PROJECT
198+
// // - PROJECT_ID
199+
// // - GCP_PROJECT_ID
200+
// GcpCloudTraceExporterBuilder::for_default_project_id().await?
201+
// };
202+
203+
// trace_exporter = trace_exporter.with_resource(resource);
204+
205+
// let tracer_provider = trace_exporter.create_provider().await?;
206+
// let tracer = trace_exporter.install(&tracer_provider).await?;
207+
208+
// // Set the Google Cloud trace context propagator globally
209+
// // This will handle both extraction and injection of X-Cloud-Trace-Context headers
210+
// opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
211+
// opentelemetry::global::set_tracer_provider(tracer_provider.clone());
212+
213+
// Ok(GCloudTracer::new(tracer))
214+
// }
215+
216+
// /// Initialize Google Cloud Trace exporter and OpenTelemetry propagators for Google Cloud trace
217+
// /// context support (backward compatibility).
218+
// ///
219+
// /// Make sure to set `GOOGLE_APPLICATION_CREDENTIALS` env var to authenticate to gcloud
220+
// #[allow(dead_code)]
221+
// pub(crate) async fn init_tracer(gcloud_config: &GcloudConfig) -> Result<GCloudTracer, Error> {
222+
// init_tracer_with_service(gcloud_config, "katana").await
223+
// }

crates/tracing/src/lib.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@ pub mod otlp;
1212

1313
pub use builder::TracingBuilder;
1414
pub use fmt::LogFormat;
15-
pub use gcloud::{GCloudTracingBuilder, GcloudConfig};
16-
pub use otlp::{OtlpConfig, OtlpTracingBuilder};
15+
pub use gcloud::{GCloudTracerBuilder, GcloudConfig};
16+
pub use otlp::{OtlpConfig, OtlpTracerBuilder};
1717

18-
// pub type Tracer= Tracer + PreSampledTracer + Send + Sync + 'static;
18+
use crate::builder::NoopTracer;
1919

20-
trait TelemetryTracer: Tracer + PreSampledTracer + Send + Sync + 'static {}
21-
impl<T> TelemetryTracer for T where T: Tracer + PreSampledTracer + Send + Sync + 'static {}
20+
trait TelemetryTracer: Tracer + PreSampledTracer + Send + Sync + 'static {
21+
fn init(&self) -> Result<(), Error>;
22+
}
23+
24+
impl TelemetryTracer for NoopTracer {
25+
fn init(&self) -> Result<(), Error> {
26+
Ok(())
27+
}
28+
}
2229

2330
#[derive(Debug, Clone)]
2431
pub enum TracerConfig {
@@ -81,7 +88,7 @@ pub async fn init(format: LogFormat, telemetry_config: Option<TracerConfig>) ->
8188
match telemetry_config {
8289
Some(TracerConfig::Otlp(cfg)) => {
8390
// OTLP is synchronous
84-
let mut otlp_builder = OtlpTracingBuilder::new().service_name("katana");
91+
let mut otlp_builder = OtlpTracerBuilder::new().service_name("katana");
8592
if let Some(endpoint) = cfg.endpoint {
8693
otlp_builder = otlp_builder.endpoint(endpoint);
8794
}
@@ -90,7 +97,7 @@ pub async fn init(format: LogFormat, telemetry_config: Option<TracerConfig>) ->
9097
}
9198
Some(TracerConfig::GCloud(cfg)) => {
9299
// GCloud is async
93-
let mut gcloud_builder = GCloudTracingBuilder::new().service_name("katana");
100+
let mut gcloud_builder = GCloudTracerBuilder::new().service_name("katana");
94101
if let Some(project_id) = cfg.project_id {
95102
gcloud_builder = gcloud_builder.project_id(project_id);
96103
}

0 commit comments

Comments
 (0)