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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }