private static SamplingResponse ProcessMatchedRule()

in sdk/src/Core/Sampling/DefaultSamplingStrategy.cs [127:162]


        private static SamplingResponse ProcessMatchedRule(SamplingRule sampleRule, TimeStamp time)
        {
            bool shouldSample = true;
            Reservior reservior = sampleRule.Reservior;
            sampleRule.IncrementRequestCount(); // increment request counter for matched rule
            ReserviorDecision reserviorDecision = reservior.BorrowOrTake(time, sampleRule.CanBorrow); // check if we can borrow or take from reservior

            if (reserviorDecision == ReserviorDecision.Borrow)
            {
                sampleRule.IncrementBorrowCount();
            }
            else if (reserviorDecision == ReserviorDecision.Take)
            {
                sampleRule.IncrementSampledCount();
            }
            else if (ThreadSafeRandom.NextDouble() <= sampleRule.GetRate()) // compute based on fixed rate
            {
                sampleRule.IncrementSampledCount();
            }
            else
            {
                shouldSample = false;
            }

            SamplingResponse sampleResult;
            if (shouldSample)
            {
                sampleResult = new SamplingResponse(sampleRule.RuleName, SampleDecision.Sampled);
            }
            else
            {
                sampleResult = new SamplingResponse(SampleDecision.NotSampled);
            }

            return sampleResult;
        }