Skip to content

Commit

Permalink
editoast: setup tracing with opentelemetry for TestApp
Browse files Browse the repository at this point in the history
Signed-off-by: home <[email protected]>
  • Loading branch information
home committed Dec 20, 2024
1 parent 5af6621 commit 112a5c5
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 22 deletions.
48 changes: 48 additions & 0 deletions editoast/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions editoast/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ axum = { version = "0.7.9", default-features = false, features = [
editoast_authz = { workspace = true, features = ["fixtures"] }
editoast_models = { workspace = true, features = ["testing"] }
editoast_osrdyne_client = { workspace = true, features = ["mock_client"] }
opentelemetry_sdk = { version = "0.27.1", features = ["testing"] }
pretty_assertions.workspace = true
rstest.workspace = true
serial_test = "3.2.0"
Expand Down
34 changes: 22 additions & 12 deletions editoast/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,14 @@ use client::Commands;
use editoast_models::DbConnectionPoolV2;
use models::RollingStockModel;
use opentelemetry::trace::TracerProvider as _;
use opentelemetry_sdk::export::trace::SpanExporter;
use opentelemetry_sdk::propagation::TraceContextPropagator;
use opentelemetry_sdk::resource::EnvResourceDetector;
use opentelemetry_sdk::resource::SdkProvidedResourceDetector;
use opentelemetry_sdk::resource::TelemetryResourceDetector;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::Layer;
pub use views::AppState;

use models::prelude::*;
Expand All @@ -50,9 +54,6 @@ use std::sync::Arc;
use std::time::Duration;
use thiserror::Error;
use tracing::error;
use tracing_subscriber::layer::SubscriberExt as _;
use tracing_subscriber::util::SubscriberInitExt as _;
use tracing_subscriber::Layer as _;
pub use valkey_utils::ValkeyClient;
pub use valkey_utils::ValkeyConnection;

Expand All @@ -66,12 +67,16 @@ pub use valkey_utils::ValkeyConnection;
/// - we *expect* a webserver to output logging information, so since it's an expected
/// output (and not extra information), it should be on stdout
#[derive(Debug, PartialEq)]
enum EditoastMode {
pub enum EditoastMode {
Webservice,
Cli,
}

fn init_tracing(mode: EditoastMode, telemetry_config: &client::TelemetryConfig) {
pub fn init_tracing<T: SpanExporter + 'static>(
mode: EditoastMode,
telemetry_config: &client::TelemetryConfig,
exporter: T,
) -> impl tracing::Subscriber {
let env_filter_layer = tracing_subscriber::EnvFilter::builder()
// Set the default log level to 'info'
.with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into())
Expand All @@ -89,11 +94,6 @@ fn init_tracing(mode: EditoastMode, telemetry_config: &client::TelemetryConfig)
let telemetry_layer = match telemetry_config.telemetry_kind {
client::TelemetryKind::None => None,
client::TelemetryKind::Opentelemetry => {
let exporter = opentelemetry_otlp::SpanExporter::builder()
.with_tonic()
.with_endpoint(telemetry_config.telemetry_endpoint.as_str())
.build()
.expect("failed to build a span exporter");
let resource = Resource::new(vec![KeyValue::new(
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
telemetry_config.service_name.clone(),
Expand All @@ -116,11 +116,11 @@ fn init_tracing(mode: EditoastMode, telemetry_config: &client::TelemetryConfig)
Some(layer)
}
};

tracing_subscriber::registry()
.with(telemetry_layer)
.with(env_filter_layer)
.with(fmt_layer)
.init();
}

impl EditoastMode {
Expand Down Expand Up @@ -151,7 +151,17 @@ async fn main() {

async fn run() -> Result<(), Box<dyn Error + Send + Sync>> {
let client = Client::parse();
init_tracing(EditoastMode::from_client(&client), &client.telemetry_config);
let exporter = opentelemetry_otlp::SpanExporter::builder()
.with_tonic()
.with_endpoint(client.telemetry_config.telemetry_endpoint.as_str())
.build()
.expect("failed to build a span exporter");
init_tracing(
EditoastMode::from_client(&client),
&client.telemetry_config,
exporter,
)
.init();

let pg_config = client.postgres_config;
let db_pool =
Expand Down
19 changes: 9 additions & 10 deletions editoast/src/views/test_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ use tower_http::trace::TraceLayer;
use url::Url;

use crate::{
client::{TelemetryConfig, TelemetryKind},
core::{mocking::MockingClient, CoreClient},
generated_data::speed_limit_tags_config::SpeedLimitTagIds,
infra_cache::InfraCache,
init_tracing,
map::MapLayers,
valkey_utils::ValkeyConfig,
AppState, ValkeyClient,
AppState, EditoastMode, ValkeyClient,
};
use axum_test::TestRequest;
use axum_test::TestServer;
Expand Down Expand Up @@ -106,15 +108,12 @@ impl TestAppBuilder {
};

// Setup tracing
let sub = tracing_subscriber::fmt()
.pretty()
.with_env_filter(
tracing_subscriber::EnvFilter::builder()
.with_default_directive(tracing_subscriber::filter::LevelFilter::DEBUG.into())
.from_env_lossy(),
)
.with_span_events(tracing_subscriber::fmt::format::FmtSpan::CLOSE)
.finish();
let exporter = opentelemetry_sdk::testing::trace::NoopSpanExporter::default();
let telemetry_config = TelemetryConfig {
telemetry_kind: TelemetryKind::Opentelemetry,
..Default::default()
};
let sub = init_tracing(EditoastMode::Webservice, &telemetry_config, exporter);
let tracing_guard = tracing::subscriber::set_default(sub);

// Config valkey
Expand Down

0 comments on commit 112a5c5

Please sign in to comment.