예제 #1
0
        public static IApplicationBuilder UseZipkin(this IApplicationBuilder app,
                                                    Action <ZipkinConfiguration> configureAction)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }

            var loggerFactory = app.ApplicationServices.GetService(typeof(ILoggerFactory)) as ILoggerFactory;

            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            var lifetime = app.ApplicationServices.GetService <IApplicationLifetime>();

            if (lifetime == null)
            {
                throw new ArgumentNullException(nameof(lifetime));
            }

            var config = new ZipkinConfiguration();

            configureAction(config);

            lifetime.ApplicationStarted.Register(() =>
            {
                TraceManager.SamplingRate = config.SamplingRate;
                var logger     = new TracingLogger(loggerFactory, "zipkin4net");
                var httpSender = new HttpZipkinSender(config.Url, config.ContentType);
                var tracer     = new ZipkinTracer(httpSender, new JSONSpanSerializer());
                TraceManager.RegisterTracer(tracer);
                TraceManager.Start(logger);
            });
            lifetime.ApplicationStopped.Register(() => TraceManager.Stop());
            app.UseTracing($"{AppDomain.CurrentDomain.FriendlyName}");


            return(app);
        }
        public static IServiceCollection AddZipkin(this IServiceCollection services, Action <ZipkinConfiguration> configuration, ILoggerFactory factory)
        {
            services.TryAddSingleton <ITraceFactory, TraceFactory>();
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            var config = new ZipkinConfiguration();

            configuration(config);

            TraceManager.SamplingRate = config.SamplingRate;
            var logger     = new TracingLogger(factory, "zipkin4net");
            var httpSender = new HttpZipkinSender(config.Url, config.ContentType);
            var tracer     = new ZipkinTracer(httpSender, new JSONSpanSerializer());

            TraceManager.RegisterTracer(tracer);
            TraceManager.Start(logger);

            return(services);
        }