Exemplo n.º 1
0
        public JsonReporter(ZipkinTracerOptions zipkinOptions, JsonReporterOptions options)
            : base(options)
        {
            if (string.IsNullOrWhiteSpace(zipkinOptions.ZipkinUri))
            {
                throw new ArgumentNullException($"{nameof(zipkinOptions)}.{nameof(ZipkinTracerOptions.ZipkinUri)}");
            }

            _httpClient = new HttpClient();
            _zipkinUri  = new Uri(zipkinOptions.ZipkinUri.TrimEnd('/') + "/api/v1/spans");
        }
        public static IServiceCollection AddZipkinTracer(this IServiceCollection services, Action <ZipkinTracerOptions> options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var zipkinOptions = new ZipkinTracerOptions();

            options(zipkinOptions);

            return(AddZipkinTracer(services, zipkinOptions));
        }
        private Endpoint CreateEndpoint(IEndpointResolver endpointResolver, ZipkinTracerOptions options)
        {
            // get defaults
            var defaultEndpoint = endpointResolver.GetEndpoint();

            // overwrite with values from user-supplied options
            return(new Endpoint
            {
                ServiceName = options.ServiceName ?? defaultEndpoint?.ServiceName ?? "Unknown",
                IPAddress = options.ServiceIpAddress ?? defaultEndpoint?.IPAddress ?? IPAddress.Loopback,
                Port = options.ServicePort != 0 ? options.ServicePort : defaultEndpoint?.Port ?? 0
            });
        }
        public void ShouldOverridePropagatorViaZipkinTracerOptions()
        {
            var tracerOptions = new ZipkinTracerOptions(Endpoint.Testing, new NoOpReporter())
            {
                Propagator = new B3SingleHeaderPropagator()
            };

            var tracer = new ZipkinTracer(tracerOptions);

            var traceId = Tracer.IdProvider.NextTraceId();

            var context = new SpanContext(traceId, Tracer.IdProvider.NextSpanId(), Tracer.IdProvider.NextSpanId(), false, true);
            var carrier = new Dictionary <string, string>();

            tracer.Inject(context, BuiltinFormats.HttpHeaders, new TextMapInjectAdapter(carrier));
            carrier.Count.Should().Be(1);
        }
        public ZipkinTracer(ZipkinTracerOptions options, IEndpointResolver endpointResolver)
            : base(options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

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

            _options = options;

            // TODO default reporter & sampler ?

            _reporter = options.Reporter ?? new JsonReporter(options, new JsonReporterOptions());

            Sampler = options.Sampler ?? new ConstSampler(true);

            Endpoint = CreateEndpoint(endpointResolver, options);
        }
        public static IServiceCollection AddZipkinTracer(this IServiceCollection services, ZipkinTracerOptions options)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

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

            services.AddSingleton(options);
            services.AddSingleton <ITracer, ZipkinTracer>();
            services.AddSingleton <IEndpointResolver, DefaultEndpointResolver>();

            return(services);
        }