public void TestUnknownSampler()
        {
            Configuration.SamplerConfiguration samplerConfiguration = new Configuration.SamplerConfiguration(_loggerFactory);
            samplerConfiguration.WithType("unknown");

            Assert.Throws <NotSupportedException>(() => new Configuration("name", _loggerFactory)
                                                  .WithSampler(samplerConfiguration)
                                                  .GetTracer());
        }
예제 #2
0
        public static IServiceCollection AddElectJaeger(this IServiceCollection services,
                                                        [NotNull] Action <ElectJaegerOptions> configure)
        {
            services.Configure(configure);

            var electJaegerOptions = configure.GetValue();

            if (!electJaegerOptions.IsEnable)
            {
                return(services);
            }

            // Add open Tracing
            services.AddOpenTracing();

            // Add ITracer
            services.AddSingleton(serviceProvider =>
            {
                var loggerFactory = GetLoggerFactory(serviceProvider);

                // Sampler
                var samplerConfig = new Configuration.SamplerConfiguration(loggerFactory);
                samplerConfig.WithSamplingEndpoint($"http://{electJaegerOptions.SamplerDomain}:{electJaegerOptions.SamplerPort}");
                samplerConfig.WithType(ConstSampler.Type);
                samplerConfig = electJaegerOptions.AfterSamplerConfig?.Invoke(samplerConfig) ?? samplerConfig;

                // Reporter
                var reporterConfig = new Configuration.ReporterConfiguration(loggerFactory);
                reporterConfig.SenderConfig.WithAgentHost(electJaegerOptions.ReporterDomain);
                reporterConfig.SenderConfig.WithAgentPort(electJaegerOptions.ReporterPort);
                reporterConfig.SenderConfig.WithEndpoint(electJaegerOptions.TracesEndpoint);
                if (!string.IsNullOrWhiteSpace(electJaegerOptions.AuthUsername))
                {
                    reporterConfig.SenderConfig.WithAuthUsername(electJaegerOptions.AuthUsername);
                }
                if (!string.IsNullOrWhiteSpace(electJaegerOptions.AuthPassword))
                {
                    reporterConfig.SenderConfig.WithAuthPassword(electJaegerOptions.AuthPassword);
                }
                if (!string.IsNullOrWhiteSpace(electJaegerOptions.AuthToken))
                {
                    reporterConfig.SenderConfig.WithAuthToken(electJaegerOptions.AuthToken);
                }
                reporterConfig = electJaegerOptions.AfterReporterConfig?.Invoke(reporterConfig) ?? reporterConfig;

                // Global Config
                var config =
                    new Configuration(electJaegerOptions.ServiceName, loggerFactory)
                    .WithSampler(samplerConfig)
                    .WithReporter(reporterConfig);

                config = electJaegerOptions.AfterGlobalConfig?.Invoke(config) ?? config;

                // Tracer
                var tracer = config.GetTracer();
                tracer     = electJaegerOptions.AfterTracer?.Invoke(tracer) ?? tracer;

                // Register Tracer
                if (!GlobalTracer.IsRegistered())
                {
                    GlobalTracer.Register(tracer);
                }

                return(tracer);
            });

            services.Configure <HttpHandlerDiagnosticOptions>(options =>
            {
                options.IgnorePatterns.Add(x => !x.RequestUri.IsLoopback);
            });

            return(services);
        }