public void UpdatePerOperationSampler_ShouldUpdateParams_WhenSamplerIsAlreadyPerOp() { var perOpSampler = new PerOperationSampler(10, 0.5, 5, _mockLoggerFactory); _testingSampler = new RemoteControlledSampler( _serivceName, _mockSamplingManager, _mockLoggerFactory, _mockMetrics, perOpSampler, _mockSamplerFactory, _pollingIntervalMs, _mockPollTimer ); var strategies = new PerOperationSamplingStrategies { DefaultSamplingProbability = 0.5, DefaultLowerBoundTracesPerSecond = 10, PerOperationStrategies = new List <OperationSamplingStrategy>() }; _testingSampler.UpdatePerOperationSampler(strategies); _mockMetrics.Received(1).SamplerUpdated.Inc(Arg.Is <long>(d => d == 1)); }
public void TestFallbackToDefaultProbabilisticSampler() { _undertest = new PerOperationSampler(0, _operationToSamplers, _defaultProbabilisticSampler, DefaultLowerBoundTracesPerSecond, _loggerFactory); SamplingStatus samplingStatus = _undertest.Sample(operation, TraceId); Assert.True(samplingStatus.IsSampled); _defaultProbabilisticSampler.Received(1).Sample(operation, TraceId); }
public PerOperationSamplerTests() { _loggerFactory = new NullLoggerFactory(); _defaultProbabilisticSampler = Substitute.ForPartsOf <ProbabilisticSampler>(0); _undertest = new PerOperationSampler(MaxOperations, _operationToSamplers, _defaultProbabilisticSampler, DefaultLowerBoundTracesPerSecond, _loggerFactory); _defaultProbabilisticSampler.Sample(operation, TraceId) .Returns(new SamplingStatus(true, EmptyTags)); _defaultProbabilisticSampler.SamplingRate.Returns(DefaultSamplingProbability); }
public void TestUpdateToPerOperationSamplerReplacesProbabilisticSampler() { var operationToSampler = new List <PerOperationSamplingParameters>(); operationToSampler.Add(new PerOperationSamplingParameters("operation", new ProbabilisticSamplingStrategy(0.1))); OperationSamplingParameters parameters = new OperationSamplingParameters(0.11, 0.22, operationToSampler); SamplingStrategyResponse response = new SamplingStrategyResponse(null, null, parameters); _samplingManager.GetSamplingStrategyAsync(SERVICE_NAME).Returns(response); _undertest.UpdateSampler(); PerOperationSampler perOperationSampler = new PerOperationSampler(2000, parameters, _loggerFactory); ISampler actualSampler = _undertest.Sampler; Assert.Equal(perOperationSampler, actualSampler); }
public async Task TestUpdatePerOperationSamplerUpdatesExistingPerOperationSampler() { OperationSamplingParameters parameters = new OperationSamplingParameters(1, 1, new List <PerOperationSamplingParameters>()); PerOperationSampler perOperationSampler = Substitute.ForPartsOf <PerOperationSampler>(10, parameters, NullLoggerFactory.Instance); _samplingManager.GetSamplingStrategyAsync(SERVICE_NAME) .Returns(new SamplingStrategyResponse(null, null, parameters)); _undertest = new RemoteControlledSampler.Builder(SERVICE_NAME) .WithSamplingManager(_samplingManager) .WithInitialSampler(perOperationSampler) .WithMetrics(_metrics) .Build(); _undertest.UpdateSampler(); await Task.Delay(20); //updateSampler is hit once automatically because of the pollTimer perOperationSampler.Received(2).Update(parameters); }
public void TestNoopUpdate() { ProbabilisticSampler defaultProbabilisticSampler = new ProbabilisticSampler(DefaultSamplingProbability); double operationSamplingRate = 0.23; _operationToSamplers.Add(operation, new GuaranteedThroughputSampler(operationSamplingRate, DefaultLowerBoundTracesPerSecond)); _undertest = new PerOperationSampler(MaxOperations, _operationToSamplers, defaultProbabilisticSampler, DefaultLowerBoundTracesPerSecond, _loggerFactory); var parametersList = new List <PerOperationSamplingParameters>(); parametersList.Add(new PerOperationSamplingParameters(operation, new ProbabilisticSamplingStrategy(operationSamplingRate))); var parameters = new OperationSamplingParameters(DefaultSamplingProbability, DefaultLowerBoundTracesPerSecond, parametersList); Assert.False(_undertest.Update(parameters)); Assert.Equal(_operationToSamplers, _undertest.OperationNameToSampler); Assert.Equal(DefaultLowerBoundTracesPerSecond, _undertest.LowerBound, DoublePrecision); Assert.Equal(DefaultSamplingProbability, _undertest.DefaultSampler.SamplingRate, DoublePrecision); }
public void TestUpdateIgnoreGreaterThanMax() { GuaranteedThroughputSampler guaranteedThroughputSampler = Substitute.ForPartsOf <GuaranteedThroughputSampler>(0, 0); _operationToSamplers.Add(operation, guaranteedThroughputSampler); PerOperationSampler undertest = new PerOperationSampler(1, _operationToSamplers, _defaultProbabilisticSampler, DefaultLowerBoundTracesPerSecond, _loggerFactory); var perOperationSamplingParameters1 = new PerOperationSamplingParameters(operation, new ProbabilisticSamplingStrategy(SamplingRate)); var perOperationSamplingParameters2 = new PerOperationSamplingParameters("second OPERATION", new ProbabilisticSamplingStrategy(SamplingRate)); var parametersList = new List <PerOperationSamplingParameters>(); parametersList.Add(perOperationSamplingParameters1); parametersList.Add(perOperationSamplingParameters2); undertest.Update(new OperationSamplingParameters(DefaultSamplingProbability, DefaultLowerBoundTracesPerSecond, parametersList)); Assert.Single(_operationToSamplers); Assert.NotNull(_operationToSamplers[operation]); }
public PerOperationSamplerTests() { _samplingRate = 1.0; _lowerBound = 0.5; _maxOperations = 3; _mockGtpSampler = Substitute.For <IGuaranteedThroughputProbabilisticSampler>(); _mockLoggerFactory = Substitute.For <ILoggerFactory>(); _mockLogger = Substitute.For <ILogger <PerOperationSampler> >(); _mockDefaultSampler = Substitute.For <IProbabilisticSampler>(); _mockSamplerFactory = Substitute.For <ISamplerFactory>(); _mockSamplerFactory.NewGuaranteedThroughputProbabilisticSampler( Arg.Is <double>(x => x == _samplingRate), Arg.Is <double>(x => x == _lowerBound) ).Returns(_mockGtpSampler); _mockSamplerFactory.NewProbabilisticSampler( Arg.Is <double>(x => x == _samplingRate) ).Returns(_mockDefaultSampler); _mockLoggerFactory.CreateLogger <PerOperationSampler>().Returns(_mockLogger); _testingSampler = new PerOperationSampler(_maxOperations, _samplingRate, _lowerBound, _mockLoggerFactory, _mockSamplerFactory); }