Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions lading_payload/src/dogstatsd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,9 @@ pub struct Config {
pub multivalue_count: ConfRange<u16>,
/// Range of possible values for the sampling rate sent in dogstatsd messages
pub sampling_range: ConfRange<f32>,
/// Probability between 0 and 1 that a given dogstatsd msg will specify a sampling rate.
/// Probability that a given dogstatsd msg will specify a sampling rate.
/// The sampling rate is chosen from `sampling_range`
pub sampling_probability: f32,
pub sampling_probability: Probability,
/// Defines the relative probability of each kind of `DogStatsD` kinds of
/// payload.
pub kind_weights: KindWeights,
Expand Down Expand Up @@ -273,7 +273,7 @@ impl Default for Config {
multivalue_count: ConfRange::Inclusive { min: 2, max: 32 },
multivalue_pack_probability: 0.08,
sampling_range: ConfRange::Inclusive { min: 0.1, max: 1.0 },
sampling_probability: 0.5,
sampling_probability: Probability::try_new(0.5).expect("0.5 is in [0.0, 1.0]"),
kind_weights: KindWeights::default(),
metric_weights: MetricWeights::default(),
value: ValueConf::default(),
Expand Down Expand Up @@ -371,16 +371,6 @@ impl Config {
}
}

if !self.sampling_probability.is_finite()
|| self.sampling_probability < 0.0
|| self.sampling_probability > 1.0
{
return Result::Err(format!(
"Sampling probability {} must be finite and in range [0.0, 1.0]",
self.sampling_probability
));
}

self.timestamp.valid()?;

if self.kind_weights.metric == 0
Expand Down Expand Up @@ -432,7 +422,7 @@ impl MemberGenerator {
multivalue_count: ConfRange<u16>,
multivalue_pack_probability: f32,
sampling: ConfRange<f32>,
sampling_probability: f32,
sampling_probability: Probability,
kind_weights: KindWeights,
metric_weights: MetricWeights,
value_conf: ValueConf,
Expand Down
6 changes: 3 additions & 3 deletions lading_payload/src/dogstatsd/metric.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pub(crate) struct MetricGenerator {
pub(crate) multivalue_count: ConfRange<u16>,
pub(crate) multivalue_pack_probability: f32,
pub(crate) sampling: ConfRange<f32>,
pub(crate) sampling_probability: f32,
pub(crate) sampling_probability: Probability,
pub(crate) num_value_generator: NumValueGenerator,
pub(crate) pools: StringPools,
/// Tags for each template. Each position in this Vec corresponds to the
Expand All @@ -52,7 +52,7 @@ impl MetricGenerator {
multivalue_count: ConfRange<u16>,
multivalue_pack_probability: f32,
sampling: ConfRange<f32>,
sampling_probability: f32,
sampling_probability: Probability,
metric_weights: &WeightedIndex<u16>,
container_ids: Vec<String>,
external_data: Vec<String>,
Expand Down Expand Up @@ -148,7 +148,7 @@ impl<'a> Generator<'a> for MetricGenerator {
let cardinality = choose_or_not_ref(&mut rng, &self.cardinality).map(String::as_str);
// https://docs.datadoghq.com/metrics/custom_metrics/dogstatsd_metrics_submission/#sample-rates
let prob: f32 = OpenClosed01.sample(&mut rng);
let sample_rate = if prob < self.sampling_probability {
let sample_rate = if prob < self.sampling_probability.get() {
let sample_rate = self.sampling.sample(&mut rng).clamp(0.0, 1.0);
let sample_rate = common::ZeroToOne::try_from(sample_rate)
.expect("failed to convert sample rate to ZeroToOne");
Expand Down
Loading