public async Task Given_request_populates_labels_supplied_out_of_order_correctly()
        {
            var histogram = _factory.CreateHistogram("all_labels_histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 1d, 2d, 3d },
                LabelNames = HttpRequestLabelNames.All.Reverse().ToArray()
            });

            var expectedStatusCode = 400;
            var expectedMethod     = "METHOD";
            var expectedAction     = "ACTION";
            var expectedController = "CONTROLLER";

            SetupHttpContext(_httpContext, expectedStatusCode, expectedMethod, expectedAction, expectedController);
            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            await _sut.Invoke(_httpContext);

            var labels = histogram.GetAllLabels().Single();

            Assert.AreEqual(expectedStatusCode.ToString(), GetLabelValueOrDefault(labels, HttpRequestLabelNames.Code));
            Assert.AreEqual(expectedMethod, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Method));
            Assert.AreEqual(expectedAction, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Action));
            Assert.AreEqual(expectedController, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Controller));
        }
 private Task SetRequestDurationAndInvoke(Histogram histogram, TimeSpan duration)
 {
     _requestDelegate = context =>
     {
         Thread.Sleep(duration);
         return(Task.CompletedTask);
     };
     _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);
     return(_sut.Invoke(_httpContext));
 }
        public void Setup()
        {
            _registry = Metrics.NewCustomRegistry();
            _factory  = Metrics.WithCustomRegistry(_registry);

            _inFlightMiddleware =
                new HttpInFlightMiddleware(next => Task.CompletedTask, _factory.CreateGauge("in_flight", "help"));
            _countMiddleware =
                new HttpRequestCountMiddleware(next => Task.CompletedTask, _factory.CreateCounter("count", "help"));
            _durationMiddleware =
                new HttpRequestDurationMiddleware(next => Task.CompletedTask, _factory.CreateHistogram("duration", "help"));
        }
        public void Init()
        {
            _registry = Metrics.NewCustomRegistry();
            _factory  = Metrics.WithCustomRegistry(_registry);

            _histogram = _factory.CreateHistogram("default_histogram", "", new HistogramConfiguration
            {
                Buckets = new[] { 0.1d, 1d, 10d }
            });
            _requestDelegate = context => Task.CompletedTask;
            _httpContext     = new DefaultHttpContext();
            _sut             = new HttpRequestDurationMiddleware(_requestDelegate, _histogram);
        }
Пример #5
0
        public void Setup()
        {
            _registry = Metrics.NewCustomRegistry();
            _factory  = Metrics.WithCustomRegistry(_registry);

            _inProgressMiddleware = new HttpInProgressMiddleware(next => Task.CompletedTask, new HttpInProgressOptions
            {
                Gauge = _factory.CreateGauge("in_progress", "help")
            });
            _countMiddleware = new HttpRequestCountMiddleware(next => Task.CompletedTask, new HttpRequestCountOptions
            {
                Counter = _factory.CreateCounter("count", "help")
            });
            _durationMiddleware = new HttpRequestDurationMiddleware(next => Task.CompletedTask, new HttpRequestDurationOptions
            {
                Histogram = _factory.CreateHistogram("duration", "help")
            });
        }
        public async Task Given_multiple_requests_populates_action_label_correctly()
        {
            var histogram = _factory.CreateHistogram("histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 0.1d, 1d, 10d },
                LabelNames = new[] { HttpRequestLabelNames.Action }
            });

            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            var expectedAction1 = await SetActionAndInvoke("Action1");

            var expectedAction2 = await SetActionAndInvoke("Action2");

            var labels  = histogram.GetAllLabels();
            var actions = GetLabelValues(labels, HttpRequestLabelNames.Action);

            Assert.AreEqual(2, actions.Length);
            CollectionAssert.AreEquivalent(new[] { expectedAction1, expectedAction2 }, actions);
        }
        public async Task Given_multiple_requests_populates_controller_label_correctly()
        {
            var histogram = _factory.CreateHistogram("histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 0.1d, 1d, 10d },
                LabelNames = new[] { HttpRequestLabelNames.Controller }
            });

            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            var expectedController1 = await SetControllerAndInvoke("ValuesController");

            var expectedController2 = await SetControllerAndInvoke("AuthController");

            var labels      = histogram.GetAllLabels();
            var controllers = GetLabelValues(labels, HttpRequestLabelNames.Controller);

            Assert.AreEqual(2, controllers.Length);
            CollectionAssert.AreEquivalent(new[] { expectedController1, expectedController2 }, controllers);
        }
        public async Task Given_multiple_requests_populates_method_label_correctly()
        {
            var histogram = _factory.CreateHistogram("histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 0.1d, 1d, 10d },
                LabelNames = new[] { HttpRequestLabelNames.Method }
            });

            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            var expectedMethod1 = await SetMethodAndInvoke("POST");

            var expectedMethod2 = await SetMethodAndInvoke("GET");

            var labels  = histogram.GetAllLabels();
            var methods = GetLabelValues(labels, HttpRequestLabelNames.Method);

            Assert.AreEqual(2, methods.Length);
            CollectionAssert.AreEquivalent(new[] { expectedMethod1, expectedMethod2 }, methods);
        }
        public async Task Given_multiple_requests_populates_code_label_correctly()
        {
            var histogram = _factory.CreateHistogram("histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 0.1d, 1d, 10d },
                LabelNames = new[] { HttpRequestLabelNames.Code }
            });

            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            var expectedStatusCode1 = await SetStatusCodeAndInvoke(400);

            var expectedStatusCode2 = await SetStatusCodeAndInvoke(401);

            var labels = histogram.GetAllLabels();
            var codes  = GetLabelValues(labels, HttpRequestLabelNames.Code);

            Assert.AreEqual(2, codes.Length);
            CollectionAssert.AreEquivalent(new[] { expectedStatusCode1.ToString(), expectedStatusCode2.ToString() }, codes);
        }
        public async Task Given_request_populates_subset_of_labels_correctly()
        {
            var histogram = _factory.CreateHistogram("all_labels_histogram", "", new HistogramConfiguration
            {
                Buckets    = new[] { 1d, 2d, 3d },
                LabelNames = new[] { HttpRequestLabelNames.Action, HttpRequestLabelNames.Controller }
            });

            var expectedAction     = "ACTION";
            var expectedController = "CONTROLLER";

            SetupHttpContext(_httpContext, 200, "method", expectedAction, expectedController);
            _sut = new HttpRequestDurationMiddleware(_requestDelegate, histogram);

            await _sut.Invoke(_httpContext);

            var labels = histogram.GetAllLabels().Single();

            Assert.IsNull(GetLabelValueOrDefault(labels, HttpRequestLabelNames.Code));
            Assert.IsNull(GetLabelValueOrDefault(labels, HttpRequestLabelNames.Method));
            Assert.AreEqual(expectedAction, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Action));
            Assert.AreEqual(expectedController, GetLabelValueOrDefault(labels, HttpRequestLabelNames.Controller));
        }