예제 #1
0
        public void Can_update()
        {
            var metricName = "test_update_histogram";
            var options    = new BucketHistogramOptions {
                Name = metricName
            };

            _manager.Update(options, 2L);

            _fixture.Snapshot.GetBucketHistogramValue(_context, metricName).Sum.Should().Be(2L);
            _fixture.Snapshot.GetBucketHistogramValue(_context, metricName).Count.Should().Be(1L);
        }
예제 #2
0
        static MeasureBucketHistogramBenchmark()
        {
            Metrics = new BucketHistogramOptions[NumberOfMetrics];

            for (var i = 0; i < NumberOfMetrics; i++)
            {
                Metrics[i] = new BucketHistogramOptions
                {
                    Name    = $"metric_{i:D4}",
                    Buckets = new[] { .005, .01, .025, .05, .075, .1, .25, .5, .75, 1, 2.5, 5, 7.5, 10 }
                }
            }
            ;
        }
예제 #3
0
        /// <inheritdoc />
        public IBucketHistogram BucketHistogram <T>(BucketHistogramOptions options, MetricTags tags, Func <T> builder)
            where T : IBucketHistogramMetric
        {
            if (_nullMetricsRegistry.IsValueCreated)
            {
                return(_nullMetricsRegistry.Value.BucketHistogram(options, tags, builder));
            }

            EnsureContextLabel(options);

            var contextRegistry = _contexts.GetOrAdd(options.Context, _newContextRegistry);

            return(contextRegistry.BucketHistogram(options, tags, builder));
        }
예제 #4
0
        public void Can_update_multidimensional()
        {
            var metricName = "test_update_histogram_multi";
            var options    = new BucketHistogramOptions {
                Name = metricName
            };

            _manager.Update(options, _fixture.Tags[0], 2L);
            _manager.Update(options, _fixture.Tags[1], 4L);

            _fixture.Snapshot.GetBucketHistogramValue(_context, _fixture.Tags[0].AsMetricName(metricName)).Sum.Should().Be(2L);
            _fixture.Snapshot.GetBucketHistogramValue(_context, _fixture.Tags[0].AsMetricName(metricName)).Count.Should().Be(1L);
            _fixture.Snapshot.GetBucketHistogramValue(_context, _fixture.Tags[1].AsMetricName(metricName)).Sum.Should().Be(4L);
            _fixture.Snapshot.GetBucketHistogramValue(_context, _fixture.Tags[1].AsMetricName(metricName)).Count.Should().Be(1L);
        }
 public PostAndPutRequestSizeHistogramMiddleware(
     RequestDelegate next,
     IOptions <MetricsWebTrackingOptions> trackingMiddlwareOptionsAccessor,
     ILogger <PostAndPutRequestSizeHistogramMiddleware> logger,
     IMetrics metrics)
 {
     _next    = next ?? throw new ArgumentNullException(nameof(next));
     _logger  = logger;
     _metrics = metrics;
     if (trackingMiddlwareOptionsAccessor.Value.UseBucketHistograms)
     {
         _useBucketHistograms            = true;
         _postSizeBucketHistogramOptions = HttpRequestMetricsRegistry.BucketHistograms.PostRequestSizeHistogram(trackingMiddlwareOptionsAccessor.Value.RequestSizeHistogramBuckets);
         _putSizeBucketHistogramOptions  = HttpRequestMetricsRegistry.BucketHistograms.PutRequestSizeHistogram(trackingMiddlwareOptionsAccessor.Value.RequestSizeHistogramBuckets);
     }
 }
예제 #6
0
 public OAuthTrackingMiddleware(
     RequestDelegate next,
     IOptions <MetricsWebTrackingOptions> trackingMiddlwareOptionsAccessor,
     ILogger <OAuthTrackingMiddleware> logger,
     IMetrics metrics)
 {
     _next    = next;
     _logger  = logger;
     _metrics = metrics;
     _ignoredHttpStatusCodes = trackingMiddlwareOptionsAccessor.Value.IgnoredHttpStatusCodes;
     if (trackingMiddlwareOptionsAccessor.Value.UseBucketHistograms)
     {
         _useBucketHistograms            = true;
         _postSizeBucketHistogramOptions = OAuthRequestMetricsRegistry.BucketHistograms.PostRequestSizeHistogram(trackingMiddlwareOptionsAccessor.Value.RequestSizeHistogramBuckets);
         _putSizeBucketHistogramOptions  = OAuthRequestMetricsRegistry.BucketHistograms.PutRequestSizeHistogram(trackingMiddlwareOptionsAccessor.Value.RequestSizeHistogramBuckets);
     }
 }
        /// <inheritdoc />
        public IBucketHistogram BucketHistogram <T>(BucketHistogramOptions options, MetricTags tags, Func <T> builder)
            where T : IBucketHistogramMetric
        {
            var allTags    = AllTags(MetricTags.Concat(options.Tags, tags));
            var metricName = allTags.AsMetricName(options.Name);

            return(_bucketHistograms.GetOrAdd(
                       metricName,
                       () =>
            {
                Logger.Trace("Adding Bucket Histogram {Name} - {@Options} {MesurementUnit} {@Tags}", metricName, options, options.MeasurementUnit.ToString(), allTags.ToDictionary());

                var histogram = builder();
                var valueSource = new BucketHistogramValueSource(
                    metricName,
                    histogram,
                    options.MeasurementUnit,
                    allTags);
                return Tuple.Create((IBucketHistogram)histogram, valueSource);
            }));
        }
예제 #8
0
 public IBucketHistogram BucketHistogram <T>(BucketHistogramOptions options, Func <T> builder)
     where T : IBucketHistogramMetric
 {
     return(_bucketHistogramInstance);
 }
예제 #9
0
 /// <summary>
 ///     Records a metric for the size of a HTTP PUT requests.
 /// </summary>
 /// <param name="metrics">The metrics.</param>
 /// <param name="bucketHistogramOptions">The bucket histogram options</param>
 /// <param name="value">The value.</param>
 public static void UpdatePutRequestSize(this IMetrics metrics, BucketHistogramOptions bucketHistogramOptions, long value)
 {
     metrics.Measure.BucketHistogram.Update(bucketHistogramOptions, value);
 }
예제 #10
0
        /// <summary>
        ///     Records a metric for the size of a HTTP PUT requests.
        /// </summary>
        /// <param name="metrics">The metrics.</param>
        /// <param name="bucketHistogramOptions">The bucket histogram options</param>
        /// <param name="value">The value.</param>
        /// <param name="clientId">The OAuth2 client identifier to tag the histogram values.</param>
        /// <param name="routeTemplate">The route template of the endpoint.</param>
        public static void UpdateClientPutRequestSize(this IMetrics metrics, BucketHistogramOptions bucketHistogramOptions, long value, string clientId, string routeTemplate)
        {
            var tags = new MetricTags(new[] { MiddlewareConstants.DefaultTagKeys.ClientId, MiddlewareConstants.DefaultTagKeys.Route }, new[] { clientId, routeTemplate });

            metrics.Measure.BucketHistogram.Update(bucketHistogramOptions, tags, value);
        }