[][src]Crate opentelemetry_tide

opentelemetry-tide

OpenTelemetry integration for Tide

Example

Cargo.toml

[dependencies]
async-std = {version =  "1.8", features = ["attributes"]}
opentelemetry = { version = "0.11", features = ["async-std"] }
opentelemetry-jaeger = { version = "0.10", features = ["async-std"] }
opentelemetry-tide = "0.6"
tide = "0.15"

server.rs

use opentelemetry_semantic_conventions::resource;
use opentelemetry_tide::OpenTelemetryTracingMiddleware;
use tide::Request;

const VERSION: &'static str = env!("CARGO_PKG_VERSION");

#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    tide::log::start();

    let tags = [resource::SERVICE_VERSION.string(VERSION)];

    let (tracer, uninstall) = opentelemetry_jaeger::new_pipeline()
        .with_service_name("example-server")
        .with_tags(tags.iter().map(ToOwned::to_owned))
        .install()
        .expect("pipeline install failure");

    let mut app = tide::new();
    app.with(OpenTelemetryTracingMiddleware::new(tracer, uninstall));
    app.at("/").get(|req: Request<()>| async move {
        eprintln!("req.version = {:?}", req.version());
        Ok("Hello, OpenTelemetry!")
    });
    app.listen("127.0.0.1:3000").await?;

    Ok(())
}

Structs

OpenTelemetryTracingMiddleware

The middleware struct to be used in tide