public void RateLimitingSampler_UsesTheRateLimiter() { var maxTracesPerSecond = 3.6; var traceId = new TraceId(1); var expectedTags = new Dictionary <string, object> { { SamplerConstants.SamplerTypeTagKey, SamplerConstants.SamplerTypeRateLimiting }, { SamplerConstants.SamplerParamTagKey, maxTracesPerSecond } }; var rateLimiter = Substitute.For <IRateLimiter>(); double calledWith = 0; var shouldReturn = false; rateLimiter.CheckCredit(Arg.Any <double>()).Returns(x => { calledWith = (double)x[0]; return(shouldReturn); }); var sampler = new RateLimitingSampler(maxTracesPerSecond, rateLimiter); var isSampled = sampler.IsSampled(traceId, "op"); Assert.False(isSampled.Sampled); Assert.Equal(1.0, calledWith); shouldReturn = true; isSampled = sampler.IsSampled(traceId, "op"); Assert.True(isSampled.Sampled); Assert.Equal(1.0, calledWith); Assert.Equal(expectedTags, isSampled.Tags); }
public void TestTags() { RateLimitingSampler sampler = new RateLimitingSampler(123); var tags = sampler.Sample("operate", new TraceId(11L)).Tags; Assert.Equal("ratelimiting", tags["sampler.type"]); Assert.Equal(123.0, tags["sampler.param"]); }
public void RateLimitingSampler_UsesDefaultRateLimiter() { var maxTracesPerSecond = 5.4; var sampler = new RateLimitingSampler(maxTracesPerSecond); Assert.Equal(maxTracesPerSecond, sampler.MaxTracesPerSecond); Assert.IsType <RateLimiter>(sampler._rateLimiter); sampler.Dispose(); }
public void RateLimiterAllowsMaxUnitsPerInterval() { var sampler = new RateLimitingSampler(new RateLimiter(1, TimeSpan.FromDays(1))); Thread.Sleep(500); //give us time to init using (sampler) { Assert.True(sampler.Sample("op", 5)); Assert.False(sampler.Sample("op", 5)); } }
public void RateLimiterSetsCorrectTags() { var rateLimiter = new RateLimiter(1, TimeSpan.FromDays(1)); var sampler = new RateLimitingSampler(rateLimiter); Thread.Sleep(20); using (sampler) { var sample = sampler.Sample("op", 56); Assert.Equal("ratelimiting", sample.Tags["sampler"]); Assert.Equal(rateLimiter.ToString(), sample.Tags["sampler-arg"]); } }