Line data Source code
1 : #pragma once 2 : 3 : // This component provides a `struct`, `SpanSamplerConfig`, used to configure 4 : // `SpanSampler`. `SpanSampler` accepts a `FinalizedSpanSamplerConfig`, which 5 : // must be obtained from a call to `finalize_config`. 6 : // 7 : // `SpanSamplerConfig` is specified as the `span_sampler` property of 8 : // `TracerConfig`. 9 : 10 : #include <vector> 11 : 12 : #include "expected.h" 13 : #include "json_fwd.hpp" 14 : #include "optional.h" 15 : #include "rate.h" 16 : #include "span_matcher.h" 17 : 18 : namespace datadog { 19 : namespace tracing { 20 : 21 : class Logger; 22 : 23 : struct SpanSamplerConfig { 24 : struct Rule : public SpanMatcher { 25 : double sample_rate = 1.0; 26 : Optional<double> max_per_second; 27 : 28 : Rule(const SpanMatcher&); 29 28 : Rule() = default; 30 : }; 31 : 32 : // Can be overriden by the `DD_TRACE_SAMPLING_RULES` environment variable. 33 : // Also, the `DD_TRACE_SAMPLE_RATE` environment variable, if present, causes a 34 : // corresponding `Rule` to be appended to `rules`. 35 : std::vector<Rule> rules; 36 : }; 37 : 38 : class FinalizedSpanSamplerConfig { 39 : friend Expected<FinalizedSpanSamplerConfig> finalize_config( 40 : const SpanSamplerConfig&, Logger&); 41 : friend class FinalizedTracerConfig; 42 : 43 1539 : FinalizedSpanSamplerConfig() = default; 44 : 45 : public: 46 : struct Rule : public SpanMatcher { 47 : Rate sample_rate; 48 : Optional<double> max_per_second; 49 : }; 50 : 51 : std::vector<Rule> rules; 52 : }; 53 : 54 : Expected<FinalizedSpanSamplerConfig> finalize_config(const SpanSamplerConfig&, 55 : Logger&); 56 : 57 : nlohmann::json to_json(const FinalizedSpanSamplerConfig::Rule&); 58 : 59 : } // namespace tracing 60 : } // namespace datadog