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; }
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); }
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); }
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); }
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); }
/// <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()); }; }
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; }