Ejemplo n.º 1
0
        private MetricsContextValueSource CreateValueSource(
            string context,
            GaugeValueSource gauges                     = null,
            CounterValueSource counters                 = null,
            MeterValueSource meters                     = null,
            HistogramValueSource histograms             = null,
            BucketHistogramValueSource bucketHistograms = null,
            TimerValueSource timers                     = null,
            BucketTimerValueSource bucketTimers         = null,
            ApdexValueSource apdexScores                = null)
        {
            var gaugeValues           = gauges != null ? new[] { gauges } : Enumerable.Empty <GaugeValueSource>();
            var counterValues         = counters != null ? new[] { counters } : Enumerable.Empty <CounterValueSource>();
            var meterValues           = meters != null ? new[] { meters } : Enumerable.Empty <MeterValueSource>();
            var histogramValues       = histograms != null ? new[] { histograms } : Enumerable.Empty <HistogramValueSource>();
            var bucketHistogramValues = bucketHistograms != null ? new[] { bucketHistograms } : Enumerable.Empty <BucketHistogramValueSource>();
            var timerValues           = timers != null ? new[] { timers } : Enumerable.Empty <TimerValueSource>();
            var bucketTimerValues     = bucketTimers != null ? new[] { bucketTimers } : Enumerable.Empty <BucketTimerValueSource>();
            var apdexScoreValues      = apdexScores != null ? new[] { apdexScores } : Enumerable.Empty <ApdexValueSource>();

            return(new MetricsContextValueSource(
                       context,
                       gaugeValues,
                       counterValues,
                       meterValues,
                       histogramValues,
                       bucketHistogramValues,
                       timerValues,
                       bucketTimerValues,
                       apdexScoreValues));
        }
Ejemplo n.º 2
0
        private IEnumerable <ApdexValueSource> SetupApdexScores()
        {
            var apdexValue = new ApdexValue(0.9, 170, 20, 10, 200);
            var apdex      = new ApdexValueSource(ApdexNameDefault, ConstantValue.Provider(apdexValue), Tags);

            return(new[] { apdex });
        }
        private static MetricTelemetry Translate(ApdexValueSource source, string contextName, DateTimeOffset now)
        {
            var mt = MetricFactory.CreateMetric(source, contextName, now);

            source.Value.CopyTo(mt);
            return(mt);
        }
Ejemplo n.º 4
0
        public IEnumerable <ApdexValueSource> SetupApdexScores()
        {
            var apdexValue = new ApdexValue(0.9, 170, 20, 10, 200);
            var apdex      = new ApdexValueSource("test_apdex", ConstantValue.Provider(apdexValue), Tags);

            return(new[] { apdex });
        }
Ejemplo n.º 5
0
        public ApdexSerializationTests(ITestOutputHelper output, MetricProviderTestFixture fixture)
        {
            _output     = output;
            _serializer = new MetricDataSerializer();
            _apdex      = fixture.ApdexScores.First();

            _apdex = fixture.ApdexScores.First(x => x.Name == fixture.ApdexNameDefault);
        }
Ejemplo n.º 6
0
 public IApdex Apdex <T>(ApdexOptions options, Func <T> builder) where T : IApdexMetric
 {
     return(_apdexScores.GetOrAdd(options.Name, () =>
     {
         var apdex = builder();
         var valueSource = new ApdexValueSource(options.Name, apdex, AllTags(options.Tags), options.ResetOnReporting);
         return Tuple.Create((IApdex)apdex, valueSource);
     }));
 }
 public static void HumanizeApdexScore(this StringBuilder sb, ApdexValueSource apdex)
 {
     sb.AppendLine();
     sb.AppendLine("Score".FormatReadableMetricValue(apdex.Value.Score.ToString(CultureInfo.CurrentCulture)));
     sb.AppendLine("Sample Size".FormatReadableMetricValue(apdex.Value.SampleSize.ToString(CultureInfo.CurrentCulture)));
     sb.AppendLine("Satisfied".FormatReadableMetricValue(apdex.Value.Satisfied.ToString(CultureInfo.CurrentCulture)));
     sb.AppendLine("Tolerating".FormatReadableMetricValue(apdex.Value.Tolerating.ToString(CultureInfo.CurrentCulture)));
     sb.AppendLine("Frustrating".FormatReadableMetricValue(apdex.Value.Frustrating.ToString(CultureInfo.CurrentCulture)));
 }
        /// <inheritdoc />
        public bool IsApdexMatch(ApdexValueSource apdex)
        {
            if (_types != null && !_types.Contains(MetricType.Apdex))
            {
                return(false);
            }

            return(IsMetricNameMatch(apdex.Name) && IsTagMatch(apdex.Tags));
        }
Ejemplo n.º 9
0
        public IEnumerable <ApdexValueSource> SetupApdexScores()
        {
            var apdexValue = new ApdexValue(0.9, 170, 20, 10, 200);
            var apdex      = new ApdexValueSource(ApdexNameDefault, ConstantValue.Provider(apdexValue), Tags);

            var apdexValueWithGroup = new ApdexValue(0.9, 170, 20, 10, 200);
            var apdexWithGroup      = new ApdexValueSource(ApdexNameWithGroup, GroupDefault, ConstantValue.Provider(apdexValueWithGroup), Tags);

            return(new[] { apdex, apdexWithGroup });
        }
        private static MetricTelemetry TranslateApdexSource(ApdexValueSource source, string contextName, DateTimeOffset now)
        {
            var mt = MetricFactory.CreateMetric(source, contextName, now);

            TranslateTags(source.Tags, mt);
            mt.Properties[Constants.AppMetricsTypeKey] = Constants.ApdexTypeValue;
            var all = source.Value.Satisfied + source.Value.Tolerating + source.Value.Frustrating;

            mt.Sum = (source.Value.Satisfied + ((double)source.Value.Tolerating / 2)) / all;
            return(mt);
        }
Ejemplo n.º 11
0
 public static ApdexScore ToMetric(this ApdexValueSource source)
 {
     return(new ApdexScore
     {
         Name = source.Name,
         Score = source.Value.Score,
         SampleSize = source.Value.SampleSize,
         Satisfied = source.Value.Satisfied,
         Tolerating = source.Value.Tolerating,
         Frustrating = source.Value.Frustrating,
         Tags = source.Tags
     });
 }
Ejemplo n.º 12
0
        public static IEnumerable <MetricValue> ToMackerelMetrics(this ApdexValueSource metric)
        {
            var result = new List <MetricValue>
            {
                new MetricValue
                {
                    name  = "",
                    value = metric.Value.Score.ToDecimal()
                }
            };

            return(result);
        }
Ejemplo n.º 13
0
        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");
        }
Ejemplo n.º 14
0
        public static IEnumerable <Metric> ToPrometheusMetrics(this ApdexValueSource metric)
        {
            var result = new List <Metric>
            {
                new Metric
                {
                    gauge = new Gauge
                    {
                        value = metric.Value.Score
                    },
                    label = metric.Tags.ToLabelPairs()
                }
            };

            return(result);
        }
Ejemplo n.º 15
0
        public void can_report_apdex()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(gauge.Value),
                MetricTags.Empty,
                false);
            var payloadBuilder = new LineProtocolPayloadBuilder(_settings.DataKeys, _settings.MetricNameFormatter);
            var reporter       = CreateReporter(payloadBuilder);

            reporter.StartReportRun(metricsMock.Object);
            reporter.ReportMetric("test", apdexValueSource);

            payloadBuilder.PayloadFormatted(false).Should().Be("test__test_apdex,mtype=apdex,unit=result samples=0i,score=0,satisfied=0i,tolerating=0i,frustrating=0i\n");
        }
        public void Can_report_apdex_with_tags_when_multidimensional()
        {
            // Arrange
            var expected =
                "env.staging.apdex.test.test_apdex.host.server1.anothertag.thevalue.Samples 0 1483232461\nenv.staging.apdex.test.test_apdex.host.server1.anothertag.thevalue.Score 0.00 1483232461\nenv.staging.apdex.test.test_apdex.host.server1.anothertag.thevalue.Satisfied 0 1483232461\nenv.staging.apdex.test.test_apdex.host.server1.anothertag.thevalue.Tolerating 0 1483232461\nenv.staging.apdex.test.test_apdex.host.server1.anothertag.thevalue.Frustrating 0 1483232461\n";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(apdex.Value),
                MetricTags.Concat(_tags, new MetricTags("anothertag", "thevalue")));

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public void can_report_apdex()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(gauge.Value),
                MetricTags.Empty,
                false);
            var payloadBuilder = new GraphitePayloadBuilder(_settings.GraphiteSettings.MetricNameFormatter, _settings.DataKeys, Origin);
            var reporter       = CreateReporter(payloadBuilder);

            reporter.StartReportRun(metricsMock.Object);
            reporter.ReportMetric("test", apdexValueSource);

            payloadBuilder.PayloadFormatted().Should().Be("apdex.test.test_apdex.Samples 0 0\napdex.test.test_apdex.Score 0.00 0\napdex.test.test_apdex.Satisfied 0 0\napdex.test.test_apdex.Tolerating 0 0\napdex.test.test_apdex.Frustrating 0 0\n");
        }
        public void Can_report_apdex_with_tags_when_multidimensional()
        {
            // Arrange
            var expected =
                "test__test_apdex,host=server1,env=staging,anothertag=thevalue,mtype=apdex,unit=result samples=0i,score=0,satisfied=0i,tolerating=0i,frustrating=0i 1483232461000000000\n";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(apdex.Value),
                MetricTags.Concat(_tags, new MetricTags("anothertag", "thevalue")));

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
Ejemplo n.º 19
0
        public async Task Can_report_apdex()
        {
            // Arrange
            var expected =
                "apdex.test.test_apdex.Samples 0 1483232461\napdex.test.test_apdex.Score 0.00 1483232461\napdex.test.test_apdex.Satisfied 0 1483232461\napdex.test.test_apdex.Tolerating 0 1483232461\napdex.test.test_apdex.Frustrating 0 1483232461\n";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(apdex.Value),
                MetricTags.Empty);

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public async Task Can_report_apdex_with_tags()
        {
            // Arrange
            var expected =
                "{\"series\":[{\"metric\":\"test.test_apdex.apdex.samples\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"key1:value1\",\"key2:value2\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.score\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"key1:value1\",\"key2:value2\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.satisfied\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"key1:value1\",\"key2:value2\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.tolerating\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"key1:value1\",\"key2:value2\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.frustrating\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"key1:value1\",\"key2:value2\",\"unit:result\"]}]}";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(apdex.Value),
                new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" }));

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), FlushInterval, expected);
        }
        public void Can_report_apdex_with_tags()
        {
            // Arrange
            var expected =
                "test__test_apdex,key1=value1,key2=value2,mtype=apdex,unit=result samples=0i,score=0,satisfied=0i,tolerating=0i,frustrating=0i 1483232461000000000\n";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(apdex.Value),
                new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" }));

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public async Task Can_report_apdex_with_tags_when_multidimensional()
        {
            // Arrange
            var expected =
                "{\"series\":[{\"metric\":\"test.test_apdex.apdex.samples\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"anothertag:thevalue\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.score\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"anothertag:thevalue\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.satisfied\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"anothertag:thevalue\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.tolerating\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"anothertag:thevalue\",\"unit:result\"]},{\"metric\":\"test.test_apdex.apdex.frustrating\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"anothertag:thevalue\",\"unit:result\"]}]}";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(apdex.Value),
                MetricTags.Concat(_tags, new MetricTags("anothertag", "thevalue")));

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), FlushInterval, expected);
        }
        public void Can_report_apdex_with_tags()
        {
            // Arrange
            var expected =
                "apdex.test.test_apdex.key1.value1.key2.value2.Samples 0 1483232461\napdex.test.test_apdex.key1.value1.key2.value2.Score 0.00 1483232461\napdex.test.test_apdex.key1.value1.key2.value2.Satisfied 0 1483232461\napdex.test.test_apdex.key1.value1.key2.value2.Tolerating 0 1483232461\napdex.test.test_apdex.key1.value1.key2.value2.Frustrating 0 1483232461\n";
            var clock            = new TestClock();
            var apdex            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(apdex.Value),
                new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" }));

            // Act
            var valueSource = CreateValueSource("test", apdexScores: apdexValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
Ejemplo n.º 24
0
        public static IEnumerable <Metric> ToPrometheusMetrics(
            this ApdexValueSource metric,
            Func <string, string> labelNameFormatter)
        {
            var result = new List <Metric>
            {
                new Metric
                {
                    gauge = new Gauge
                    {
                        value = metric.Value.Score
                    },
                    label = metric.Tags.ToLabelPairs(labelNameFormatter)
                }
            };

            return(result);
        }
Ejemplo n.º 25
0
        public void can_report_apdex()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(gauge.Value),
                MetricTags.Empty,
                false);
            var items = CreateReporterAndPayloadBuilder();

            items.Item1.StartReportRun(metricsMock.Object);
            items.Item1.ReportMetric("test", apdexValueSource);

            items.Item2.PayloadFormatted().
            Should().
            Be("test__test_apdex mtype=apdex unit=result samples=0i score=0 satisfied=0i tolerating=0i frustrating=0i" + Environment.NewLine);
        }
Ejemplo n.º 26
0
        public void can_report_apdex__when_multidimensional()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(gauge.Value),
                _tags,
                resetOnReporting: false);
            var items = CreateReporterAndPayloadBuilder();

            items.Item1.StartReportRun(metricsMock.Object);
            items.Item1.ReportMetric("test", apdexValueSource);

            items.Item2.PayloadFormatted().
            Should().
            Be("test__test_apdex host=server1 env=staging mtype=apdex unit=result samples=0i score=0 satisfied=0i tolerating=0i frustrating=0i" + Environment.NewLine);
        }
Ejemplo n.º 27
0
        public void can_report_apdex_with_tags()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex",
                ConstantValue.Provider(gauge.Value),
                new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" }),
                false);
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = CreateReporter(payloadBuilder);

            reporter.StartReportRun(metricsMock.Object);
            reporter.ReportMetric("test", apdexValueSource);

            payloadBuilder.PayloadFormatted().
            Should().
            Be("test__test_apdex key1=value1 key2=value2 mtype=apdex samples=0i score=0 satisfied=0i tolerating=0i frustrating=0i" + Environment.NewLine);
        }
Ejemplo n.º 28
0
        public IApdex Apdex <T>(ApdexOptions options, Func <T> builder)
            where T : IApdexMetric
        {
            return(_apdexScores.GetOrAdd(
                       options.Name,
                       () =>
            {
                var allTags = AllTags(options.Tags);

                Logger.Debug("Adding Apdex {Name} - {@Options} {MesurementUnit} {@Tags}", options.Name, options, options.MeasurementUnit.ToString(), allTags.ToDictionary());

                var apdex = builder();
                var valueSource = new ApdexValueSource(
                    options.Name,
                    apdex,
                    allTags,
                    options.ResetOnReporting);
                return Tuple.Create((IApdex)apdex, valueSource);
            }));
        }
        public void can_report_apdex__when_multidimensional()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(gauge.Value),
                _tags,
                resetOnReporting: false);
            var payloadBuilder = new LineProtocolPayloadBuilder();
            var reporter       = CreateReporter(payloadBuilder);

            reporter.StartReportRun(metricsMock.Object);
            reporter.ReportMetric("test", apdexValueSource);

            payloadBuilder.PayloadFormatted().
            Should().
            Be("test__test_apdex,host=server1,env=staging samples=0i,score=0,satisfied=0i,tolerating=0i,frustrating=0i\n");
        }
Ejemplo n.º 30
0
        public void can_report_apdex_with_tags_when_multidimensional()
        {
            var metricsMock      = new Mock <IMetrics>();
            var clock            = new TestClock();
            var gauge            = new DefaultApdexMetric(_defaultReservoir, clock, false);
            var apdexValueSource = new ApdexValueSource(
                "test apdex" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(gauge.Value),
                MetricTags.Concat(_tags, new MetricTags("anothertag", "thevalue")),
                resetOnReporting: false);
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = CreateReporter(payloadBuilder);

            reporter.StartReportRun(metricsMock.Object);
            reporter.ReportMetric("test", apdexValueSource);

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "test__test_apdex host=server1 env=staging anothertag=thevalue mtype=apdex samples=0i score=0 satisfied=0i tolerating=0i frustrating=0i" + Environment.NewLine);
        }