cf_rustracing_jaeger/
lib.rs

1//! [Jaeger][jaeger] client library created on top of [rustracing].
2//!
3//! [jaeger]: https://github.com/jaegertracing/jaeger
4//! [rustracing]: https://crates.io/crates/rustracing
5//!
6//! # Examples
7//!
8//! ```
9//! use cf_rustracing::sampler::AllSampler;
10//! use cf_rustracing_jaeger::Tracer;
11//! use cf_rustracing_jaeger::reporter::JaegerCompactReporter;
12//! use std::net::Ipv4Addr;
13//!
14//! # #[tokio::main]
15//! # async fn main() {
16//! // Creates a tracer
17//! let (tracer, mut span_rx) = Tracer::new(AllSampler);
18//! {
19//!     let span = tracer.span("sample_op").start();
20//!     // Do something
21//!
22//! } // The dropped span will be sent to `span_rx`
23//!
24//! let span = span_rx.recv().await.unwrap();
25//! assert_eq!(span.operation_name(), "sample_op");
26//!
27//! // Reports this span to the local jaeger agent
28//! let reporter = JaegerCompactReporter::new(
29//!     "sample_service",
30//!     (Ipv4Addr::LOCALHOST, 6831).into(),
31//!     (Ipv4Addr::LOCALHOST, 0).into(),
32//! )
33//! .await
34//! .unwrap();
35//!
36//! reporter.report(&[span]).await.unwrap();
37//! # }
38//! ```
39
40#![warn(missing_docs)]
41#[macro_use]
42extern crate trackable;
43
44pub use self::span::Span;
45pub use self::tracer::Tracer;
46pub use cf_rustracing::{Error, ErrorKind, Result};
47
48pub mod reporter;
49pub mod span;
50pub mod thrift;
51
52mod constants;
53mod error;
54mod tracer;
55
56#[cfg(test)]
57mod tests {
58    use crate::reporter::JaegerCompactReporter;
59    use crate::Tracer;
60    use cf_rustracing::sampler::AllSampler;
61    use cf_rustracing::tag::Tag;
62    use std::net::Ipv4Addr;
63
64    #[tokio::test]
65    async fn it_works() {
66        let (tracer, mut span_rx) = Tracer::new(AllSampler);
67        {
68            let _span = tracer.span("it_works").start();
69            // do something
70        }
71        let span = span_rx.recv().await.unwrap();
72        assert_eq!(span.operation_name(), "it_works");
73
74        let mut reporter = JaegerCompactReporter::new(
75            "sample_service",
76            (Ipv4Addr::LOCALHOST, 6831).into(),
77            (Ipv4Addr::LOCALHOST, 0).into(),
78        )
79        .await
80        .unwrap();
81
82        reporter.add_service_tag(Tag::new("foo", "bar"));
83        reporter.report(&[span]).await.unwrap();
84    }
85}