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}