Line data Source code
1 : #pragma once 2 : 3 : // This component provides a `struct`, `TraceSamplerConfig`, used to configure 4 : // `TraceSampler`. `TraceSampler` accepts a `FinalizedTraceSamplerConfig`, which 5 : // must be obtained from a call to `finalize_config`. 6 : // 7 : // `TraceSamplerConfig` is specified as the `trace_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 : struct TraceSamplerConfig { 22 : struct Rule : public SpanMatcher { 23 : double sample_rate = 1.0; 24 : 25 : Rule(const SpanMatcher&); 26 15 : Rule() = default; 27 : }; 28 : 29 : Optional<double> sample_rate; 30 : std::vector<Rule> rules; 31 : double max_per_second = 200; 32 : }; 33 : 34 : class FinalizedTraceSamplerConfig { 35 : friend Expected<FinalizedTraceSamplerConfig> finalize_config( 36 : const TraceSamplerConfig& config); 37 : friend class FinalizedTracerConfig; 38 : 39 1583 : FinalizedTraceSamplerConfig() = default; 40 : 41 : public: 42 : struct Rule : public SpanMatcher { 43 : Rate sample_rate; 44 : }; 45 : 46 : std::vector<Rule> rules; 47 : double max_per_second; 48 : }; 49 : 50 : Expected<FinalizedTraceSamplerConfig> finalize_config( 51 : const TraceSamplerConfig& config); 52 : 53 : nlohmann::json to_json(const FinalizedTraceSamplerConfig::Rule&); 54 : 55 : } // namespace tracing 56 : } // namespace datadog