/// <summary> /// Initializes a new instance of the <see cref="AdaptiveSamplingTelemetryProcessor"/> class. /// <param name="settings">Sampling percentage estimator settings.</param> /// <param name="callback">Callback invoked every time sampling percentage is evaluated.</param> /// <param name="next">Next TelemetryProcessor in call chain.</param> /// </summary> public AdaptiveSamplingTelemetryProcessor( SamplingPercentageEstimatorSettings settings, AdaptiveSamplingPercentageEvaluatedCallback callback, ITelemetryProcessor next) { this.estimatorSettings = settings; this.evaluationCallback = callback; // make estimatortelemetry processor work after sampling was done this.estimatorProcessor = new SamplingPercentageEstimatorTelemetryProcessor(settings, this.SamplingPercentageChanged, next); this.samplingProcessor = new SamplingTelemetryProcessor(this.estimatorProcessor); }
public void TelemetryItemHasSamplingPercentageSet() { var sentTelemetry = new List<ITelemetry>(); var processor = new SamplingTelemetryProcessor(new StubTelemetryProcessor(null) { OnProcess = t => sentTelemetry.Add(t) }); processor.SamplingPercentage = 20; do { processor.Process(new RequestTelemetry()); } while (sentTelemetry.Count == 0); Assert.Equal(20, ((ISupportSampling)sentTelemetry[0]).SamplingPercentage); }
public void AllTelemetryIsSentWithDefaultSamplingRate() { var sentTelemetry = new List<ITelemetry>(); var processor = new SamplingTelemetryProcessor(new StubTelemetryProcessor(null) { OnProcess = t => sentTelemetry.Add(t) }); const int ItemsToGenerate = 100; for (int i = 0; i < ItemsToGenerate; i++) { processor.Process(new RequestTelemetry()); } Assert.Equal(ItemsToGenerate, sentTelemetry.Count); }
/// <summary> /// Initializes a new instance of the <see cref="AdaptiveSamplingTelemetryProcessor"/> class. /// <param name="settings">Sampling percentage estimator settings.</param> /// <param name="callback">Callback invoked every time sampling percentage is evaluated.</param> /// <param name="next">Next TelemetryProcessor in call chain.</param> /// </summary> public AdaptiveSamplingTelemetryProcessor( Channel.Implementation.SamplingPercentageEstimatorSettings settings, Channel.Implementation.AdaptiveSamplingPercentageEvaluatedCallback callback, ITelemetryProcessor next) { this.estimatorSettings = settings; this.evaluationCallback = callback; // make estimator telemetry processor work after sampling was done this.estimatorProcessor = new SamplingPercentageEstimatorTelemetryProcessor(settings, this.SamplingPercentageChanged, next); this.samplingProcessor = new SamplingTelemetryProcessor(next, this.estimatorProcessor) { SamplingPercentage = this.estimatorSettings.InitialSamplingPercentage, }; }
public void DefaultSamplingRateIs100Percent() { var processor = new SamplingTelemetryProcessor(new StubTelemetryProcessor(null)); Assert.Equal(processor.SamplingPercentage, 100.0, 12); }