Beispiel #1
0
        public void can_report_counter_with_items_using_custom_key()
        {
            var dataKeys = new MetricValueDataKeys(
                counter: new Dictionary <CounterValueDataKeys, string> {
                { CounterValueDataKeys.MetricSetItemSuffix, " setitem" }
            });
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(new MetricSetItem("item1", "value1"), 1);
            counter.Increment(new MetricSetItem("item2", "value2"), 1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Empty);
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(payloadBuilder, dataKeys);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "test__test_counter_setitem item=item1:value1 mtype=counter total=1i percent=50" + Environment.NewLine +
                "test__test_counter_setitem item=item2:value2 mtype=counter total=1i percent=50" + Environment.NewLine +
                "test__test_counter mtype=counter value=2i" + Environment.NewLine);
        }
        public LineProtocolPayloadBuilder(MetricValueDataKeys dataKeys = null, Func <string, string, string> metricNameFormatter = null)
        {
            _payload = new LineProtocolPayload();

            DataKeys             = dataKeys ?? new MetricValueDataKeys();
            _metricNameFormatter = metricNameFormatter ?? Constants.InfluxDBDefaults.MetricNameFormatter;
        }
Beispiel #3
0
        public async Task can_pack_metrics_with_custom_meter_keys()
        {
            // Arrange
            var dataKeys = new MetricValueDataKeys(
                meter: new Dictionary <MeterValueDataKeys, string> {
                { MeterValueDataKeys.Rate1M, "1_min_rate" }
            });
            var token          = CancellationToken.None;
            var payloadBuilder = new TestPayloadBuilder(dataKeys);
            var reporter       = new TestReporter(payloadBuilder);
            var filter         = new DefaultMetricsFilter().WithEnvironmentInfo(false);

            // Act
            await _fixture.ReportGenerator.GenerateAsync(reporter, _fixture.Metrics(), filter, token);

            var payload = payloadBuilder.PayloadFormatted();

            // Assert
            payload.Should().
            Be(
                "application__test_counter tag1=value mtype=counter unit=req value=1i" + Environment.NewLine +
                "application__test_gauge mtype=gauge unit=none value=8" + Environment.NewLine +
                "application__test_histogram mtype=histogram unit=req samples=1i last=5 count.hist=1i sum=5 min=5 max=5 mean=5 median=5 stddev=0 p999=5 p99=5 p98=5 p95=5 p75=5" +
                Environment.NewLine +
                "application__test_meter tag2=value mtype=meter unit=none unit_rate=min count.meter=1i 1_min_rate=0 rate5m=0 rate15m=0 rate.mean=3000" +
                Environment.NewLine +
                "application__test_timer mtype=timer unit=req unit_dur=ms unit_rate=min count.meter=1i 1_min_rate=0 rate5m=0 rate15m=0 rate.mean=3000 samples=1i last=10 count.hist=1i sum=10 min=10 max=10 mean=10 median=10 stddev=0 p999=10 p99=10 p98=10 p95=10 p75=10" +
                Environment.NewLine);
        }
Beispiel #4
0
        public void can_report_meters_with_items_using_custom_item_key()
        {
            var dataKeys = new MetricValueDataKeys(
                meter: new Dictionary <MeterValueDataKeys, string> {
                { MeterValueDataKeys.MetricSetItemSuffix, " setitem" }
            });
            var metricsMock = new Mock <IMetrics>();
            var clock       = new TestClock();
            var meter       = new DefaultMeterMetric(clock);

            meter.Mark(new MetricSetItem("item1", "value1"), 1);
            meter.Mark(new MetricSetItem("item2", "value2"), 1);
            var meterValueSource = new MeterValueSource(
                "test meter",
                ConstantValue.Provider(meter.Value),
                Unit.None,
                TimeUnit.Milliseconds,
                MetricTags.Empty);
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(payloadBuilder, dataKeys);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "test__test_meter_setitem item=item1:value1 mtype=meter count.meter=1i rate1m=0 rate5m=0 rate15m=0 percent=50" +
                Environment.NewLine +
                "test__test_meter_setitem item=item2:value2 mtype=meter count.meter=1i rate1m=0 rate5m=0 rate15m=0 percent=50" +
                Environment.NewLine +
                "test__test_meter mtype=meter count.meter=2i rate1m=0 rate5m=0 rate15m=0" + Environment.NewLine);
        }
Beispiel #5
0
        public void can_report_counter_with_items_and_custom_data_keys()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(new MetricSetItem("item1", "value1"), 1);
            counter.Increment(new MetricSetItem("item2", "value2"), 1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" }));
            var payloadBuilder = new TestPayloadBuilder();
            var customDataKeys = new MetricValueDataKeys(
                counter: new Dictionary <CounterValueDataKeys, string>
            {
                { CounterValueDataKeys.SetItemPercent, "%" },
                { CounterValueDataKeys.Total, "count" }
            });
            var reporter = new TestReporter(payloadBuilder, customDataKeys);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "test__test_counter__items key1=value1 key2=value2 item=item1:value1 mtype=counter count=1i %=50" +
                Environment.NewLine +
                "test__test_counter__items key1=value1 key2=value2 item=item2:value2 mtype=counter count=1i %=50" +
                Environment.NewLine +
                "test__test_counter key1=value1 key2=value2 mtype=counter value=2i" + Environment.NewLine);
        }
Beispiel #6
0
        public async Task can_pack_metrics_with_custom_histogram_keys()
        {
            // Arrange
            var dataKeys = new MetricValueDataKeys(
                histogram: new Dictionary <HistogramValueDataKeys, string> {
                { HistogramValueDataKeys.P75, "75th_percentile" }
            });
            var token          = CancellationToken.None;
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(
                payloadBuilder,
                dataKeys);
            var filter = new DefaultMetricsFilter().WithEnvironmentInfo(false);

            // Act
            await _reportGenerator.GenerateAsync(reporter, _metrics, filter, token);

            var payload = payloadBuilder.PayloadFormatted();

            // Assert
            payload.Should().
            Be(
                "application__test_counter tag1=value mtype=counter value=1i" + Environment.NewLine +
                "application__test_gauge mtype=gauge value=8" + Environment.NewLine +
                "application__test_histogram mtype=histogram samples=1i last=5 count.hist=1i sum=5 min=5 max=5 mean=5 median=5 stddev=0 p999=5 p99=5 p98=5 p95=5 75th_percentile=5" +
                Environment.NewLine +
                "application__test_meter tag2=value mtype=meter count.meter=1i rate1m=0 rate5m=0 rate15m=0 rate.mean=6000" +
                Environment.NewLine +
                "application__test_timer mtype=timer count.meter=1i rate1m=0 rate5m=0 rate15m=0 rate.mean=6000 samples=1i last=10 count.hist=1i sum=10 min=10 max=10 mean=10 median=10 stddev=0 p999=10 p99=10 p98=10 p95=10 75th_percentile=10" +
                Environment.NewLine);
        }
        public void histogram_can_use_custom_data_keys_and_should_provide_corresponding_values()
        {
            // Arrange
            var value    = new HistogramValue(1, 1, 2, "3", 4, "5", 6, 7, "8", 9, 10, 11, 12, 13, 14, 15, 16);
            var data     = new Dictionary <string, object>();
            var dataKeys = new MetricValueDataKeys(
                histogram: new Dictionary <HistogramValueDataKeys, string>
            {
                { HistogramValueDataKeys.UserLastValue, "userLastValue" },
                { HistogramValueDataKeys.UserMinValue, "userMinValue" },
                { HistogramValueDataKeys.UserMaxValue, "userMaxValue" },
                { HistogramValueDataKeys.P75, "75th_percentile" }
            });

            // Act
            value.AddHistogramValues(data, dataKeys.Histogram);

            // Assert
            data.ContainsKey(DataKeys.Histogram[HistogramValueDataKeys.UserLastValue]).Should().BeFalse();
            data["userLastValue"].Should().Be("3");
            data.ContainsKey(DataKeys.Histogram[HistogramValueDataKeys.UserMaxValue]).Should().BeFalse();
            data["userMaxValue"].Should().Be("5");
            data.ContainsKey(DataKeys.Histogram[HistogramValueDataKeys.UserMinValue]).Should().BeFalse();
            data["userMinValue"].Should().Be("8");
            data.ContainsKey(DataKeys.Histogram[HistogramValueDataKeys.P75]).Should().BeFalse();
            data["75th_percentile"].Should().Be(11.0);
        }
Beispiel #8
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="ElasticSearchReporterSettings" /> class.
        /// </summary>
        public ElasticSearchReporterSettings()
        {
            var customHistogramDataKeys = new Dictionary <HistogramValueDataKeys, string>
            {
                { HistogramValueDataKeys.Count, "countHist" },
                { HistogramValueDataKeys.UserLastValue, "userLast" },
                { HistogramValueDataKeys.UserMinValue, "userMin" },
                { HistogramValueDataKeys.UserMaxValue, "userMax" }
            };

            var customMeterDataKeys = new Dictionary <MeterValueDataKeys, string>
            {
                { MeterValueDataKeys.Count, "countMeter" },
                { MeterValueDataKeys.RateMean, "rateMean" }
            };

            DataKeys = new MetricValueDataKeys(histogram: customHistogramDataKeys, meter: customMeterDataKeys);

            ElasticSearchSettings = new ElasticSearchSettings(new Uri("http://*****:*****@char) => current.Replace(@char, "_")).ToLowerInvariant()
                : SpecialChars.Aggregate($"{metricContext}__{metricName}", (current, @char) => current.Replace(@char, "_")).ToLowerInvariant();

            MetricTagValueFormatter = tagValue =>
            {
                return(SpecialChars.Aggregate(tagValue, (current, @char) => current.Replace(@char, "_")).ToLowerInvariant());
            };
        }
Beispiel #9
0
 public TestReporter(IMetricPayloadBuilder <TestMetricPayload> payloadBuilder, MetricValueDataKeys dataKeys = null)
 {
     _dataKeys            = dataKeys ?? new MetricValueDataKeys();
     _payloadBuilder      = payloadBuilder;
     _metricNameFormatter = (metricContext, metricName) => metricContext.IsMissing()
         ? $"{metricName}".Replace(' ', '_').ToLowerInvariant()
         : $"{metricContext}__{metricName}".Replace(' ', '_').ToLowerInvariant();
 }
 public CustomAsciiMetricPayloadBuilder()
 {
     _payload             = new CustomAsciiMetricPayload();
     _metricNameFormatter = (metricContext, metricName) => StringExtensions.IsMissing(metricContext)
         ? metricName
         : $"[{metricContext}] {metricName}";
     DataKeys = new MetricValueDataKeys();
 }
 /// <summary>
 ///     Initializes a new instance of the <see cref="InfluxDBReporterSettings" /> class.
 /// </summary>
 public InfluxDBReporterSettings()
 {
     InfluxDbSettings = new InfluxDBSettings();
     HttpPolicy       = new HttpPolicy
     {
         FailuresBeforeBackoff = Constants.DefaultFailuresBeforeBackoff,
         BackoffPeriod         = Constants.DefaultBackoffPeriod,
         Timeout = Constants.DefaultTimeout
     };
     ReportInterval      = TimeSpan.FromSeconds(5);
     MetricNameFormatter = InfluxDBConstants.MetricNameFormatter;
     DataKeys            = new MetricValueDataKeys();
 }
 public GraphitePayloadBuilder(
     IGraphiteNameFormatter metricNameFormatter = null,
     MetricValueDataKeys dataKeys = null,
     DateTime?timestamp           = null)
 {
     _timestamp           = timestamp;
     _payload             = new GraphitePayload();
     _metricNameFormatter = metricNameFormatter ?? FormattingConstants.GraphiteDefaults.MetricNameFormatter;
     DataKeys             = dataKeys ?? new MetricValueDataKeys(
         FormattingConstants.GraphiteDefaults.CustomHistogramDataKeys,
         FormattingConstants.GraphiteDefaults.CustomMeterDataKeys,
         FormattingConstants.GraphiteDefaults.CustomApdexKeys,
         FormattingConstants.GraphiteDefaults.CustomCounterDataKeys);
 }
        /// <summary>
        ///     Initializes a new instance of the <see cref="ElasticSearchReporterSettings" /> class.
        /// </summary>
        public ElasticSearchReporterSettings()
        {
            DataKeys = new MetricValueDataKeys(
                EsConstants.ElasticsearchDefaults.CustomHistogramDataKeys,
                EsConstants.ElasticsearchDefaults.CustomMeterDataKeys);

            ElasticSearchSettings = new ElasticSearchSettings(new Uri("http://localhost:9200"), "metrics");
            HttpPolicy            = new HttpPolicy
            {
                FailuresBeforeBackoff = Constants.DefaultFailuresBeforeBackoff,
                BackoffPeriod         = Constants.DefaultBackoffPeriod,
                Timeout = Constants.DefaultTimeout
            };
            ReportInterval          = TimeSpan.FromSeconds(5);
            MetricNameFormatter     = EsConstants.ElasticsearchDefaults.MetricNameFormatter;
            MetricTagValueFormatter = EsConstants.ElasticsearchDefaults.MetricTagValueFormatter;
        }
        public void apdex_can_use_custom_data_keys_and_should_provide_corresponding_values()
        {
            // Arrange
            var value    = new ApdexValue(1, 2, 3, 4, 5);
            var data     = new Dictionary <string, object>();
            var dataKeys = new MetricValueDataKeys(
                apdex: new Dictionary <ApdexValueDataKeys, string>
            {
                { ApdexValueDataKeys.Samples, "size_of_sample" }
            });

            // Act
            value.AddApdexValues(data, dataKeys.Apdex);

            // Assert
            data.ContainsKey(DataKeys.Apdex[ApdexValueDataKeys.Samples]).Should().BeFalse();
            data["size_of_sample"].Should().Be(5);
        }
        public BulkPayloadBuilder(
            string index,
            Func <string, string, string> metricNameFormatter = null,
            Func <string, string> metricTagValueFormatter     = null,
            MetricValueDataKeys dataKeys = null)
        {
            if (string.IsNullOrWhiteSpace(index))
            {
                throw new ArgumentNullException(nameof(index), "The elasticsearch index name cannot be null or whitespace");
            }

            _index = index;
            _metricNameFormatter     = metricNameFormatter ?? Constants.ElasticsearchDefaults.MetricNameFormatter;
            _metricTagValueFormatter = metricTagValueFormatter ?? Constants.ElasticsearchDefaults.MetricTagValueFormatter;
            _serializer = JsonSerializer.Create();
            _payload    = new BulkPayload(_serializer, _index);
            DataKeys    = dataKeys ?? new MetricValueDataKeys();
        }
        public void meter_can_use_custom_data_keys_and_should_provide_corresponding_values()
        {
            // Arrange
            var value    = new MeterValue(1, 2, 3, 4, 5, TimeUnit.Seconds);
            var dataKeys = new MetricValueDataKeys(
                meter: new Dictionary <MeterValueDataKeys, string>
            {
                { MeterValueDataKeys.Rate1M, "1_min_rate" },
                { MeterValueDataKeys.RateMean, "mean_rate" }
            });

            // Act
            value.AddMeterValues(out IDictionary <string, object> data, dataKeys.Meter);

            // Assert
            data.ContainsKey(DataKeys.Meter[MeterValueDataKeys.RateMean]).Should().BeFalse();
            data["mean_rate"].Should().Be(2.0);
            data.ContainsKey(DataKeys.Meter[MeterValueDataKeys.Rate1M]).Should().BeFalse();
            data["1_min_rate"].Should().Be(3.0);
        }
        public AsciiMetricPayloadBuilder(Func <string, string, string> metricNameFormatter = null, MetricValueDataKeys dataKeys = null)
        {
            _payload = new AsciiMetricPayload();
            if (metricNameFormatter == null)
            {
                _metricNameFormatter = (metricContext, metricName) => metricContext.IsMissing()
                    ? metricName
                    : $"[{metricContext}] {metricName}";
            }
            else
            {
                _metricNameFormatter = metricNameFormatter;
            }

            DataKeys = dataKeys ?? new MetricValueDataKeys();
        }
 public TestPayloadBuilder(MetricValueDataKeys dataKeys)
 {
     _payload = new TestMetricPayload();
     DataKeys = dataKeys ?? new MetricValueDataKeys();
 }
 public TestPayloadBuilder(Func <string, string, string> metricNameFormatter, MetricValueDataKeys dataKeys)
 {
     _payload             = new TestMetricPayload();
     DataKeys             = dataKeys ?? new MetricValueDataKeys();
     _metricNameFormatter = metricNameFormatter;
 }