public static IApplicationBuilder UsePrometheusRequestDurations(this IApplicationBuilder app, Action <HttpRequestDurationsOptions> setupAction) { var options = new HttpRequestDurationsOptions(); setupAction?.Invoke(options); return(app.UseMiddleware <HttpRequestDurationsMiddleware>(options)); }
public HttpRequestDurationsMiddleware(RequestDelegate next, HttpRequestDurationsOptions options) { _next = next; _options = options; var labels = new List <string>(); if (_options.IncludeStatusCode) { labels.Add("status_code"); } if (_options.IncludeMethod) { labels.Add("method"); } if (_options.IncludePath) { labels.Add("path"); } _metricHelpText += string.Join(", ", labels); _histogram = _options.CollectorRegistry == null ? Metrics.CreateHistogram(options.MetricName, _metricHelpText, labels.ToArray()) : Metrics.WithCustomRegistry(options.CollectorRegistry).CreateHistogram(options.MetricName, _metricHelpText, labels.ToArray()); }
/// <summary> /// Metrics logging of request durations /// </summary> /// <param name="app">IApplicationBuilder</param> /// <param name="setupOptions">Setup Options</param> public static IApplicationBuilder UsePrometheusRequestDurations(this IApplicationBuilder app, Action <HttpRequestDurationsOptions> setupOptions) { var options = new HttpRequestDurationsOptions(); setupOptions?.Invoke(options); options.CollectorRegistry ??= (ICollectorRegistry)app.ApplicationServices.GetService(typeof(ICollectorRegistry)) ?? Metrics.DefaultCollectorRegistry; return(app.UseMiddleware <HttpRequestDurationsMiddleware>(options)); }
public HttpRequestDurationsMiddleware(RequestDelegate next, HttpRequestDurationsOptions options) { _next = next; _options = options; var metricFactory = new MetricFactory(options.CollectorRegistry); var labels = new List <string>(); if (_options.IncludeStatusCode) { labels.Add("status_code"); } if (_options.IncludeMethod) { labels.Add("method"); } #if HasRoutes if (_options.IncludeController) { labels.Add("controller"); } if (_options.IncludeAction) { labels.Add("action"); } #endif if (_options.IncludePath) { labels.Add("path"); } if (_options.IncludeCustomLabels) { labels.AddRange(_options.CustomLabels.Select(customLabel => customLabel.Key)); } _metricHelpText += string.Join(", ", labels); _histogram = metricFactory.CreateHistogram(options.MetricName, _metricHelpText, options.IncludeTimestamp, options.Buckets, labels.ToArray()); }