Пример #1
0
        public static OperationsTracingOptions UseZipkinExporter(
            this OperationsTracingOptions options)
        {
            EnsureArg.IsNotNull(options, nameof(options));
            EnsureArg.IsNotNull(options.Context, nameof(options.Context));

            var configuration = options.Context.Configuration?.GetSection("naos:operations:tracing:zipkin").Get <ZipkinSpanExporterConfiguration>();

            if (configuration?.Enabled == true && configuration?.Host.IsNullOrEmpty() == false)
            {
                options.Context.Services.AddSingleton <ISpanExporter>(sp =>
                                                                      new ZipkinSpanExporter(
                                                                          sp.GetRequiredService <ILogger <ZipkinSpanExporter> >(),
                                                                          configuration.Host.TrimEnd('/'),
                                                                          sp.GetRequiredService <Naos.Foundation.ServiceDescriptor>().Name,
                                                                          sp.GetRequiredService <IHttpClientFactory>())); // TODO: factory?

                options.Context.Services.AddHealthChecks()
                .AddUrlGroup(new Uri($"{configuration.Host.TrimEnd('/')}/health"), "tracing-exporter-zipkin", tags: new[] { "naos" });

                options.Context.Messages.Add($"naos services builder: tracing exporter used (type={typeof(ZipkinSpanExporter).Name})");
            }

            // health endpoint

            return(options);
        }
        public static OperationsTracingOptions UseExporter(
            this OperationsTracingOptions options,
            ISpanExporter exporter)
        {
            EnsureArg.IsNotNull(options, nameof(options));
            EnsureArg.IsNotNull(options.Context, nameof(options.Context));

            options.Context.Services.AddSingleton(exporter);

            options.Context.Messages.Add($"naos services builder: tracing exporter used (type={exporter.GetType().Name})");

            return(options);
        }
        public static OperationsTracingOptions UseExporter <T>(
            this OperationsTracingOptions options)
            where T : class, ISpanExporter
        {
            EnsureArg.IsNotNull(options, nameof(options));
            EnsureArg.IsNotNull(options.Context, nameof(options.Context));

            options.Context.Services.AddSingleton <ISpanExporter, T>();

            options.Context.Messages.Add($"naos services builder: tracing exporter used (type={typeof(T).Name})");

            return(options);
        }