pigeon_telemetry

Crates.iopigeon_telemetry
lib.rspigeon_telemetry
version0.2.0
created_at2025-06-06 14:06:50.480046+00
updated_at2025-06-11 12:18:51.537394+00
descriptionNOLAI standardized OpenTelemetry setup for Rust applications
homepagehttps://gitlab.science.ru.nl/nolai/utils/pigeon-telemetry
repositoryhttps://gitlab.science.ru.nl/nolai/utils/pigeon-telemetry
max_upload_size
id1703041
size63,866
Operations (github:nolai:operations)

documentation

README

Pigeon Telemetry

NOLAI standardized OpenTelemetry setup for Rust applications.

Basic usage:

add this to you Cargo.toml

[dependencies]
pigeon_telemetry = "0.2.0"
tracing = "0.1.41"
tracing-actix-web = { version = "0.7.18", features = ["opentelemetry_0_29"] }
use pigeon_telemetry::{init_telemetry,shutdown_telemetry,TelemetryConfig};
use tracing::info;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Configure from environment variables
    let config = TelemetryConfig::from_env();
    let telemetry = init_telemetry(config).map_err(|e| {
        eprintln!("Failed to initialize telemetry: {}", e);
        std::io::Error::other("Telemetry initialization failed")
    })?;

    // Create a span for the main function
    let main_span = info_span!("startup", service=%config.service_name, version=%config.service_version);
    let _guard = main_span.enter();
    
    // Normal application logic goes here

    // Graceful shutdown
    pigeon_telemetry::shutdown_telemetry(telemetry).await;
    Ok(())
}

// On every function that needs tracing
#[instrument(skip(req))]
pub async fn example_request<T: RedisStorage>(
    req: HttpRequest,
    path: web::Path<(String, String)>,
) -> Result<HttpResponse, Error> {
    // Function logic here
    Ok(HttpResponse::Ok().finish())
}

// Example of logging
use tracing::info;
info!("Application started");

// Example of sending a request to an external service
#[instrument(skip(self, request), fields(base_url = %self.base_url))]
async fn send_request() -> Result<Response, AWError> {
    // TracedHttpClient is a wrapper around reqwest::Client that automatically adds tracing spans
    let client = TracedHttpClient::new();
    let response = client
        .post(&url)
        .header("Authorization", format!("Bearer {}", self.token))
        .json(&encrypted_request)
        .send()
        .await
        .map_err(|e| {
            error!("Error sending activity request: {:?}", e);
            ErrorInternalServerError(format!("Request error: {}", e))
        })?;
}

Environment Variables

Variable Description
SERVICE_NAME Override service name
SERVICE_VERSION Override service version (OPTIONAL)
OTLP_ENDPOINT OTLP endpoint URL (e.g., https://otlp.nolai.fyi)
RUST_LOG Log level filter (e.g., info,actix_web=warn,actix_server=warn)
Commit count: 0

cargo fmt