Ejemplo n.º 1
0
        private void OnAfterAction(object arg)
        {
            var httpContext      = (HttpContext)_afterAction_httpContextFetcher.Fetch(arg);
            var actionDescriptor = (ActionDescriptor)_afterAction_ActionDescriptorFetcher.Fetch(arg);

            if (httpContext == null || actionDescriptor == null)
            {
                return;
            }
            var    request       = httpContext.Request;
            var    response      = httpContext.Response;
            string routeTemplate = actionDescriptor.AttributeRouteInfo.Template;
            var    controllerActionDescriptor = actionDescriptor as ControllerActionDescriptor;
            string controllerName             = controllerActionDescriptor?.ControllerTypeInfo.FullName;
            string actionName = controllerActionDescriptor?.ActionName;

            Interlocked.Decrement(ref _gauges[_totalInflightRequestGauge].Value);

            if (controllerActionDescriptor == null)
            {
                return;
            }

            string requestMetricPrefix = MetricNameUtils.MetricName(request, routeTemplate);

            if (requestMetricPrefix != null)
            {
                var completeTags = GetTags(true, true, true, controllerName, actionName, null);

                /*
                 * Gauges
                 * 1) AspNetCore.request.api.v2.alert.summary.GET.inflight.value
                 * 2) AspNetCore.total_requests.inflight.value
                 */
                var inflightRequestGauge = new WavefrontGaugeOptions
                {
                    Context         = AspNetCoreContext,
                    Name            = requestMetricPrefix + ".inflight",
                    Tags            = completeTags,
                    MeasurementUnit = Unit.Requests
                };
                Interlocked.Decrement(ref _gauges[inflightRequestGauge].Value);
            }

            string responseMetricPrefix = MetricNameUtils.MetricName(request, routeTemplate, response);

            if (responseMetricPrefix != null)
            {
                httpContext.Items[ControllerNameKey]       = controllerName;
                httpContext.Items[ActionNameKey]           = actionName;
                httpContext.Items[ResponseMetricPrefixKey] = responseMetricPrefix;
            }
        }
Ejemplo n.º 2
0
        private void OnBeforeAction(object arg)
        {
            // NOTE: This event is the start of the action pipeline. The action has been selected, the route
            //       has been selected but no filters have run and model binding hasn't occured.

            var httpContext      = (HttpContext)_beforeAction_httpContextFetcher.Fetch(arg);
            var actionDescriptor = (ActionDescriptor)_beforeAction_ActionDescriptorFetcher.Fetch(arg);

            if (httpContext == null || actionDescriptor == null)
            {
                return;
            }
            var    request       = httpContext.Request;
            string routeTemplate = actionDescriptor.AttributeRouteInfo.Template;
            var    controllerActionDescriptor = actionDescriptor as ControllerActionDescriptor;
            string controllerName             = controllerActionDescriptor?.ControllerTypeInfo.FullName;
            string actionName = controllerActionDescriptor?.ActionName;

            httpContext.Response.Headers.Add(WavefrontSpanHeader, routeTemplate);

            // Update the active tracing span with MVC info
            ISpan span = Tracer.ActiveSpan;

            if (span != null)
            {
                if (controllerActionDescriptor == null)
                {
                    span.SetOperationName(actionDescriptor.DisplayName);
                }
                else
                {
                    span.SetOperationName($"{controllerActionDescriptor.ControllerTypeInfo.Name}.{actionName}");
                    span.SetTag(ControllerTagKey, controllerName);
                }
                span.SetTag(PathTagKey, routeTemplate);
            }

            Interlocked.Increment(ref GetGaugeValue(_totalInflightRequestGauge).Value);

            if (controllerActionDescriptor == null)
            {
                return;
            }

            string requestMetricPrefix = MetricNameUtils.MetricName(request, routeTemplate);

            if (requestMetricPrefix != null)
            {
                var completeTags = GetTags(true, true, true, controllerName, actionName, null);

                /* Gauges
                 * 1) AspNetCore.request.api.v2.alert.summary.GET.inflight.value
                 * 2) AspNetCore.total_requests.inflight.value
                 */
                var inflightRequestGauge = new WavefrontGaugeOptions
                {
                    Context         = AspNetCoreContext,
                    Name            = requestMetricPrefix + ".inflight",
                    Tags            = completeTags,
                    MeasurementUnit = Unit.Requests
                };
                Interlocked.Increment(ref GetGaugeValue(inflightRequestGauge).Value);
            }
        }