pub trait TimingDistribution {
    // Required methods
    fn start(&self) -> TimerId;
    fn stop_and_accumulate(&self, id: TimerId);
    fn cancel(&self, id: TimerId);
    fn accumulate_samples(&self, samples: Vec<i64>);
    fn accumulate_single_sample(&self, sample: i64);
    fn accumulate_raw_samples_nanos(&self, samples: Vec<u64>);
    fn accumulate_raw_duration(&self, duration: Duration);
    fn test_get_value<'a, S: Into<Option<&'a str>>>(
        &self,
        ping_name: S
    ) -> Option<DistributionData>;
    fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
}
Expand description

A description for the TimingDistributionMetric type.

When changing this trait, make sure all the operations are implemented in the related type in ../metrics/.

Required Methods§

source

fn start(&self) -> TimerId

Start tracking time for the provided metric. Multiple timers can run simultaneously.

Returns

A unique TimerId for the new timer.

source

fn stop_and_accumulate(&self, id: TimerId)

Stops tracking time for the provided metric and associated timer id.

Adds a count to the corresponding bucket in the timing distribution. This will record an error if no start was called.

Arguments
  • id - The TimerId to associate with this timing. This allows for concurrent timing of events associated with different ids to the same timespan metric.
source

fn cancel(&self, id: TimerId)

Aborts a previous start call. No error is recorded if no start was called.

Arguments
  • id - The TimerId to associate with this timing. This allows for concurrent timing of events associated with different ids to the same timing distribution metric.
source

fn accumulate_samples(&self, samples: Vec<i64>)

Accumulates the provided signed samples in the metric.

This is required so that the platform-specific code can provide us with 64 bit signed integers if no u64 comparable type is available. This will take care of filtering and reporting errors for any provided negative sample.

Please note that this assumes that the provided samples are already in the “unit” declared by the instance of the metric type (e.g. if the instance this method was called on is using crate::TimeUnit::Second, then samples are assumed to be in that unit).

Arguments
  • samples - The vector holding the samples to be recorded by the metric.
Notes

Discards any negative value in samples and report an ErrorType::InvalidValue for each of them. Reports an ErrorType::InvalidOverflow error for samples that are longer than MAX_SAMPLE_TIME.

source

fn accumulate_single_sample(&self, sample: i64)

Accumulates precisely one signed sample in the metric.

Precludes the need for a collection in the most common use case.

Sign is required so that the platform-specific code can provide us with a 64 bit signed integer if no u64 comparable type is available. This will take care of filtering and reporting errors for any provided negative sample.

Please note that this assumes that the provided sample is already in the “unit” declared by the instance of the metric type (e.g. if the instance this method was called on is using crate::TimeUnit::Second, then sample is assumed to be in that unit).

Arguments
  • sample - The singular sample to be recorded by the metric.
Notes

Discards any negative value and reports an ErrorType::InvalidValue. Reports an ErrorType::InvalidOverflow error if the sample is longer than MAX_SAMPLE_TIME.

source

fn accumulate_raw_samples_nanos(&self, samples: Vec<u64>)

Accumulates the provided samples in the metric.

Arguments
  • samples - A list of samples recorded by the metric. Samples must be in nanoseconds.
Notes

Reports an ErrorType::InvalidOverflow error for samples that are longer than MAX_SAMPLE_TIME.

source

fn accumulate_raw_duration(&self, duration: Duration)

Accumulates precisely one duration to the metric.

Like TimingDistribution::accumulate_single_sample, but for use when the duration is:

  • measured externally, or
  • is in a unit different from the timing_distribution’s internal TimeUnit.
Arguments
  • duration - The single duration to be recorded in the metric.
Notes

Reports an ErrorType::InvalidOverflow error if duration is longer than MAX_SAMPLE_TIME.

The API client is responsible for ensuring that duration is derived from a monotonic clock source that behaves consistently over computer sleep across the application’s platforms. Otherwise the resulting data may not share the same guarantees that other timing_distribution metrics’ data do.

source

fn test_get_value<'a, S: Into<Option<&'a str>>>( &self, ping_name: S ) -> Option<DistributionData>

Exported for test purposes.

Gets the currently stored value of the metric.

This doesn’t clear the stored value.

Arguments
  • ping_name - represents the optional name of the ping to retrieve the metric for. Defaults to the first value in send_in_pings.
source

fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32

Exported for test purposes.

Gets the number of recorded errors for the given error type.

Arguments
  • error - The type of error
Returns

The number of errors recorded.

Object Safety§

This trait is not object safe.

Implementors§