/// <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); }
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(); }