22
33#include < cstddef>
44#include < string>
5+ #include < atomic>
56
67#include < boost/lockfree/stack.hpp>
78
@@ -50,6 +51,14 @@ struct Tracer
5051 */
5152 virtual const std::string &name (void ) const = 0;
5253
54+ /* *
55+ * \brief Tracer sample rate
56+ */
57+ virtual size_t sample_rate (void ) const = 0;
58+
59+ /* * \sa Tracer#sample_rate */
60+ virtual void set_sample_rate (size_t sample_rate) = 0;
61+
5362 /* *
5463 * \brief Associated Collector
5564 */
@@ -135,6 +144,8 @@ class CachedTracer : public Tracer
135144
136145 trace_id_t m_id, m_id_high;
137146 const std::string m_name;
147+ size_t m_sample_rate;
148+ std::atomic_size_t m_total_spans;
138149
139150 public:
140151 typedef SpanCache<64 > span_cache_t ;
@@ -144,7 +155,7 @@ class CachedTracer : public Tracer
144155
145156 public:
146157 CachedTracer (Collector *collector, const std::string &name, size_t cache_message_size = default_cache_message_size)
147- : m_collector(collector), m_id(Span::next_id()), m_id_high(0 ), m_name(name), m_cache(cache_message_size)
158+ : m_collector(collector), m_id(Span::next_id()), m_id_high(0 ), m_name(name), m_sample_rate( 1 ), m_cache(cache_message_size)
148159 {
149160 }
150161
@@ -165,6 +176,9 @@ class CachedTracer : public Tracer
165176 m_id_high = id.first ;
166177 }
167178 virtual const std::string &name (void ) const override { return m_name; }
179+ virtual size_t sample_rate (void ) const override { return m_sample_rate; }
180+ virtual void set_sample_rate (size_t sample_rate) override { m_sample_rate = sample_rate; }
181+
168182 virtual Collector *collector (void ) const override { return m_collector; }
169183
170184 virtual Span *span (const std::string &name, span_id_t parent_id = 0 , void *userdata = nullptr ) override ;
0 commit comments