コード例 #1
0
        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"));
        }
コード例 #2
0
        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"));
        }
コード例 #3
0
        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"));
        }
コード例 #4
0
        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"));
        }
コード例 #5
0
        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"));
        }
コード例 #6
0
        public static void Main(string[] args)
        {
            IMetrics metrics = new PrometheusMetrics();

            var planningTime = metrics.Gauge()
                               .Name("planning_time").Help("The processing time in seconds").LabelNames("solver").Register();

            var planningCount = metrics.Counter()
                                .Name("planning_count").Help("The count of planning").LabelNames("solver").Register();

            var totalPlanningCount = metrics.Counter()
                                     .Name("plannning_count_total").Help("Total count of plannings").Register();

            var totalRunning = metrics.Gauge()
                               .Name("plannning_running_total").Help("Currently running plannings").Register();

            var planningStartTime = metrics.Gauge()
                                    .Name("planning_start_time").Help("Start time of last planning").Register();

            var planningTimeHistogram = metrics.Histogram()
                                        .LinearBuckets(0, 300, 10)
                                        .Name("planning_duration_times")
                                        .Help("Duration of plannings in ms")
                                        .Register();

            var planningTimeHistogramForSolver = metrics.Histogram()
                                                 .LinearBuckets(0, 300, 10)
                                                 .Name("planning_duration_times_for_solver")
                                                 .Help("Duration of plannings in ms for different solvers")
                                                 .LabelNames("solver")
                                                 .Register();


            var pgw = new PushGateway(
                new Uri("http://127.0.0.1:9091"),
                "example_app",
                new List <Tuple <string, string> > {
                Tuple.Create("environment", "test")
            }
                );

            Task.Run(async() =>
            {
                var pm     = metrics as PrometheusMetrics;
                var output = Console.OpenStandardOutput();

                for (;;)
                {
                    Console.WriteLine("# Waiting");
                    await Task.Delay(TimeSpan.FromSeconds(10));
                    Console.WriteLine("# Exposing");
                    await pm.Expose(output);
                    Console.WriteLine("# Done");

                    try
                    {
                        await pgw.PushAsync(pm, "example_app:9000");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            });

            foreach (var solver in new[] { "Static", "Dynamic" })
            {
                Task.Run(() =>
                {
                    var rnd = new Random(solver.GetHashCode());

                    for (;;)
                    {
                        using (planningTime.Labels(solver).Timer())
                        {
                            totalPlanningCount.Increment();
                            planningCount.Labels(solver).Increment();

                            planningStartTime.SetToCurrentTime();

                            totalRunning.TrackInProgress(() =>
                            {
                                var planningSleep = rnd.Next(5000);
                                Thread.Sleep(planningSleep);
                                planningTimeHistogram.Observe(planningSleep);
                                planningTimeHistogramForSolver.Labels(solver).Observe(planningSleep);
                            });
                        }
                    }
                });
            }

            Console.ReadLine();
        }