public void apdex_score_should_be_between_zero_and_one() { const double apdexTSeconds = 0.5; const int fromMilliSeconds = 20; const int toMilliSeconds = 5000; const int sampleSize = 1024; var random = new Random(); var clock = new TestClock(); IApdexMetric apdexMetric = new ApdexMetric(SamplingType.ExponentiallyDecaying, sampleSize, Constants.ReservoirSampling.DefaultExponentialDecayFactor, clock, apdexTSeconds, false); foreach (var requestNumber in Enumerable.Range(0, 1000)) { using (apdexMetric.NewContext()) { clock.Advance(TimeUnit.Milliseconds, random.Next(fromMilliSeconds, toMilliSeconds)); } } var score = apdexMetric.GetValue().Score; score.Should().BeGreaterOrEqualTo(0); score.Should().BeLessOrEqualTo(1); }
public void can_report_apdex() { var expected = StringReporterSamples.Apdex.ExtractStringReporterSampleFromResourceFile(); var clock = new TestClock(); var sr = new StringReporter(); var reservoir = new ExponentiallyDecayingReservoir(Constants.ReservoirSampling.DefaultSampleSize, Constants.ReservoirSampling.DefaultExponentialDecayFactor, clock, new TestTaskScheduler(clock)); var metric = new ApdexMetric(new ApdexProvider(reservoir, Constants.ReservoirSampling.DefaultApdexTSeconds), clock, true); metric.Track(1000); sr.ReportMetric("test", new ApdexValueSource("apdex_name", metric, MetricTags.None)); AssertReportResult(sr.Result, expected); }
public void can_report_apdex() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var gauge = new ApdexMetric(SamplingType.ExponentiallyDecaying, 1028, 0.015, clock, false); var apdexValueSource = new ApdexValueSource("test apdex", ConstantValue.Provider(gauge.Value), MetricTags.None, false); var payloadBuilder = new LineProtocolPayloadBuilder(); var reporter = CreateReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", apdexValueSource); payloadBuilder.PayloadFormatted().Should().Be("test__test_apdex samples=0i,score=0,satisfied=0i,tolerating=0i,frustrating=0i\n"); }
public void can_add_apdex_values() { var clock = new TestClock(); var apdex = new ApdexMetric(SamplingType.ExponentiallyDecaying, 1028, 0.015, clock, true); apdex.Track(10000); var values = new Dictionary <string, object>(); apdex.Value.AddApdexValues(values); values.Keys.Should().Contain("samples"); values.Keys.Should().Contain("score"); values.Keys.Should().Contain("satisfied"); values.Keys.Should().Contain("tolerating"); values.Keys.Should().Contain("frustrating"); }
public IApdexMetric RunSamplesForApdexCalculation(double apdexTSeconds, int satisifedRequests, int toleratingRequests, int frustratingRequest, TestSamplePreference testSamplePreference) { var maxSatifiedDurationMilliseconds = (int)(apdexTSeconds * 1000); var minToleratedDurationMilliseconds = maxSatifiedDurationMilliseconds + 1; var maxToleratedDurationMilliseconds = 4 * (int)(apdexTSeconds * 1000); var minFrustratedDurationMilliseconds = maxToleratedDurationMilliseconds + 1; const int sampleSize = 1024; var clock = new TestClock(); var random = new Random(); var satisfiedRequestsDurations = Enumerable.Range(1, satisifedRequests).Select(x => random.Next(1, maxSatifiedDurationMilliseconds)); var toleratingRequestsDurations = Enumerable.Range(1, toleratingRequests).Select(x => random.Next(minToleratedDurationMilliseconds, maxToleratedDurationMilliseconds)); var frustratingRequestsDurations = Enumerable.Range(1, frustratingRequest) .Select(x => random.Next(minFrustratedDurationMilliseconds, minFrustratedDurationMilliseconds * 2)); var apdexMetric = new ApdexMetric(SamplingType.ExponentiallyDecaying, sampleSize, Constants.ReservoirSampling.DefaultExponentialDecayFactor, clock, apdexTSeconds); if (testSamplePreference == TestSamplePreference.Satisified) { RunSamples(satisfiedRequestsDurations, apdexMetric, clock); RunSamples(toleratingRequestsDurations, apdexMetric, clock); RunSamples(frustratingRequestsDurations, apdexMetric, clock); } else if (testSamplePreference == TestSamplePreference.Frustrating) { RunSamples(frustratingRequestsDurations, apdexMetric, clock); RunSamples(toleratingRequestsDurations, apdexMetric, clock); RunSamples(satisfiedRequestsDurations, apdexMetric, clock); } else { RunSamples(toleratingRequestsDurations, apdexMetric, clock); RunSamples(frustratingRequestsDurations, apdexMetric, clock); RunSamples(satisfiedRequestsDurations, apdexMetric, clock); } return(apdexMetric); }
public ApdexMetricTests() { _apdex = new ApdexMetric(SamplingType.ExponentiallyDecaying, Constants.ReservoirSampling.DefaultSampleSize, Constants.ReservoirSampling.DefaultSampleSize, _clock, Constants.ReservoirSampling.DefaultApdexTSeconds); }