Beispiel #1
0
        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);
        }
Beispiel #2
0
        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");
        }
Beispiel #4
0
        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");
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
 public ApdexMetricTests()
 {
     _apdex = new ApdexMetric(SamplingType.ExponentiallyDecaying, Constants.ReservoirSampling.DefaultSampleSize,
                              Constants.ReservoirSampling.DefaultSampleSize, _clock, Constants.ReservoirSampling.DefaultApdexTSeconds);
 }