Skip to content

Commit

Permalink
chore: add tests for telemetry type
Browse files Browse the repository at this point in the history
  • Loading branch information
bc-micah committed Feb 28, 2024
1 parent fb62799 commit a1fbbe8
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 26 deletions.
2 changes: 1 addition & 1 deletion apps/server/src/startup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl Application {

/// # Errors
///
/// Will return `std::io::Error` if actix server returns an error
/// Will return `std::io::Error` if axum server returns an error
pub async fn run_until_stopped(self) -> Result<(), std::io::Error> {
self.server.await
}
Expand Down
85 changes: 60 additions & 25 deletions apps/server/src/telemetry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,68 @@ pub fn init_tracing(name: String, default_env_filter: String) {
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(default_env_filter));

let dispatcher: Dispatch = if std::env::var("OTEL_ENABLE").is_ok() {
let tracer = opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(
opentelemetry_otlp::new_exporter()
.tonic()
.with_endpoint("http://localhost:4317"),
)
.with_trace_config(
trace::config()
.with_sampler(Sampler::AlwaysOn)
.with_resource(Resource::new(vec![KeyValue::new("service.name", name)])),
)
.install_batch(runtime::Tokio)
.expect("make tracing pipeline");

let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);

Registry::default().with(env_filter).with(telemetry).into()
generate_otlp_tracing_subscriber(name, env_filter)
} else {
let formatting_layer = BunyanFormattingLayer::new(name, std::io::stdout);

Registry::default()
.with(env_filter)
.with(JsonStorageLayer)
.with(formatting_layer)
.into()
generate_bunyan_console_subscriber(name, env_filter)
};

set_global_default(dispatcher).expect("failed to set dispatcher");
}

pub fn generate_otlp_tracing_subscriber(name: String, env_filter: EnvFilter) -> Dispatch {
let tracer = opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(
opentelemetry_otlp::new_exporter()
.tonic()
.with_endpoint("http://localhost:4317"),
)
.with_trace_config(
trace::config()
.with_sampler(Sampler::AlwaysOn)
.with_resource(Resource::new(vec![KeyValue::new("service.name", name)])),
)
.install_batch(runtime::Tokio)
.expect("make tracing pipeline");

let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);

Registry::default().with(env_filter).with(telemetry).into()
}

pub fn generate_bunyan_console_subscriber(name: String, env_filter: EnvFilter) -> Dispatch {
let formatting_layer = BunyanFormattingLayer::new(name, std::io::stdout);

Registry::default()
.with(env_filter)
.with(JsonStorageLayer)
.with(formatting_layer)
.into()
}

#[cfg(test)]
mod test {
use std::any::{Any, TypeId};

use tracing_subscriber::EnvFilter;

use super::*;

#[tokio::test]
async fn test_generate_otlp_subscriber() {
let env_filter = EnvFilter::new("trace");

let dispatch = generate_otlp_tracing_subscriber("swu-app".to_owned(), env_filter);

assert_eq!(dispatch.type_id(), TypeId::of::<Dispatch>())
}

#[tokio::test]
async fn test_generate_bunyan_subscriber() {
let env_filter = EnvFilter::new("trace");

let dispatch = generate_bunyan_console_subscriber("swu-app".to_owned(), env_filter);

assert_eq!(dispatch.type_id(), TypeId::of::<Dispatch>())
}
}

0 comments on commit a1fbbe8

Please sign in to comment.