Beispiel #1
0
        public void can_report_counter_with_items_with_option_not_to_report_percentage()
        {
            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,
                reportItemPercentages: false);
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "test__test_counter__items item=item1:value1 mtype=counter total=1i" + Environment.NewLine +
                "test__test_counter__items item=item2:value2 mtype=counter total=1i" + Environment.NewLine +
                "test__test_counter mtype=counter value=2i" + Environment.NewLine);
        }
        public void can_report_counter_with_items_tags_when_multidimensional()
        {
            var counterTags = new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" });
            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" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Concat(_tags, counterTags));
            var payloadBuilder = new GraphitePayloadBuilder(_settings.GraphiteSettings.MetricNameFormatter, _settings.DataKeys, Origin);

            var reporter = CreateReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "env.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item1_value1.Total 1 0\nenv.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item1_value1.Percent 50.00 0\nenv.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item2_value2.Total 1 0\nenv.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item2_value2.Percent 50.00 0\nenv.staging.counter.test.test_counter.host.server1.key1.value1.key2.value2.value 2 0\n");
        }
Beispiel #3
0
        public void can_report_counter_with_items_tags_when_multidimensional()
        {
            var counterTags = new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" });
            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" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Concat(_tags, counterTags));
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "test__test_counter__items host=server1 env=staging key1=value1 key2=value2 item=item1:value1 mtype=counter total=1i percent=50" +
                Environment.NewLine +
                "test__test_counter__items host=server1 env=staging key1=value1 key2=value2 item=item2:value2 mtype=counter total=1i percent=50" +
                Environment.NewLine +
                "test__test_counter host=server1 env=staging key1=value1 key2=value2 mtype=counter value=2i" + Environment.NewLine);
        }
        public void can_report_counter_with_items_with_option_not_to_report_percentage()
        {
            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,
                reportItemPercentages: false);
            var payloadBuilder = new GraphitePayloadBuilder(_settings.GraphiteSettings.MetricNameFormatter, _settings.DataKeys, Origin);

            var reporter = CreateReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().
            Should().
            Be(
                "counter.test.test_counter-SetItem.item.item1_value1.Total 1 0\ncounter.test.test_counter-SetItem.item.item2_value2.Total 1 0\ncounter.test.test_counter.value 2 0\n");
        }
Beispiel #5
0
        public void can_report_counter_with_items_and_tags()
        {
            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 reporter       = new TestReporter(payloadBuilder);

            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 total=1i percent=50" +
                Environment.NewLine +
                "test__test_counter__items key1=value1 key2=value2 item=item2:value2 mtype=counter total=1i percent=50" +
                Environment.NewLine +
                "test__test_counter key1=value1 key2=value2 mtype=counter value=2i" + Environment.NewLine);
        }
Beispiel #6
0
        public async Task Counter_with_custom_sample_rate_with_multiple_MetricsDataValueSource_should_sample_correctly()
        {
            // Arrange
            var sources   = new List <MetricsDataValueSource>();
            var timeStamp = _timestamp;

            // Act
            for (var i = 0; i < 10000; ++i)
            {
                sources.Add(CreateMetricsDataValueSource(ref timeStamp));
            }

            var emittedDataCount = (await Serialize(sources, 0.5)).Split('\n').Length;

            // Assert
            (emittedDataCount > 4500 && emittedDataCount < 5500).Should().BeTrue();

            MetricsDataValueSource CreateMetricsDataValueSource(ref DateTime timestamp)
            {
                var counter = new DefaultCounterMetric();

                counter.Increment(1);
                var counterValueSource = new CounterValueSource(
                    "test counter",
                    ConstantValue.Provider(counter.Value),
                    Unit.None,
                    MetricTags.Empty);
                var valueSource = CreateValueSource("test", counters: counterValueSource);
                var result      = new MetricsDataValueSource(timestamp, new[] { valueSource });

                timestamp += TimeSpan.FromSeconds(1);
                return(result);
            }
        }
Beispiel #7
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 #8
0
        public async Task Can_report_counter_with_items_tags_when_multidimensional()
        {
            // Arrange
            var expected =
                "test.test_counter__items.counter.item1:value1.total:1|c|#host:server1,env:staging,key1:value1,key2:value2,unit:none,timestamp:1483232461\n" +
                "test.test_counter__items.counter.item1:value1.percent:50|c|#host:server1,env:staging,key1:value1,key2:value2,unit:none,timestamp:1483232461\n" +
                "test.test_counter__items.counter.item2:value2.total:1|c|#host:server1,env:staging,key1:value1,key2:value2,unit:none,timestamp:1483232461\n" +
                "test.test_counter__items.counter.item2:value2.percent:50|c|#host:server1,env:staging,key1:value1,key2:value2,unit:none,timestamp:1483232461\n" +
                "test.test_counter.counter.value:2|c|#host:server1,env:staging,key1:value1,key2:value2,unit:none,timestamp:1483232461";
            var counterTags = new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" });
            var counter     = new DefaultCounterMetric();

            counter.Increment(new MetricSetItem("item1", "value1"), 1);
            counter.Increment(new MetricSetItem("item2", "value2"), 1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Concat(_tags, counterTags));

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
Beispiel #9
0
        public async Task Can_report_counter_with_custom_sample_rate_through_tag()
        {
            // Arrange
            var expected =
                "test.test_counter__items.counter.item1:value1.total:1|c\n" +
                "test.test_counter__items.counter.item1:value1.percent:50|c\n" +
                "test.test_counter__items.counter.item2:value2.total:1|c\n" +
                "test.test_counter__items.counter.item2:value2.percent:50|c\n" +
                "test.test_counter.counter.value:2|c";
            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[] { "sampleRate" }, new[] { "1.0" }));

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected, 0.5);
        }
Beispiel #10
0
        public async Task Can_report_counter_with_items()
        {
            // Arrange
            var expected =
                "test.test_counter__items.counter.item1:value1.total:1|c|#unit:none,timestamp:1483232461\n" +
                "test.test_counter__items.counter.item1:value1.percent:50|c|#unit:none,timestamp:1483232461\n" +
                "test.test_counter__items.counter.item2:value2.total:1|c|#unit:none,timestamp:1483232461\n" +
                "test.test_counter__items.counter.item2:value2.percent:50|c|#unit:none,timestamp:1483232461\n" +
                "test.test_counter.counter.value:2|c|#unit:none,timestamp:1483232461";
            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);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
Beispiel #11
0
        public void Counter_report_set_iterms()
        {
            var tags = new MetricTags("x", "y");

            var counter = new DefaultCounterMetric();

            counter.Increment(new MetricSetItem("key", "value"));
            counter.Increment(new MetricSetItem("key1", "value"));

            // Test reportSetItems = true & reportItemPercentages = true
            CounterValueSource counterValueSource = new CounterValueSource("test", counter, Unit.Items, tags);
            var serilized = counterValueSource.ToSerializableMetric();

            serilized.Count.Should().Be(2);
            serilized.Items.Should().NotBeEmpty();
            serilized.Items.First().Item.Should().Be("key:value");
            serilized.Items.First().Percent.Should().Be(50);

            // Test reportSetItems = true & reportItemPercentages = false
            counterValueSource = new CounterValueSource("test", counter, Unit.Items, tags, false, false);
            serilized          = counterValueSource.ToSerializableMetric();
            serilized.Count.Should().Be(2);
            serilized.Items.Should().NotBeEmpty();
            serilized.Items.First().Item.Should().Be("key:value");
            serilized.Items.First().Percent.Should().Be(default);
Beispiel #12
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);
        }
Beispiel #13
0
        private IEnumerable <CounterValueSource> SetupCounters(bool resetOnReporting)
        {
            var counterValue = new DefaultCounterMetric();

            counterValue.Increment("item1", 20);
            counterValue.Increment("item2", 40);
            counterValue.Increment("item3", 140);
            var counter = new CounterValueSource(CounterNameDefault, counterValue, Unit.Items, Tags, resetOnReporting);

            return(new[] { counter });
        }
        public void can_report_counters__when_multidimensional()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                _tags);
            var items = CreateReporterAndPayloadBuilder();

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

            items.Item2.PayloadFormatted().Should().Be("test__test_counter host=server1 env=staging mtype=counter unit=none value=1i" + Environment.NewLine);
        }
        public void can_report_counters()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Empty);
            var items = CreateReporterAndPayloadBuilder();

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

            items.Item2.PayloadFormatted().Should().Be("test__test_counter mtype=counter unit=none value=1i" + Environment.NewLine);
        }
        public void can_report_counters()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Empty);
            var payloadBuilder = new LineProtocolPayloadBuilder();
            var reporter       = CreateReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().Should().Be("test__test_counter value=1i\n");
        }
Beispiel #17
0
        public async Task Can_report_counters__when_multidimensional()
        {
            // Arrange
            var expected = "env.staging.counter.test.test_counter.host.server1.Value 1 1483232461\n";
            var counter  = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                _tags);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
Beispiel #18
0
        public async Task Can_report_counters()
        {
            // Arrange
            var expected = "test.test_counter.counter.value:1|c|#unit:none,timestamp:1483232461";
            var counter  = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Empty);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public void can_report_counters__when_multidimensional()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                _tags);
            var payloadBuilder = new LineProtocolPayloadBuilder();
            var reporter       = CreateReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().Should().Be("test__test_counter,host=server1,env=staging value=1i\n");
        }
        public void Can_report_counters__when_multidimensional()
        {
            // Arrange
            var expected = "test__test_counter,host=server1,env=staging,mtype=counter,unit=none value=1i 1483232461000000000\n";
            var counter  = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                _tags);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public void Can_report_counters()
        {
            // Arrange
            var expected = "test__test_counter,mtype=counter,unit=none value=1i 1483232461000000000\n";
            var counter  = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Empty);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public async Task Can_report_counters__when_multidimensional()
        {
            // Arrange
            var expected = "{\"series\":[{\"metric\":\"test.test_counter.counter.value\",\"points\":[[1483232461,1]],\"type\":\"count\",\"interval\":10,\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\"]}]}";
            var counter  = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                _tags);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), FlushInterval, expected);
        }
        public void can_report_counters()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter",
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Empty);
            var payloadBuilder = new GraphitePayloadBuilder(_settings.GraphiteSettings.MetricNameFormatter, _settings.DataKeys, Origin);

            var reporter = CreateReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().Should().Be("counter.test.test_counter.value 1 0\n");
        }
        public void can_report_counters__when_multidimensional()
        {
            var metricsMock = new Mock <IMetrics>();
            var counter     = new DefaultCounterMetric();

            counter.Increment(1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                _tags);
            var payloadBuilder = new GraphitePayloadBuilder(_settings.GraphiteSettings.MetricNameFormatter, _settings.DataKeys, Origin);

            var reporter = CreateReporter(payloadBuilder);

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

            payloadBuilder.PayloadFormatted().Should().Be("env.staging.counter.test.test_counter.host.server1.value 1 0\n");
        }
        public void Can_report_counter_with_items_and_tags()
        {
            // Arrange
            var expected =
                "test__test_counter__items,key1=value1,key2=value2,item=item1:value1,mtype=counter,unit=none total=1i,percent=50 1483232461000000000\ntest__test_counter__items,key1=value1,key2=value2,item=item2:value2,mtype=counter,unit=none total=1i,percent=50 1483232461000000000\ntest__test_counter,key1=value1,key2=value2,mtype=counter,unit=none value=2i 1483232461000000000\n";
            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" }));

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public async Task Can_report_counter_with_items_and_tags()
        {
            // Arrange
            var expected =
                "{\"series\":[{\"metric\":\"test.test_counter__items.counter.total\",\"points\":[[1483232461,1]],\"type\":\"count\",\"interval\":10,\"tags\":[\"key1:value1\",\"key2:value2\",\"item:item1:value1\",\"unit:none\"]},{\"metric\":\"test.test_counter__items.counter.percent\",\"points\":[[1483232461,50]],\"type\":\"count\",\"interval\":10,\"tags\":[\"key1:value1\",\"key2:value2\",\"item:item1:value1\",\"unit:none\"]},{\"metric\":\"test.test_counter__items.counter.total\",\"points\":[[1483232461,1]],\"type\":\"count\",\"interval\":10,\"tags\":[\"key1:value1\",\"key2:value2\",\"item:item2:value2\",\"unit:none\"]},{\"metric\":\"test.test_counter__items.counter.percent\",\"points\":[[1483232461,50]],\"type\":\"count\",\"interval\":10,\"tags\":[\"key1:value1\",\"key2:value2\",\"item:item2:value2\",\"unit:none\"]},{\"metric\":\"test.test_counter.counter.value\",\"points\":[[1483232461,2]],\"type\":\"count\",\"interval\":10,\"tags\":[\"key1:value1\",\"key2:value2\",\"unit:none\"]}]}";
            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" }));

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), FlushInterval, expected);
        }
        public void Can_report_counter_with_items_and_tags()
        {
            // Arrange
            var expected =
                "counter.test.test_counter-SetItem.key1.value1.key2.value2.item.item1_value1.Total 1 1483232461\ncounter.test.test_counter-SetItem.key1.value1.key2.value2.item.item1_value1.Percent 50.00 1483232461\ncounter.test.test_counter-SetItem.key1.value1.key2.value2.item.item2_value2.Total 1 1483232461\ncounter.test.test_counter-SetItem.key1.value1.key2.value2.item.item2_value2.Percent 50.00 1483232461\ncounter.test.test_counter.key1.value1.key2.value2.value 2 1483232461\n";
            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" }));

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public void Can_report_counter_with_items_with_option_not_to_report_percentage()
        {
            // Arrange
            var expected =
                "counter.test.test_counter-SetItem.item.item1_value1.Total 1 1483232461\ncounter.test.test_counter-SetItem.item.item2_value2.Total 1 1483232461\ncounter.test.test_counter.value 2 1483232461\n";
            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,
                reportItemPercentages: false);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public void Can_report_counter_with_items_tags_when_multidimensional()
        {
            // Arrange
            var expected =
                "env.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item1_value1.Total 1 1483232461\nenv.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item1_value1.Percent 50.00 1483232461\nenv.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item2_value2.Total 1 1483232461\nenv.staging.counter.test.test_counter-SetItem.host.server1.key1.value1.key2.value2.item.item2_value2.Percent 50.00 1483232461\nenv.staging.counter.test.test_counter.host.server1.key1.value1.key2.value2.value 2 1483232461\n";
            var counterTags = new MetricTags(new[] { "key1", "key2" }, new[] { "value1", "value2" });
            var counter     = new DefaultCounterMetric();

            counter.Increment(new MetricSetItem("item1", "value1"), 1);
            counter.Increment(new MetricSetItem("item2", "value2"), 1);
            var counterValueSource = new CounterValueSource(
                "test counter" + MultidimensionalMetricNameSuffix,
                ConstantValue.Provider(counter.Value),
                Unit.None,
                MetricTags.Concat(_tags, counterTags));

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }
        public void Can_report_counter_with_items_with_option_not_to_report_percentage()
        {
            // Arrange
            var expected =
                "test__test_counter__items,item=item1:value1,mtype=counter,unit=none total=1i 1483232461000000000\ntest__test_counter__items,item=item2:value2,mtype=counter,unit=none total=1i 1483232461000000000\ntest__test_counter,mtype=counter,unit=none value=2i 1483232461000000000\n";
            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,
                reportItemPercentages: false);

            // Act
            var valueSource = CreateValueSource("test", counters: counterValueSource);

            // Assert
            AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected);
        }