示例#1
0
        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 {})
示例#2
0
        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 {})
示例#3
0
        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);
        }
示例#4
0
    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);
    }