public void AddMetrics_TestEqualsGetsEscaped()
        {
            var context = new DefaultMetricsContext();
            var sender  = new FakeSignalFxReporter();
            var report  = new SignalFxReport(
                sender,
                "",
                "FakeApiKey",
                new Dictionary <string, string> {
                { "System", "UnitTests" }
            }, 10000, new HashSet <MetricDetails> {
                MetricDetails.count
            });

            var tags = new MetricTags("test\\=string=test\\value");

            var timer = context.Timer("TestTimer", Unit.Calls, SamplingType.ExponentiallyDecaying, TimeUnit.Microseconds, TimeUnit.Microseconds, tags);

            timer.Record(10053, TimeUnit.Microseconds);

            var source = new CancellationTokenSource();

            report.RunReport(context.DataProvider.CurrentMetricsData, () => new HealthStatus(), source.Token);

            Assert.Equal(1, sender.Count);
            var message = sender[0];

            var dp = message.datapoints.FirstOrDefault(datapoint => datapoint.dimensions.Any(dimension => dimension.key == "test=string"));

            Assert.NotNull(dp);

            var dm = dp.dimensions.FirstOrDefault(dimension => dimension.key == "test=string");

            Assert.Equal("testvalue", dm.value);
        }
        public void CounterSetItemsDisabledTest()
        {
            var context = new DefaultMetricsContext();
            var config  = new PrometheusReportConfig
            {
                OutputSetItems = false
            };

            var counter = context.Counter("Counter", Unit.None, MetricTags.None);

            counter.Increment(1);

            var counterSubItems = context.Counter("CounterSubItems", Unit.None, MetricTags.None);

            counterSubItems.Increment("Item1", 2);
            counterSubItems.Increment("Item2", 3);

            string renderedMetrics = RenderTestMetrics(context, config);
            string expectedMetrics = FormatPrometheusText(@"# TYPE Counter gauge
counter 1 0

# TYPE CounterSubItems gauge
countersubitems 5 0

");

            Assert.AreEqual(expectedMetrics, renderedMetrics);
        }
Ejemplo n.º 3
0
        public void MeterSetItemsDisabledTest()
        {
            var context = new DefaultMetricsContext();
            var config  = new PrometheusReportConfig
            {
                OutputSetItems = false
            };

            var meter = context.Meter("Meter", Unit.None, TimeUnit.Seconds, MetricTags.None);

            meter.Mark(1);

            var meterSubItems = context.Meter("MeterSubItems", Unit.None, TimeUnit.Seconds, MetricTags.None);

            meterSubItems.Mark("Item1", 2);
            meterSubItems.Mark("Item2", 3);

            string renderedMetrics = RenderTestMetrics(context, config);
            string expectedMetrics = FormatPrometheusText(@"# TYPE Meter gauge
meter 1 0

# TYPE MeterSubItems gauge
metersubitems 5 0

");

            Assert.Equal(expectedMetrics, renderedMetrics);
        }
        public void HistorgramTest()
        {
            var context = new DefaultMetricsContext();
            var config  = new PrometheusReportConfig
            {
                OutputSetItems = true
            };

            var histogram = context.Histogram("Historgram", Unit.None, SamplingType.Default, MetricTags.None);

            histogram.Update(1);

            var histogramUserValue = context.Histogram("HistorgramSubItems", Unit.None, SamplingType.Default, MetricTags.None);

            histogramUserValue.Update(2, "UserValue1");
            histogramUserValue.Update(3, "UserValue2");

            string renderedMetrics = RenderTestMetrics(context, config);
            string expectedMetrics = FormatPrometheusText(@"# TYPE Historgram gauge
historgram 1 0

# TYPE HistorgramSubItems gauge
historgramsubitems 2 0

");

            Assert.AreEqual(expectedMetrics, renderedMetrics);
        }
        public void InfluxReport_CanAddRecords_ForHealthCheck()
        {
            var config      = new InfluxConfig("localhost", "testdb");
            var writer      = new InfluxdbTestWriter(config); config.Writer = writer;
            var report      = new InfluxdbHttpReport(config);
            var context     = new DefaultMetricsContext("TestContext");
            var precision   = config.Precision ?? InfluxConfig.Default.Precision;
            var metricsData = context.DataProvider.CurrentMetricsData;

            HealthChecks.UnregisterAllHealthChecks();
            HealthChecks.RegisterHealthCheck("Health Check 1", () => HealthCheckResult.Healthy($"Healthy check!"));
            HealthChecks.RegisterHealthCheck("Health Check 2", () => HealthCheckResult.Unhealthy($"Unhealthy check!"));
            HealthChecks.RegisterHealthCheck("Health Check 3,tag3=key3", () => HealthCheckResult.Healthy($"Healthy check!"));
            HealthChecks.RegisterHealthCheck("Health Check 4,tag 4=key 4", () => HealthCheckResult.Healthy($"Healthy check!"));
            HealthChecks.RegisterHealthCheck("Name=Health Check 5,tag5=key5", () => HealthCheckResult.Healthy($"Healthy check!"));

            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, () => HealthChecks.GetStatus(), CancellationToken.None);
            HealthChecks.UnregisterAllHealthChecks();             // unreg first in case something below throws
            writer.LastBatch.Should().HaveCount(5);

            var expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);

            writer.LastBatch[0].ToLineProtocol(precision).Should().Be($@"health_checks,name=health_check_1 ishealthy=True,message=""Healthy check!"" {expTime}");
            writer.LastBatch[1].ToLineProtocol(precision).Should().Be($@"health_checks,name=health_check_2 ishealthy=False,message=""Unhealthy check!"" {expTime}");
            writer.LastBatch[2].ToLineProtocol(precision).Should().Be($@"health_checks,name=health_check_3,tag3=key3 ishealthy=True,message=""Healthy check!"" {expTime}");
            writer.LastBatch[3].ToLineProtocol(precision).Should().Be($@"health_checks,name=health_check_4,tag_4=key\ 4 ishealthy=True,message=""Healthy check!"" {expTime}");
            writer.LastBatch[4].ToLineProtocol(precision).Should().Be($@"health_checks,name=health\ check\ 5,tag5=key5 ishealthy=True,message=""Healthy check!"" {expTime}");
        }
        public void InfluxReport_CanAddRecords_ForHistogram()
        {
            var config      = new InfluxConfig("localhost", "testdb");
            var writer      = new InfluxdbTestWriter(config); config.Writer = writer;
            var report      = new InfluxdbHttpReport(config);
            var context     = new DefaultMetricsContext("TestContext");
            var precision   = config.Precision ?? InfluxConfig.Default.Precision;
            var metricsData = context.DataProvider.CurrentMetricsData;
            var hist        = context.Histogram("test_hist", Unit.Bytes, SamplingType.Default, new MetricTags("key1=value1,tag2,tag3,key4=value4"));

            // add normally
            hist.Update(300);
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(1);

            var expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);

            writer.LastBatch[0].ToLineProtocol(precision).Should().Be($@"testcontext.test_hist,key1=value1,key4=value4 count=1i,last=300,min=300,mean=300,max=300,stddev=0,median=300,sample_size=1i,percentile_75%=300,percentile_95%=300,percentile_98%=300,percentile_99%=300,percentile_99.9%=300 {expTime}");

            // add with set item
            hist.Update(100, "item1,item2=ival2,item3=ival3");
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(1);

            expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);
            writer.LastBatch[0].ToLineProtocol(precision).Should().Be($@"testcontext.test_hist,key1=value1,key4=value4 count=2i,last=100,min=100,mean=200,max=300,stddev=100,median=300,sample_size=2i,percentile_75%=300,percentile_95%=300,percentile_98%=300,percentile_99%=300,percentile_99.9%=300 {expTime}");
        }
        public void InfluxReport_CanAddRecords_ForTimer()
        {
            var config      = new InfluxConfig("localhost", "testdb");
            var writer      = new InfluxdbTestWriter(config); config.Writer = writer;
            var report      = new InfluxdbHttpReport(config);
            var context     = new DefaultMetricsContext("TestContext");
            var precision   = config.Precision ?? InfluxConfig.Default.Precision;
            var metricsData = context.DataProvider.CurrentMetricsData;
            var timer       = context.Timer("test_timer", Unit.Bytes, SamplingType.Default, TimeUnit.Seconds, TimeUnit.Seconds, new MetricTags("key1=value1,tag2,tag3,key4=value4"));

            // add normally
            timer.Record(100, TimeUnit.Seconds);
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(1);

            var expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);

            writer.LastBatch[0].ToLineProtocol(precision).Should().StartWith($@"testcontext.test_timer,key1=value1,key4=value4 active_sessions=0i,total_time=100i,count=1i,").And.EndWith($@",1_min_rate=0,5_min_rate=0,15_min_rate=0,last=100,min=100,mean=100,max=100,stddev=0,median=100,sample_size=1i,percentile_75%=100,percentile_95%=100,percentile_98%=100,percentile_99%=100,percentile_99.9%=100 {expTime}");

            // add with set item
            timer.Record(50, TimeUnit.Seconds, "item1,item2=ival2,item3=ival3");
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(1);

            expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);
            writer.LastBatch[0].ToLineProtocol(precision).Should().StartWith($@"testcontext.test_timer,key1=value1,key4=value4 active_sessions=0i,total_time=150i,count=2i,").And.EndWith($@",1_min_rate=0,5_min_rate=0,15_min_rate=0,last=50,min=50,mean=75,max=100,stddev=25,median=100,sample_size=2i,percentile_75%=100,percentile_95%=100,percentile_98%=100,percentile_99%=100,percentile_99.9%=100 {expTime}");
        }
        public void InfluxReport_CanAddRecords_ForMeter()
        {
            var config      = new InfluxConfig("localhost", "testdb");
            var writer      = new InfluxdbTestWriter(config); config.Writer = writer;
            var report      = new InfluxdbHttpReport(config);
            var context     = new DefaultMetricsContext("TestContext");
            var precision   = config.Precision ?? InfluxConfig.Default.Precision;
            var metricsData = context.DataProvider.CurrentMetricsData;
            var meter       = context.Meter("test_meter", Unit.Bytes, TimeUnit.Seconds, new MetricTags("key1=value1,tag2,tag3,key4=value4"));

            // add normally
            meter.Mark(300);
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(1);

            var expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);

            writer.LastBatch[0].ToLineProtocol(precision).Should().StartWith($@"testcontext.test_meter,key1=value1,key4=value4 count=300i,mean_rate=").And.EndWith($@",1_min_rate=0,5_min_rate=0,15_min_rate=0 {expTime}");;

            // add with set item
            meter.Mark("item1,item2=ival2,item3=ival3", 100);
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(2);

            expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);
            writer.LastBatch[0].ToLineProtocol(precision).Should().StartWith($@"testcontext.test_meter,key1=value1,key4=value4 count=400i,mean_rate=").And.EndWith($@",1_min_rate=0,5_min_rate=0,15_min_rate=0 {expTime}");
            writer.LastBatch[1].ToLineProtocol(precision).Should().StartWith($@"testcontext.test_meter,item2=ival2,item3=ival3,key1=value1,key4=value4 count=100i,percent=25,mean_rate=").And.EndWith($@",1_min_rate=0,5_min_rate=0,15_min_rate=0 {expTime}");
        }
Ejemplo n.º 9
0
        public void Send_EnsureWebExceptionTriggersErrorHandler()
        {
            var context = new DefaultMetricsContext();

            var requestor = new GenericFakeRequestorFactory <FakeWebExceptionRequestor>();
            var sender    = new SignalFxReporter("http://fake.signalfuse.com", "ABC123", requestor);
            var report    = new SignalFxReport(
                sender,
                "",
                "FakeApiKey",
                new Dictionary <string, string> {
                { "System", "UnitTests" }
            }, 10000, new HashSet <MetricDetails> {
                MetricDetails.count
            });

            int errorCount = 0;

            new MetricsConfig(context).WithErrorHandler((exc, msg) => errorCount++, true);

            var tags = new MetricTags("test\\=string=test\\value");

            var timer = context.Timer("TestTimer", Unit.Calls, SamplingType.ExponentiallyDecaying, TimeUnit.Microseconds, TimeUnit.Microseconds, tags);

            timer.Record(10053, TimeUnit.Microseconds);

            var source = new CancellationTokenSource();

            report.RunReport(context.DataProvider.CurrentMetricsData, () => new HealthStatus(), source.Token);

            Assert.True(errorCount >= 1);
        }
        public void MeterWithTagsTest()
        {
            var context = new DefaultMetricsContext();
            var config  = new PrometheusReportConfig
            {
                OutputSetItems = true
            };

            var meter = context.Meter("Meter", Unit.None, TimeUnit.Seconds, new[] { "tag0", "tag1" });

            meter.Mark(1);

            var meterSubItems = context.Meter("MeterSubItems", Unit.None, TimeUnit.Seconds, new[] { "tag0", "tag1" });

            meterSubItems.Mark("Item1", 2);
            meterSubItems.Mark("Item2", 3);

            string renderedMetrics = RenderTestMetrics(context, config);
            string expectedMetrics = FormatPrometheusText(@"# TYPE Meter gauge
meter{tag0=""tag0"",tag1=""tag1""} 1 0

# TYPE MeterSubItems gauge
metersubitems{item=""Item1"",tag0=""tag0"",tag1=""tag1""} 2 0
metersubitems{item=""Item2"",tag0=""tag0"",tag1=""tag1""} 3 0

");

            Assert.AreEqual(expectedMetrics, renderedMetrics);
        }
        static async Task <IRawEndpointInstance> StartMonitor()
        {
            var queueMonitorContext = new DefaultMetricsContext("QueueLengthMonitor");

            new MetricsConfig(queueMonitorContext)
            .WithHttpEndpoint("http://localhost:7777/QueueLengthMonitor/")
            .WithReporting(r =>
            {
                r.WithReport(
                    new PerformanceCounterReporter(x => new CounterInstanceName("Queue Length", x.MetricName)),
                    TimeSpan.FromSeconds(5), Filter.New.WhereContext(c => c == "QueueLengthMonitor" || c == "QueueState"));
            });

            var monitor = new Monitor(queueMonitorContext, new QueueLength());
            var config  = RawEndpointConfiguration.Create("QueueLengthMonitor", monitor.OnMessage);

            config.LimitMessageProcessingConcurrencyTo(1);
            config.UseTransport <MsmqTransport>();
            //config.UseTransport<RabbitMQTransport>().ConnectionString("host=localhost");
            config.SendFailedMessagesTo("error");

            var endpoint = await RawEndpoint.Start(config);

            return(endpoint);
        }
Ejemplo n.º 12
0
        public void WithPrometheusEndpointReportPathEncodingTest()
        {
            var context         = new DefaultMetricsContext();
            var endpointReports = new MetricsEndpointReports(context.DataProvider, () => new HealthStatus());
            var reports         = endpointReports.WithPrometheusEndpointReport("test/prometheus", new UTF8Encoding(false));

            Assert.AreEqual(endpointReports, reports);
        }
Ejemplo n.º 13
0
        public void WithPrometheusEndpointReportTest()
        {
            var context         = new DefaultMetricsContext();
            var endpointReports = new MetricsEndpointReports(context.DataProvider, () => new HealthStatus());
            var reports         = endpointReports.WithPrometheusEndpointReport();

            Assert.AreEqual(endpointReports, reports);
        }
Ejemplo n.º 14
0
        public void WithPrometheusEndpointReportPathConfigTest()
        {
            var context         = new DefaultMetricsContext();
            var endpointReports = new MetricsEndpointReports(context.DataProvider, () => new HealthStatus());
            var config          = new PrometheusReportConfig
            {
                OutputSetItems = true
            };
            var reports = endpointReports.WithPrometheusEndpointReport(path: "test/prometheus", reportConfig: config);

            Assert.AreEqual(endpointReports, reports);
        }
        private static string RenderTestMetrics(DefaultMetricsContext ctx, PrometheusReportConfig config)
        {
            var originalData = ctx.DataProvider.CurrentMetricsData;
            var testData     = new MetricsData(
                originalData.Context,
                Epoch,
                originalData.Environment,
                originalData.Gauges,
                originalData.Counters,
                originalData.Meters,
                originalData.Histograms,
                originalData.Timers,
                originalData.ChildMetrics);

            return(PrometheusReport.RenderMetrics(testData, () => new HealthStatus(), config));
        }
        public void GaugeTest()
        {
            var context = new DefaultMetricsContext();
            var config  = new PrometheusReportConfig
            {
                OutputSetItems = true
            };

            context.Gauge("Gauge", () => 1, Unit.None, MetricTags.None);

            string renderedMetrics = RenderTestMetrics(context, config);
            string expectedMetrics = FormatPrometheusText(@"# TYPE Gauge gauge
gauge 1 0

");

            Assert.AreEqual(expectedMetrics, renderedMetrics);
        }
        public void TimerTest()
        {
            var context = new DefaultMetricsContext();
            var config  = new PrometheusReportConfig
            {
                OutputSetItems = true
            };

            var timer = context.Timer("Timer", Unit.None, SamplingType.Default, TimeUnit.Seconds, TimeUnit.Seconds, MetricTags.None);

            timer.Record(1, TimeUnit.Seconds);

            var timerUserValue = context.Timer("TimerSubItems", Unit.None, SamplingType.Default, TimeUnit.Seconds, TimeUnit.Seconds, MetricTags.None);

            timerUserValue.Record(2, TimeUnit.Seconds, "UserValue1");
            timerUserValue.Record(3, TimeUnit.Seconds, "UserValue2");

            string renderedMetrics = RenderTestMetrics(context, config);
            string expectedMetrics = FormatPrometheusText(@"# HELP timer A summary of the timer duration in millisecond 
# TYPE timer summary
timer{quantile=""0.75"",} 1
timer{quantile=""0.95"",} 1
timer{quantile=""0.98"",} 1
timer{quantile=""0.99"",} 1
timer{quantile=""0.999"",} 1
timer_median 1
timer_sum 1
timer_count 1

# HELP timersubitems A summary of the timersubitems duration in millisecond 
# TYPE timersubitems summary
timersubitems{quantile=""0.75"",} 3
timersubitems{quantile=""0.95"",} 3
timersubitems{quantile=""0.98"",} 3
timersubitems{quantile=""0.99"",} 3
timersubitems{quantile=""0.999"",} 3
timersubitems_median 3
timersubitems_sum 5
timersubitems_count 2

");

            Assert.AreEqual(expectedMetrics, renderedMetrics);
        }
        public void AddMetrics_EnsureLimitIsRespected()
        {
            var context = new DefaultMetricsContext();
            var sender  = new FakeSignalFxReporter();
            var report  = new SignalFxReport(
                sender,
                "",
                "FakeApiKey",
                new Dictionary <string, string> {
                { "System", "UnitTests" }
            }, 50, new HashSet <MetricDetails> {
                MetricDetails.count
            });

            var accountNoRandom = new Random();
            //
            var accountId      = new byte[16];
            var generatedHases = new HashSet <string>();

            while (generatedHases.Count < 51)
            {
                accountNoRandom.NextBytes(accountId);
                var accountIdString = accountId.Aggregate(new StringBuilder(), (builder, b) => builder.AppendFormat("{0:x2}", b)).ToString();

                if (generatedHases.Contains(accountIdString))
                {
                    continue;
                }

                generatedHases.Add(accountIdString);
                var counter = context.Counter("TestCounter", Unit.Calls, new MetricTags());
                counter.Increment(accountIdString, accountNoRandom.Next());
            }

            var source = new CancellationTokenSource();

            report.RunReport(context.DataProvider.CurrentMetricsData, () => new HealthStatus(), source.Token);

            Assert.True(sender.Count >= 1);
            var message = sender[0];

            Assert.Equal(50, message.datapoints.Count);
        }
        public void InfluxReport_CanAddRecords_ForGauge()
        {
            var config      = new InfluxConfig("localhost", "testdb");
            var writer      = new InfluxdbTestWriter(config); config.Writer = writer;
            var report      = new InfluxdbHttpReport(config);
            var context     = new DefaultMetricsContext("TestContext");
            var precision   = config.Precision ?? InfluxConfig.Default.Precision;
            var metricsData = context.DataProvider.CurrentMetricsData;

            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().BeEmpty("Because running a report with no metrics should not result in any records.");

            context.Gauge("test_gauge", () => 123.456, Unit.Bytes, new MetricTags("key1=value1,tag2,tag3,key4=value4"));
            metricsData = context.DataProvider.CurrentMetricsData;
            report.RunReport(metricsData, hsFunc, CancellationToken.None);
            writer.LastBatch.Should().HaveCount(1);

            var expTime = InfluxLineProtocol.FormatTimestamp(metricsData.Timestamp, precision);

            writer.LastBatch[0].ToLineProtocol(precision).Should().Be($@"testcontext.test_gauge,key1=value1,key4=value4 value=123.456 {expTime}");
        }
Ejemplo n.º 20
0
        protected override void Setup(FeatureConfigurationContext context)
        {
            var metricsContext = new DefaultMetricsContext();
            var metricsConfig  = new MetricsConfig(metricsContext);

            metricsConfig.WithReporting(r =>
            {
                r.WithCSVReports(".", TimeSpan.FromSeconds(5));
            });

            var processedMeter = metricsContext.Meter("Processed", Unit.Custom("audits"), TimeUnit.Seconds, default);

            var settings         = context.Settings.Get <Settings>("ServiceControl.Settings");
            var loadGenetorQueue = SettingsReader <string> .Read("LoadGeneratorQueue");

            var auditQueueAddress = context.Settings.ToTransportAddress(settings.AuditQueue);
            var statistics        = new Statistics();

            context.Container.ConfigureComponent(b => new StatisticsEnricher(statistics, processedMeter), DependencyLifecycle.SingleInstance);
            context.RegisterStartupTask(new ReportProcessingStatistics(statistics, auditQueueAddress, loadGenetorQueue));
        }
Ejemplo n.º 21
0
        public void Send_EnsureMetricsGetReported()
        {
            var context = new DefaultMetricsContext();

            var requestor = new FakeRequestorFactory();
            var sender    = new SignalFxReporter("http://fake.signalfuse.com", "ABC123", requestor);
            var report    = new SignalFxReport(
                sender,
                "",
                "FakeApiKey",
                new Dictionary <string, string> {
                { "System", "UnitTests" }
            }, 10000, new HashSet <MetricDetails> {
                MetricDetails.mean
            });

            var tags = new MetricTags("test\\=string=test\\value");

            var timer = context.Timer("TestTimer", Unit.Calls, SamplingType.ExponentiallyDecaying, TimeUnit.Microseconds, TimeUnit.Microseconds, tags);

            timer.Record(10053, TimeUnit.Microseconds);

            var source = new CancellationTokenSource();

            report.RunReport(context.DataProvider.CurrentMetricsData, () => new HealthStatus(), source.Token);

            var reportedBytes = requestor.WrittenData;

            Assert.True(reportedBytes.Length > 0);

            var message = Serializer.Deserialize <DataPointUploadMessage>(new MemoryStream(reportedBytes));

            var dp = message.datapoints.FirstOrDefault(datapoint => datapoint.dimensions.Any(dimension => dimension.key == "test=string"));

            Assert.NotNull(dp);

            var dm = dp.dimensions.FirstOrDefault(dimension => dimension.key == "test=string");

            Assert.Equal("testvalue", dm.value);
        }
Ejemplo n.º 22
0
        private static MetricsConfig CreateConfig()
        {
            var context = new DefaultMetricsContext("http-listener-tests");

            return(new MetricsConfig(context));
        }
        public void AddMetrics_AllMetricsGetReported()
        {
            var context = new DefaultMetricsContext();
            var sender  = new FakeSignalFxReporter();
            var report  = new SignalFxReport(
                sender,
                "",
                "FakeApiKey",
                new Dictionary <string, string> {
                { "System", "UnitTests" }
            }, 10000, null);

            var tags = new MetricTags("test=value");

            var totalExpectedMetrics = 0;
            var timer = context.Timer("TestTimer", Unit.Calls, SamplingType.ExponentiallyDecaying, TimeUnit.Microseconds, TimeUnit.Microseconds, tags);

            timer.Record(10053, TimeUnit.Microseconds);

            // A single Timer produces 17 metrics
            //   Count
            //   Active_Sessions
            //   Rate-Mean-Calls-per-us
            //   Rate-1-min-Calls-per-us
            //   Rate-5-min-Calls-per-us
            //   Rate-15-min-Calls-per-us
            //   Duration-Last-us
            //   Duration-Min-us
            //   Duration-Mean-us
            //   Duration-Max-us
            //   Duration-StdDev-us
            //   Duration-p75-us
            //   Duration-p95-us
            //   Duration-p95-us
            //   Duration-p98-us
            //   Duration-p99-us
            //   Duration-p999-us
            totalExpectedMetrics += 17;

            context.Gauge("TestGuage", () => 3.3, Unit.KiloBytes, tags);
            // A gauge is a single metric
            totalExpectedMetrics += 1;

            var counter = context.Counter("TestCounter", Unit.KiloBytes, tags);

            counter.Increment("SetA", 2);
            counter.Increment("SetB", 5);

            // We're setting two sub counters within counter
            // plus there is a "Total" counter
            // and for each of the two, there is a total and a percentage
            totalExpectedMetrics += 5;

            var histogram = context.Histogram("TestHistogram", Unit.Events, SamplingType.ExponentiallyDecaying, tags);

            histogram.Update(23, "ABC");
            histogram.Update(14, "DEF");

            // Histogram of events produces 12 metrics:
            //   Count-Events
            //   Last-Events
            //   Min-Events
            //   Mean-Events
            //   Max-Events
            //   StdDev-Events
            //   p75-Events
            //   p95-Events
            //   p95-Events
            //   p98-Events
            //   p99-Events
            //   p999-Events
            totalExpectedMetrics += 12;

            var meter = context.Meter("TestMeter", Unit.MegaBytes, TimeUnit.Seconds, tags);

            meter.Mark("A", 12);
            meter.Mark("B", 190);

            // Meters result in the following 5 metrics for MB
            //   Total-Mb
            //   Rate-Mean-Mb
            //   Rate-1-min-Mb
            //   Rate-5-min-Mb
            //   Rate-15-min-Mb
            //
            //   And then for each item that is marked, there's a set of these 6
            //   Percent-Mb
            //   Count-Mb
            //   Rate-Mean-Mb-per-s
            //   Rate-1-min-Mb-per-s
            //   Rate-5-min-Mb-per-s
            //   Rate-15-min-Mb-per-s
            totalExpectedMetrics += 17;

            // so our total metrics now is 52
            var source = new CancellationTokenSource();

            report.RunReport(context.DataProvider.CurrentMetricsData, () => new HealthStatus(), source.Token);

            Assert.Equal(1, sender.Count);
            var message = sender[0];

            Assert.Equal(totalExpectedMetrics, message.datapoints.Count);
        }