trillium_opentelemetry/
lib.rs

1//! This crate provides opentelemetry metrics conforming to
2//! [semantic conventions for http](https://opentelemetry.io/docs/reference/specification/metrics/semantic_conventions/http-metrics/).
3#![forbid(unsafe_code)]
4#![deny(
5    missing_copy_implementations,
6    rustdoc::missing_crate_level_docs,
7    missing_debug_implementations,
8    nonstandard_style,
9    unused_qualifications,
10    missing_docs
11)]
12pub use opentelemetry;
13
14#[cfg(all(feature = "trace", feature = "metrics"))]
15mod instrument;
16#[cfg(feature = "metrics")]
17mod metrics;
18#[cfg(feature = "trace")]
19mod trace;
20
21#[cfg(feature = "trace")]
22mod instrument_handler;
23
24#[cfg(all(feature = "trace", feature = "metrics"))]
25pub use instrument::{instrument, Instrument};
26#[cfg(feature = "trace")]
27pub use instrument_handler::{instrument_handler, InstrumentHandler};
28#[cfg(feature = "metrics")]
29pub use metrics::{metrics, Metrics};
30#[cfg(feature = "trace")]
31pub use trace::{trace, Trace};
32
33/// instrumentation using [`opentelemetry::global`]
34pub mod global {
35
36    #[cfg(all(feature = "trace", feature = "metrics"))]
37    pub use super::instrument::instrument_global as instrument;
38
39    #[cfg(feature = "trace")]
40    pub use super::instrument_handler::instrument_handler_global as instrument_handler;
41
42    #[cfg(feature = "trace")]
43    ///configure a [`Trace`](crate::trace::Trace) against the global tracer provider
44    pub fn trace() -> super::Trace<opentelemetry::global::BoxedTracer> {
45        super::Trace::new(opentelemetry::global::tracer("trillium-opentelemetry"))
46    }
47
48    #[cfg(feature = "metrics")]
49    /// configure a [`Metrics`](crate::metrics::Metrics) against the global meter provider
50    pub fn metrics() -> super::Metrics {
51        use opentelemetry::InstrumentationScope;
52
53        opentelemetry::global::meter_provider()
54            .meter_with_scope(
55                InstrumentationScope::builder("trillium-opentelemetry")
56                    .with_version(env!("CARGO_PKG_VERSION"))
57                    .with_schema_url("https://opentelemetry.io/schemas/1.29.0")
58                    .build(),
59            )
60            .into()
61    }
62}