/// <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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #12
0
        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));
        }