/// <summary> /// Disables tracing for all diagnostic listeners that don't have an explicit implementation. /// </summary> public static IOpenTracingBuilder RemoveGenericDiagnostics(this IOpenTracingBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.RemoveAll <GenericDiagnostics>(); return(builder); }
/// <summary> /// Adds instrumentation for Entity Framework Core. /// </summary> public static IOpenTracingBuilder AddEntityFrameworkCore(this IOpenTracingBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddDiagnosticSubscriber <EntityFrameworkCoreDiagnostics>(); builder.ConfigureGenericDiagnostics(options => options.IgnoredListenerNames.Add(EntityFrameworkCoreDiagnostics.DiagnosticListenerName)); return(builder); }
/// <summary> /// Adds instrumentation for System.Net.Http. /// </summary> public static IOpenTracingBuilder AddHttpHandler(this IOpenTracingBuilder builder, Action <HttpHandlerDiagnosticOptions> options = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddDiagnosticSubscriber <HttpHandlerDiagnostics>(); builder.ConfigureGenericDiagnostics(options => options.IgnoredListenerNames.Add(HttpHandlerDiagnostics.DiagnosticListenerName)); return(ConfigureHttpHandler(builder, options)); }
/// <summary> /// Adds instrumentation for Microsoft.Data.SqlClient. /// </summary> public static IOpenTracingBuilder AddMicrosoftSqlClient(this IOpenTracingBuilder builder, Action <MicrosoftSqlClientDiagnosticOptions> options = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddDiagnosticSubscriber <MicrosoftSqlClientDiagnostics>(); builder.ConfigureGenericDiagnostics(genericOptions => genericOptions.IgnoredListenerNames.Add(MicrosoftSqlClientDiagnostics.DiagnosticListenerName)); return(ConfigureMicrosoftSqlClient(builder, options)); }
public static IOpenTracingBuilder ConfigureGenericDiagnostics(this IOpenTracingBuilder builder, Action <GenericDiagnosticOptions> options) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (options != null) { builder.Services.Configure(options); } return(builder); }
/// <summary> /// Adds instrumentation for ASP.NET Core (Incoming requests and MVC). /// </summary> public static IOpenTracingBuilder AddAspNetCore(this IOpenTracingBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.AddTransient <IStartupFilter, StartInstrumentationStartupFilter>(); builder.Services.AddSingleton <IDiagnosticInterceptor, RequestInterceptor>(); builder.Services.AddSingleton <IDiagnosticInterceptor, MvcInterceptor>(); return(builder); }
public static IOpenTracingBuilder ConfigureDesktopHttpClientHandler(this IOpenTracingBuilder builder, Action <HttpDiagnosticOptions> options) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (options != null) { builder.Services.Configure(options); } return(builder); }
public static IOpenTracingBuilder AddLoggerProvider(this IOpenTracingBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ILoggerProvider, OpenTracingLoggerProvider>()); builder.Services.Configure <LoggerFilterOptions>(options => { // All interesting request-specific logs are instrumented via DiagnosticSource. options.AddFilter <OpenTracingLoggerProvider>("Microsoft.AspNetCore.Hosting", LogLevel.None); }); return(builder); }
public static IOpenTracingBuilder AddBenchmarkTracer(this IOpenTracingBuilder builder, InstrumentationMode mode) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } ITracer tracer = mode == InstrumentationMode.Mock ? new MockTracer() : NoopTracerFactory.Create(); bool startInstrumentationForNoopTracer = mode == InstrumentationMode.Noop; builder.Services.AddSingleton <ITracer>(tracer); builder.Services.Configure <DiagnosticManagerOptions>(options => options.StartInstrumentationForNoopTracer = startInstrumentationForNoopTracer); return(builder); }
/// <summary> /// Adds instrumentation for ASP.NET Core. /// </summary> public static IOpenTracingBuilder AddAspNetCore(this IOpenTracingBuilder builder, Action <AspNetCoreDiagnosticOptions> options = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddDiagnosticSubscriber <AspNetCoreDiagnostics>(); builder.ConfigureGenericDiagnostics(genericOptions => genericOptions.IgnoredListenerNames.Add(AspNetCoreDiagnostics.DiagnosticListenerName)); // Our default behavior for ASP.NET is that we only want spans if the request itself is traced builder.ConfigureEntityFrameworkCore(opt => opt.StartRootSpans = false); builder.ConfigureHttpHandler(opt => opt.StartRootSpans = false); builder.ConfigureMicrosoftSqlClient(opt => opt.StartRootSpans = false); builder.ConfigureSystemSqlClient(opt => opt.StartRootSpans = false); return(ConfigureAspNetCore(builder, options)); }
public static IOpenTracingBuilder AddLoggerProvider(this IOpenTracingBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <ILoggerProvider, OpenTracingLoggerProvider>()); builder.Services.Configure <LoggerFilterOptions>(options => { // All interesting request-specific logs are instrumented via DiagnosticSource. options.AddFilter <OpenTracingLoggerProvider>("Microsoft.AspNetCore.Hosting", LogLevel.None); // The "Information"-level in ASP.NET Core is too verbose. options.AddFilter <OpenTracingLoggerProvider>("Microsoft.AspNetCore", LogLevel.Warning); // EF Core is sending everything to DiagnosticSource AND ILogger so we completely disable the category. options.AddFilter <OpenTracingLoggerProvider>("Microsoft.EntityFrameworkCore", LogLevel.None); }); return(builder); }
internal static IOpenTracingBuilder AddDiagnosticSubscriber <TDiagnosticSubscriber>(this IOpenTracingBuilder builder) where TDiagnosticSubscriber : DiagnosticObserver { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <DiagnosticObserver, TDiagnosticSubscriber>()); return(builder); }
/// <summary> /// Adds instrumentation for ASP.NET Core. /// </summary> public static IOpenTracingBuilder AddAspNetCore(this IOpenTracingBuilder builder, Action <AspNetCoreDiagnosticOptions> options) { AddAspNetCore(builder); return(ConfigureAspNetCore(builder, options)); }
/// <summary> /// Adds instrumentation for Entity Framework Core. /// </summary> public static IOpenTracingBuilder AddEntityFrameworkCore(this IOpenTracingBuilder builder, Action <EntityFrameworkCoreDiagnosticOptions> options) { AddEntityFrameworkCore(builder); return(ConfigureEntityFrameworkCore(builder, options)); }
/// <summary> /// Adds instrumentation for generic DiagnosticListeners. /// </summary> public static IOpenTracingBuilder AddGenericDiagnostics(this IOpenTracingBuilder builder, Action <GenericDiagnosticOptions> options = null) { builder.AddDiagnosticSubscriber <GenericDiagnostics>(); return(ConfigureGenericDiagnostics(builder, options)); }