public static IServiceCollection AddJaeger(this IServiceCollection services, JaegerOptions options, string sectionName = SectionName, Action <IOpenTracingBuilder> openTracingBuilder = null) { if (Interlocked.Exchange(ref _initialized, 1) == 1) { return(services); } services.AddSingleton(options); if (!options.Enabled) { var defaultTracer = ConveyDefaultTracer.Create(); services.AddSingleton(defaultTracer); return(services); } if (options.ExcludePaths is {})
public static IConveyBuilder AddJaeger(this IConveyBuilder builder, JaegerOptions options) { if (Interlocked.Exchange(ref _initialized, 1) == 1) { return(builder); } builder.Services.AddSingleton(options); if (!options.Enabled) { var defaultTracer = ConveyDefaultTracer.Create(); builder.Services.AddSingleton(defaultTracer); return(builder); } if (!builder.TryRegister(RegistryName)) { return(builder); } if (options.ExcludePaths is {})
public static IConveyBuilder AddJaeger(this IConveyBuilder builder, JaegerOptions options) { builder.Services.AddSingleton(options); if (!options.Enabled) { var defaultTracer = ConveyDefaultTracer.Create(); builder.Services.AddSingleton(defaultTracer); return(builder); } if (!builder.TryRegister(RegistryName) || _initialized) { return(builder); } _initialized = true; builder.Services.AddSingleton <ITracer>(sp => { var loggerFactory = sp.GetRequiredService <ILoggerFactory>(); var reporter = new RemoteReporter.Builder() .WithSender(new UdpSender(options.UdpHost, options.UdpPort, options.MaxPacketSize)) .WithLoggerFactory(loggerFactory) .Build(); var sampler = GetSampler(options); var tracer = new Tracer.Builder(options.ServiceName) .WithLoggerFactory(loggerFactory) .WithReporter(reporter) .WithSampler(sampler) .Build(); GlobalTracer.Register(tracer); return(tracer); }); return(builder); }
public static IConveyBuilder AddJaeger(this IConveyBuilder builder, JaegerOptions options, string sectionName = SectionName, Action <IOpenTracingBuilder> openTracingBuilder = null) { if (Interlocked.Exchange(ref _initialized, 1) == 1) { return(builder); } builder.Services.AddSingleton(options); if (!options.Enabled) { var defaultTracer = ConveyDefaultTracer.Create(); builder.Services.AddSingleton(defaultTracer); return(builder); } if (!builder.TryRegister(RegistryName)) { return(builder); } if (options.ExcludePaths is not null) { builder.Services.Configure <AspNetCoreDiagnosticOptions>(o => { foreach (var path in options.ExcludePaths) { o.Hosting.IgnorePatterns.Add(x => x.Request.Path == path); } }); } builder.Services.AddOpenTracing(x => openTracingBuilder?.Invoke(x)); builder.Services.AddSingleton <ITracer>(sp => { var loggerFactory = sp.GetRequiredService <ILoggerFactory>(); var maxPacketSize = options.MaxPacketSize <= 0 ? 64967 : options.MaxPacketSize; var senderType = string.IsNullOrWhiteSpace(options.Sender) ? "udp" : options.Sender?.ToLowerInvariant(); ISender sender = senderType switch { "http" => BuildHttpSender(options.HttpSender), "udp" => new UdpSender(options.UdpHost, options.UdpPort, maxPacketSize), _ => throw new Exception($"Invalid Jaeger sender type: '{senderType}'.") }; var reporter = new RemoteReporter.Builder() .WithSender(sender) .WithLoggerFactory(loggerFactory) .Build(); var sampler = GetSampler(options); var tracer = new Tracer.Builder(options.ServiceName) .WithLoggerFactory(loggerFactory) .WithReporter(reporter) .WithSampler(sampler) .Build(); GlobalTracer.Register(tracer); return(tracer); }); return(builder); }