Example #1
0
        /// <summary>
        /// Add Http Request Trace actuator endpoint to OWIN Pipeline
        /// </summary>
        /// <param name="builder">OWIN <see cref="IAppBuilder" /></param>
        /// <param name="config"><see cref="IConfiguration"/> of application for configuring thread dump endpoint</param>
        /// <param name="traceRepository">repository to put traces in</param>
        /// <param name="loggerFactory">For logging within the middleware</param>
        /// <returns>OWIN <see cref="IAppBuilder" /> with Trace Endpoint added</returns>
        public static IAppBuilder UseHttpTraceActuator(this IAppBuilder builder, IConfiguration config, IHttpTraceRepository traceRepository, ILoggerFactory loggerFactory)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            ITraceOptions options = new HttpTraceEndpointOptions(config);

            var mgmtOptions = ManagementOptions.Get(config);

            foreach (var mgmt in mgmtOptions)
            {
                mgmt.EndpointOptions.Add(options);
            }

            traceRepository = traceRepository ?? new HttpTraceDiagnosticObserver(options, loggerFactory?.CreateLogger <HttpTraceDiagnosticObserver>());
            DiagnosticsManager.Instance.Observers.Add((IDiagnosticObserver)traceRepository);
            var endpoint = new HttpTraceEndpoint(options, traceRepository, loggerFactory?.CreateLogger <HttpTraceEndpoint>());
            var logger   = loggerFactory?.CreateLogger <EndpointOwinMiddleware <HttpTraceEndpoint, HttpTraceResult> >();

            return(builder.Use <EndpointOwinMiddleware <HttpTraceResult> >(endpoint, mgmtOptions, new List <HttpMethod> {
                HttpMethod.Get
            }, true, logger));
        }
        /// <summary>
        /// Adds the services used by the Trace actuator
        /// </summary>
        /// <param name="services">Reference to the service collection</param>
        /// <param name="configuration">Reference to the configuration system</param>
        /// <param name="version">The media version to use</param>
        /// <returns>A reference to the service collection</returns>
        public static IServiceCollection AddTraceActuatorServices(this IServiceCollection services, IConfiguration configuration, MediaTypeVersion version)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            switch (version)
            {
            case MediaTypeVersion.V1:
                var options = new TraceEndpointOptions(configuration);
                services.TryAddSingleton <ITraceOptions>(options);
                services.TryAddSingleton <TraceEndpoint>();
                services.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IEndpointOptions), options));
                break;

            default:
                var options2 = new HttpTraceEndpointOptions(configuration);
                services.TryAddSingleton <ITraceOptions>(options2);
                services.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IEndpointOptions), options2));
                break;
            }

            return(services);
        }
        public void RoutesByPathAndVerb()
        {
            var options = new HttpTraceEndpointOptions();

            Assert.True(options.ExactMatch);
            Assert.Equal("/actuator/httptrace", options.GetContextPath(new ActuatorManagementOptions()));
            Assert.Equal("/cloudfoundryapplication/httptrace", options.GetContextPath(new CloudFoundryManagementOptions()));
            Assert.Null(options.AllowedVerbs);
        }
Example #4
0
        public static void UseHttpTraceActuator(IConfiguration configuration, IHttpTraceRepository traceRepository = null, ILoggerFactory loggerFactory = null)
        {
            var options = new HttpTraceEndpointOptions(configuration);

            _mgmtOptions.RegisterEndpointOptions(configuration, options);
            traceRepository = traceRepository ?? new HttpTraceDiagnosticObserver(options, CreateLogger <HttpTraceDiagnosticObserver>(loggerFactory));
            DiagnosticsManager.Instance.Observers.Add((IDiagnosticObserver)traceRepository);
            var ep      = new HttpTraceEndpoint(options, traceRepository, CreateLogger <HttpTraceEndpoint>(loggerFactory));
            var handler = new HttpTraceHandler(ep, SecurityServices, _mgmtOptions, CreateLogger <HttpTraceHandler>(loggerFactory));

            ConfiguredHandlers.Add(handler);
        }
        private static void RegisterHttpTraceActuatorComponents(this ContainerBuilder container, IConfiguration config)
        {
            container.Register(c =>
            {
                var options     = new HttpTraceEndpointOptions(config);
                var mgmtOptions = c.Resolve <IEnumerable <IManagementOptions> >();
                foreach (var mgmt in mgmtOptions)
                {
                    mgmt.EndpointOptions.Add(options);
                }
                return(options);
            }).As <ITraceOptions>().IfNotRegistered(typeof(ITraceOptions)).SingleInstance();

            container.RegisterType <HttpTraceDiagnosticObserver>().As <IDiagnosticObserver>().As <IHttpTraceRepository>().SingleInstance();
            container.RegisterType <DiagnosticsManager>().As <IDiagnosticsManager>().IfNotRegistered(typeof(IDiagnosticsManager)).SingleInstance();

            container.RegisterType <HttpTraceEndpoint>().As <IEndpoint <HttpTraceResult> >().SingleInstance();
            container.RegisterType <EndpointOwinMiddleware <HttpTraceResult> >().SingleInstance();
        }