public async Task LinearHistogram_metrics_are_exposed_correctly()
        {
            var metrics = new PrometheusMetrics();

            var histogram = metrics.Histogram()
                            .LinearBuckets(-10, 10, 12)
                            .Name("test_histogram")
                            .Help("This is the help")
                            .Register();

            histogram.Observe(21);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"-10\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"0\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"10\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"20\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"30\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"40\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"50\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"60\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"70\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"80\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"90\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"100\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"+Inf\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum 21"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count 1"));

            histogram.Observe(51);

            memstream = new MemoryStream();
            await metrics.Expose(memstream);

            lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"-10\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"0\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"10\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"20\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"30\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"40\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"50\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"60\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"70\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"80\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"90\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"100\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"+Inf\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum 72"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count 2"));
        }
        public async Task ExponentialHistogram_metrics_are_exposed_correctly()
        {
            var metrics = new PrometheusMetrics();

            var histogram = metrics.Histogram()
                            .ExponentialBuckets(1, 2, 8)
                            .Name("test_histogram")
                            .Help("This is the help")
                            .Register();

            histogram.Observe(21);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"1\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"2\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"4\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"8\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"16\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"32\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"64\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"128\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"+Inf\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum 21"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count 1"));

            histogram.Observe(51);

            memstream = new MemoryStream();
            await metrics.Expose(memstream);

            lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"1\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"2\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"4\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"8\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"16\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"32\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"64\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"128\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"+Inf\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum 72"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count 2"));
        }
        public async Task LabelledHistogram_metrics_are_exposed_correctly_in_cultures_with_non_point_decimal_separator()
        {
            var metrics = new PrometheusMetrics();

            var histogram = metrics.Histogram()
                            .Name("test_histogram")
                            .Buckets(-1.1, 2.2, 3.14159, 9)
                            .LabelNames("dolor")
                            .Help("Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam")
                            .Register();

            histogram.Labels("sit amet").Observe(-0.3);
            histogram.Labels("sit amet").Observe(2.99);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{dolor=\"sit amet\", le=\"-1.1\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{dolor=\"sit amet\", le=\"2.2\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{dolor=\"sit amet\", le=\"3.14159\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{dolor=\"sit amet\", le=\"9\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{dolor=\"sit amet\", le=\"+Inf\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum{dolor=\"sit amet\"} 2.69"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count{dolor=\"sit amet\"} 2"));
        }
        public async Task Histogram_metrics_are_exposed_correctly_in_cultures_with_non_point_decimal_separator()
        {
            var metrics = new PrometheusMetrics();

            var histogram = metrics.Histogram()
                            .Name("test_histogram")
                            .Buckets(-1.1, 2.2, 3.14159, 9)
                            .Help("Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit")
                            .Register();

            histogram.Observe(-0.3);
            histogram.Observe(2.99);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"-1.1\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"2.2\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"3.14159\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"9\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{le=\"+Inf\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum 2.69"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count 2"));
        }
Beispiel #5
0
        public async Task LabelledGauge_replacevalue_replaces_obsoleted_values_and_new_values_are_exposed_correctly()
        {
            var metrics = new PrometheusMetrics();

            var gauge = metrics.Gauge()
                        .Name("test_gauge_total")
                        .Help("This is the help")
                        .LabelNames("method")
                        .Register();

            gauge.Labels("GET").Value  = 974;
            gauge.Labels("POST").Value = 823;

            gauge.ReplaceMetricValues(new Dictionary <string[], double>()
            {
                { new[] { "POST" }, 151 },
                { new[] { "HEAD" }, 673 },
            });

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_gauge_total This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_gauge_total gauge"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_gauge_total{method=\"POST\"} 151 [0-9]+")));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_gauge_total{method=\"HEAD\"} 673 [0-9]+")));

            Assert.Equal(0, lines.Count(s => Regex.IsMatch(s, "test_gauge_total{method=\"GET\"} 974 [0-9]+")));
        }
        public async Task Gauge_metrics_are_exposed_correctly()
        {
            var metrics = new PrometheusMetrics();

            var gauge = metrics.Gauge()
                        .Name("test_gauge_total")
                        .Help("This is the help")
                        .Register();

            gauge.Value = 9374;

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_gauge_total This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_gauge_total gauge"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_gauge_total 9374 [0-9]+")));
        }
        public async Task Counter_metrics_are_exposed_correctly_when_requested_without_timestamp()
        {
            var metrics = new PrometheusMetrics();

            var counter = metrics.Counter()
                          .Name("test_counter_total")
                          .Help("This is the help")
                          .Register();

            counter.Increment();

            var memstream = new MemoryStream();
            await metrics.Expose(memstream, ExposeOptions.NoTimestamp);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_counter_total This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_counter_total counter"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_counter_total 1")));
        }
        public async Task Gauge_metrics_are_exposed_correctly_in_cultures_with_non_point_decimal_separator()
        {
            var metrics = new PrometheusMetrics();

            var gauge = metrics.Gauge()
                        .Name("test_gauge_total")
                        .Help("Duis aute irure dolor in reprehenderit in voluptate velit esse")
                        .Register();

            gauge.Value = 3.14159;

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_gauge_total Duis aute irure dolor in reprehenderit in voluptate velit esse"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_gauge_total gauge"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_gauge_total 3.14159 [0-9]+")));
        }
        public async Task Counter_metrics_are_exposed_correctly_in_cultures_with_non_point_decimal_separator()
        {
            var metrics = new PrometheusMetrics();

            var counter = metrics.Counter()
                          .Name("test_counter_total")
                          .Help("Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur")
                          .Register();

            counter.Increment(3.14159);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_counter_total Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_counter_total counter"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_counter_total 3.14159 [0-9]+")));
        }
        public async Task LabelledGauge_metrics_are_exposed_correctly_in_cultures_with_non_point_decimal_separator()
        {
            var metrics = new PrometheusMetrics();

            var gauge = metrics.Gauge()
                        .Name("test_labelled_gauge_total")
                        .LabelNames("lorem")
                        .Help("Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium")
                        .Register();

            gauge.Labels("ipsum").Value = 2.71828;

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_labelled_gauge_total Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_labelled_gauge_total gauge"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_labelled_gauge_total{lorem=\"ipsum\"} 2.71828 [0-9]+")));
        }
        public async Task LabelledCounter_metrics_are_exposed_correctly_in_cultures_with_non_point_decimal_separator()
        {
            var metrics = new PrometheusMetrics();

            var counter = metrics.Counter()
                          .Name("test_labelled_counter_total")
                          .LabelNames("consectetur")
                          .Help("Öt szép szűzlány őrült írót nyúz, avagy kínaiul: 五美麗的處女瘋狂作家去皮")
                          .Register();

            counter.Labels("adipiscing").Increment(2.71828);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_labelled_counter_total Öt szép szűzlány őrült írót nyúz, avagy kínaiul: 五美麗的處女瘋狂作家去皮"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_labelled_counter_total counter"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_labelled_counter_total{consectetur=\"adipiscing\"} 2.71828 [0-9]+")));
        }
        public async Task LabelledCounter_metrics_are_exposed_correctly()
        {
            var metrics = new PrometheusMetrics();

            var counter = metrics.Counter()
                          .Name("test_counter_total")
                          .Help("This is the help")
                          .LabelNames("method")
                          .Register();

            counter.Labels("GET").Increment();
            counter.Labels("POST").Increment();
            counter.Labels("POST").Increment();

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_counter_total This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_counter_total counter"));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_counter_total{method=\"GET\"} 1 [0-9]+")));
            Assert.Equal(1, lines.Count(s => Regex.IsMatch(s, "test_counter_total{method=\"POST\"} 2 [0-9]+")));
        }
        public async Task LabelledCustomHistogram_metrics_are_exposed_correctly()
        {
            var metrics = new PrometheusMetrics();

            var histogram = metrics.Histogram()
                            .Buckets(2, 3, 4, 12, 31, 243)
                            .Name("test_histogram")
                            .Help("This is the help")
                            .LabelNames("method")
                            .Register();

            histogram.Labels("GET").Observe(11);
            histogram.Labels("POST").Observe(21);

            var memstream = new MemoryStream();
            await metrics.Expose(memstream);

            var lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"3\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"4\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"12\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"31\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"243\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"+Inf\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum{method=\"GET\"} 11"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count{method=\"GET\"} 1"));

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"3\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"4\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"12\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"31\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"243\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"+Inf\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum{method=\"POST\"} 21"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count{method=\"POST\"} 1"));

            histogram.Labels("GET").Observe(51);
            histogram.Labels("POST").Observe(61);

            memstream = new MemoryStream();
            await metrics.Expose(memstream);

            lines = UTF8.GetString(memstream.ToArray()).Split('\n');

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"3\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"4\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"12\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"31\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"243\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"GET\", le=\"+Inf\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum{method=\"GET\"} 62"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count{method=\"GET\"} 2"));

            Assert.Equal(1, lines.Count(s => s == "# HELP test_histogram This is the help"));
            Assert.Equal(1, lines.Count(s => s == "# TYPE test_histogram histogram"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"3\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"4\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"12\"} 0"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"31\"} 1"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"243\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_bucket{method=\"POST\", le=\"+Inf\"} 2"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_sum{method=\"POST\"} 82"));
            Assert.Equal(1, lines.Count(s => s == "test_histogram_count{method=\"POST\"} 2"));
        }