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