Refactor TracerProvider to make configuration easy. (#1027)

* Refactor TracerProvider to make configuration easy.

* build break fix

* MyExporter change

* format

* sql build fix

* fix

* test fix
This commit is contained in:
Cijo Thomas 2020-08-09 00:48:00 -07:00 committed by GitHub
parent 5f2e8d0cd9
commit 47a6fe7621
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 562 additions and 602 deletions

View File

@ -24,12 +24,14 @@ public class Program
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProvider(
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddActivitySources(
new string[]
{
"MyCompany.MyProduct.MyLibrary",
})
.AddMyExporter();
.AddMyExporter()
.Build();
using (var activity = MyActivitySource.StartActivity("SayHello"))
{

View File

@ -1,4 +1,4 @@
// <copyright file="TracerProviderExtensions.cs" company="OpenTelemetry Authors">
// <copyright file="TracerProviderBuilderExtensions.cs" company="OpenTelemetry Authors">
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
@ -16,10 +16,10 @@
using OpenTelemetry.Trace;
internal static class TracerProviderExtensions
internal static class TracerProviderBuilderExtensions
{
public static TracerProvider AddMyExporter(this TracerProvider provider)
public static TracerProviderBuilder AddMyExporter(this TracerProviderBuilder builder)
{
return provider?.AddProcessor(new SimpleActivityProcessor(new MyExporter()));
return builder?.AddProcessor(new SimpleActivityProcessor(new MyExporter()));
}
}

View File

@ -25,13 +25,14 @@ public class Program
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProvider(
new string[]
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddActivitySources(new string[]
{
"MyCompany.MyProduct.MyLibrary",
})
.AddProcessor(new MyActivityProcessor("A"))
.AddProcessor(new MyActivityProcessor("B"));
.AddProcessor(new MyActivityProcessor("B"))
.Build();
using (var activity = MyActivitySource.StartActivity("Foo"))
{

View File

@ -26,13 +26,15 @@ public class Program
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProvider(
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddActivitySources(
new string[]
{
"MyCompany.MyProduct.MyLibrary",
},
new MySampler())
.AddProcessor(new SimpleActivityProcessor(new ConsoleExporter(new ConsoleExporterOptions())));
})
.SetSampler(new MySampler())
.AddProcessor(new SimpleActivityProcessor(new ConsoleExporter(new ConsoleExporterOptions())))
.Build();
using (var activity = MyActivitySource.StartActivity("SayHello"))
{

View File

@ -26,12 +26,14 @@ public class Program
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProvider(
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddActivitySources(
new string[]
{
"MyCompany.MyProduct.MyLibrary",
})
.AddProcessor(new SimpleActivityProcessor(new ConsoleExporter(new ConsoleExporterOptions())));
.AddProcessor(new SimpleActivityProcessor(new ConsoleExporter(new ConsoleExporterOptions())))
.Build();
using (var activity = MyActivitySource.StartActivity("SayHello"))
{

View File

@ -32,15 +32,15 @@ namespace Examples.AspNet
protected void Application_Start()
{
this.openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder
this.openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
.AddAspNetInstrumentation()
.UseJaegerExporter(c =>
.UseJaegerExporter(c =>
{
c.AgentHost = "localhost";
c.AgentPort = 6831;
}));
})
.Build();
GlobalConfiguration.Configure(WebApiConfig.Register);

View File

@ -29,13 +29,12 @@ namespace Examples.Console
internal static object Run(ConsoleOptions options)
{
// Enable TracerProvider for the source "MyCompany.MyProduct.MyWebServer"
// and use a single pipeline with a custom MyProcessor, and Console exporter.
using var tracerProvider = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("MyCompany.MyProduct.MyWebServer")
.SetResource(Resources.CreateServiceResource("MyServiceName"))
.UseConsoleExporter(
opt => opt.DisplayAsJson = options.DisplayAsJson,
(p) => p.AddProcessor((next) => new MyProcessor(next))));
// and use a custom MyProcessor, along with Console exporter.
using var tracerProvider = Sdk.CreateTracerProviderBuilder().AddActivitySource("MyCompany.MyProduct.MyWebServer")
.SetResource(Resources.CreateServiceResource("MyServiceName"))
.AddProcessor(new MyProcessor()) // This must be added before ConsoleExporter
.UseConsoleExporter(opt => opt.DisplayAsJson = options.DisplayAsJson)
.Build();
// The above line is required only in applications
// which decide to use Open Telemetry.
@ -102,18 +101,6 @@ namespace Examples.Console
internal class MyProcessor : ActivityProcessor
{
private ActivityProcessor next;
public MyProcessor(ActivityProcessor next)
{
this.next = next;
}
public override void OnEnd(Activity activity)
{
this.next.OnEnd(activity);
}
public override void OnStart(Activity activity)
{
if (activity.IsAllDataRequested)
@ -127,18 +114,6 @@ namespace Examples.Console
activity.SetTag("customClientTag", "Custom Tag Value for Client");
}
}
this.next.OnStart(activity);
}
public override Task ShutdownAsync(CancellationToken cancellationToken)
{
return this.next.ShutdownAsync(cancellationToken);
}
public override Task ForceFlushAsync(CancellationToken cancellationToken)
{
return this.next.ForceFlushAsync(cancellationToken);
}
}
}

View File

@ -27,11 +27,12 @@ namespace Examples.Console
{
System.Console.WriteLine("Hello World!");
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation()
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
.SetResource(Resources.CreateServiceResource("http-service-example"))
.AddActivitySource("http-client-test")
.UseConsoleExporter(opt => opt.DisplayAsJson = false));
.UseConsoleExporter(opt => opt.DisplayAsJson = false)
.Build();
var source = new ActivitySource("http-client-test");
using (var parent = source.StartActivity("incoming request", ActivityKind.Server))

View File

@ -29,8 +29,7 @@ namespace Examples.Console
{
// Enable OpenTelemetry for the sources "Samples.SampleServer" and "Samples.SampleClient"
// and use the Jaeger exporter.
using var openTelemetry = Sdk.CreateTracerProvider(
builder => builder
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("Samples.SampleServer")
.AddActivitySource("Samples.SampleClient")
.UseJaegerExporter(o =>
@ -38,7 +37,8 @@ namespace Examples.Console
o.ServiceName = "jaeger-test";
o.AgentHost = host;
o.AgentPort = port;
}));
})
.Build();
// The above lines are required only in Applications
// which decide to use OT.

View File

@ -26,10 +26,11 @@ namespace Examples.Console
{
// Enable OpenTelemetry for the source "MyCompany.MyProduct.MyWebServer"
// and use a single pipeline with a custom MyProcessor, and Console exporter.
using var tracerProvider = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("MyCompany.MyProduct.MyWebServer")
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("MyCompany.MyProduct.MyWebServer")
.SetResource(Resources.CreateServiceResource("MyServiceName"))
.UseConsoleExporter(opt => opt.DisplayAsJson = options.DisplayAsJson));
.UseConsoleExporter(opt => opt.DisplayAsJson = options.DisplayAsJson)
.Build();
// The above line is required only in applications
// which decide to use Open Telemetry.

View File

@ -29,10 +29,11 @@ namespace Examples.Console
{
// Enable OpenTelemetry for the source "MyCompany.MyProduct.MyWebServer"
// and use Console exporter.
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("MyCompany.MyProduct.MyWebServer")
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("MyCompany.MyProduct.MyWebServer")
.SetResource(Resources.CreateServiceResource("MyServiceName"))
.UseConsoleExporter(opt => opt.DisplayAsJson = options.DisplayAsJson));
.UseConsoleExporter(opt => opt.DisplayAsJson = options.DisplayAsJson)
.Build();
// The above line is required only in applications
// which decide to use OpenTelemetry.

View File

@ -30,11 +30,11 @@ namespace Examples.Console
{
// Enable OpenTelemetry for the sources "Samples.SampleServer" and "Samples.SampleClient"
// and use OTLP exporter.
using var openTelemetry = Sdk.CreateTracerProvider(
builder => builder
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("Samples.SampleServer")
.AddActivitySource("Samples.SampleClient")
.UseOtlpExporter(opt => opt.Endpoint = endpoint));
.UseOtlpExporter(opt => opt.Endpoint = endpoint)
.Build();
// The above line is required only in Applications
// which decide to use OT.

View File

@ -42,8 +42,7 @@ namespace Examples.Console
var connection = ConnectionMultiplexer.Connect("localhost");
// Configure exporter to export traces to Zipkin
using var openTelemetry = Sdk.CreateTracerProvider(
builder => builder
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.UseZipkinExporter(o =>
{
o.ServiceName = "redis-test";
@ -54,7 +53,8 @@ namespace Examples.Console
// changing flushinterval from 10s to 5s
options.FlushInterval = TimeSpan.FromSeconds(5);
})
.AddActivitySource("redis-test"));
.AddActivitySource("redis-test")
.Build();
ActivitySource activitySource = new ActivitySource("redis-test");

View File

@ -34,12 +34,11 @@ namespace Examples.Console
// Start the server
httpServer.Start();
using var openTelemetry = Sdk.CreateTracerProvider(
builder => builder
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("zpages-test")
.UseZPagesExporter(
processorConfigure: processor => processor
.AddProcessor((next) => zpagesProcessor)));
.AddProcessor(zpagesProcessor)
.UseZPagesExporter()
.Build();
ActivitySource activitySource = new ActivitySource("zpages-test");

View File

@ -33,15 +33,15 @@ namespace Examples.Console
// Enable OpenTelemetry for the sources "Samples.SampleServer" and "Samples.SampleClient"
// and use the Zipkin exporter.
using var openTelemetry = Sdk.CreateTracerProvider(
builder => builder
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("Samples.SampleServer")
.AddActivitySource("Samples.SampleClient")
.UseZipkinExporter(o =>
{
o.ServiceName = "test-zipkin";
o.Endpoint = new Uri(zipkinUri);
}));
})
.Build();
using (var sample = new InstrumentationWithActivitySource())
{

View File

@ -26,24 +26,19 @@ namespace OpenTelemetry.Trace
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> builder to use.</param>
/// <param name="configure">Exporter configuration options.</param>
/// <param name="processorConfigure">Activity processor configuration.</param>
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
public static TracerProviderBuilder UseConsoleExporter(this TracerProviderBuilder builder, Action<ConsoleExporterOptions> configure = null, Action<ActivityProcessorPipelineBuilder> processorConfigure = null)
public static TracerProviderBuilder UseConsoleExporter(this TracerProviderBuilder builder, Action<ConsoleExporterOptions> configure = null)
{
// TODO: Rename to AddConsoleExporter?
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.AddProcessorPipeline(pipeline =>
{
var exporterOptions = new ConsoleExporterOptions();
configure?.Invoke(exporterOptions);
var consoleExporter = new ConsoleExporter(exporterOptions);
processorConfigure?.Invoke(pipeline);
pipeline.SetExporter(consoleExporter);
});
var exporterOptions = new ConsoleExporterOptions();
configure?.Invoke(exporterOptions);
var consoleExporter = new ConsoleExporter(exporterOptions);
return builder.AddProcessor(new SimpleActivityProcessor(consoleExporter));
}
}
}

View File

@ -29,24 +29,20 @@ namespace OpenTelemetry.Trace
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> builder to use.</param>
/// <param name="configure">Exporter configuration options.</param>
/// <param name="processorConfigure">Activity processor configuration.</param>
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
public static TracerProviderBuilder UseJaegerExporter(this TracerProviderBuilder builder, Action<JaegerExporterOptions> configure = null, Action<ActivityProcessorPipelineBuilder> processorConfigure = null)
public static TracerProviderBuilder UseJaegerExporter(this TracerProviderBuilder builder, Action<JaegerExporterOptions> configure = null)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.AddProcessorPipeline(pipeline =>
{
var exporterOptions = new JaegerExporterOptions();
configure?.Invoke(exporterOptions);
var exporterOptions = new JaegerExporterOptions();
configure?.Invoke(exporterOptions);
var jaegerExporter = new JaegerExporter(exporterOptions);
var activityExporter = new JaegerExporter(exporterOptions);
processorConfigure?.Invoke(pipeline);
pipeline.SetExporter(activityExporter);
});
// TODO: Pick Simple vs Batching based on JaegerExporterOptions
return builder.AddProcessor(new SimpleActivityProcessor(jaegerExporter));
}
}
}

View File

@ -29,24 +29,20 @@ namespace OpenTelemetry.Trace
/// </summary>
/// <param name="builder">Open Telemetry builder to use.</param>
/// <param name="configure">Exporter configuration options.</param>
/// <param name="processorConfigure">Activity processor configuration.</param>
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
public static TracerProviderBuilder UseOtlpExporter(this TracerProviderBuilder builder, Action<OtlpExporterOptions> configure = null, Action<ActivityProcessorPipelineBuilder> processorConfigure = null)
public static TracerProviderBuilder UseOtlpExporter(this TracerProviderBuilder builder, Action<OtlpExporterOptions> configure = null)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.AddProcessorPipeline(pipeline =>
{
var exporterOptions = new OtlpExporterOptions();
configure?.Invoke(exporterOptions);
var exporterOptions = new OtlpExporterOptions();
configure?.Invoke(exporterOptions);
var otlpExporter = new OtlpExporter(exporterOptions);
var activityExporter = new OtlpExporter(exporterOptions);
processorConfigure?.Invoke(pipeline);
pipeline.SetExporter(activityExporter);
});
// TODO: Pick Simple vs Batching based on OtlpExporterOptions
return builder.AddProcessor(new SimpleActivityProcessor(otlpExporter));
}
}
}

View File

@ -30,27 +30,22 @@ namespace OpenTelemetry.Trace
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> builder to use.</param>
/// <param name="configure">Exporter configuration options.</param>
/// <param name="processorConfigure">Activity processor configuration.</param>
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
public static TracerProviderBuilder UseZPagesExporter(
this TracerProviderBuilder builder,
Action<ZPagesExporterOptions> configure = null,
Action<ActivityProcessorPipelineBuilder> processorConfigure = null)
Action<ZPagesExporterOptions> configure = null)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.AddProcessorPipeline(pipeline =>
{
var options = new ZPagesExporterOptions();
configure?.Invoke(options);
var exporterOptions = new ZPagesExporterOptions();
configure?.Invoke(exporterOptions);
var zpagesExporter = new ZPagesExporter(exporterOptions);
var exporter = new ZPagesExporter(options);
processorConfigure?.Invoke(pipeline);
pipeline.SetExporter(exporter);
});
// TODO: Pick Simple vs Batching based on ZipkinExporterOptions
return builder.AddProcessor(new SimpleActivityProcessor(zpagesExporter));
}
}
}

View File

@ -29,24 +29,20 @@ namespace OpenTelemetry.Trace
/// </summary>
/// <param name="builder"><see cref="TracerProviderBuilder"/> builder to use.</param>
/// <param name="configure">Exporter configuration options.</param>
/// <param name="processorConfigure">Activity processor configuration.</param>
/// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
public static TracerProviderBuilder UseZipkinExporter(this TracerProviderBuilder builder, Action<ZipkinExporterOptions> configure = null, Action<ActivityProcessorPipelineBuilder> processorConfigure = null)
public static TracerProviderBuilder UseZipkinExporter(this TracerProviderBuilder builder, Action<ZipkinExporterOptions> configure = null)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.AddProcessorPipeline(pipeline =>
{
var options = new ZipkinExporterOptions();
configure?.Invoke(options);
var exporterOptions = new ZipkinExporterOptions();
configure?.Invoke(exporterOptions);
var zipkinExporter = new ZipkinExporter(exporterOptions);
var exporter = new ZipkinExporter(options);
processorConfigure?.Invoke(pipeline);
pipeline.SetExporter(exporter);
});
// TODO: Pick Simple vs Batching based on ZipkinExporterOptions
return builder.AddProcessor(new SimpleActivityProcessor(zipkinExporter));
}
}
}

View File

@ -47,7 +47,9 @@ namespace Microsoft.Extensions.DependencyInjection
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Action<TracerProviderBuilder> configure)
{
services.AddOpenTelemetry(() => Sdk.CreateTracerProvider(configure));
var builder = Sdk.CreateTracerProviderBuilder();
configure(builder);
services.AddOpenTelemetry(() => builder.Build());
return services;
}
@ -59,7 +61,12 @@ namespace Microsoft.Extensions.DependencyInjection
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, Action<IServiceProvider, TracerProviderBuilder> configure)
{
services.AddOpenTelemetry(s => Sdk.CreateTracerProvider(builder => configure(s, builder)));
var builder = Sdk.CreateTracerProviderBuilder();
services.AddOpenTelemetry((sp) =>
{
configure(sp, builder);
return builder.Build();
});
return services;
}

View File

@ -16,15 +16,10 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using OpenTelemetry.Metrics;
using OpenTelemetry.Metrics.Export;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using OpenTelemetry.Trace.Internal;
using OpenTelemetry.Trace.Samplers;
using static OpenTelemetry.Metrics.MeterProviderSdk;
namespace OpenTelemetry
@ -73,180 +68,13 @@ namespace OpenTelemetry
}
/// <summary>
/// Creates TracerProvider with the configuration provided.
/// This sets up listeners for all configured ActivitySources and
/// sends activities to the pipeline of Sampler, Processor and Exporter.
/// Creates TracerProviderBuilder which should be used to build
/// TracerProvider.
/// </summary>
/// <param name="configureTracerProviderBuilder">Action to configure TracerProviderBuilder.</param>
/// <returns>TracerProvider instance, which must be disposed upon shutdown.</returns>
public static TracerProvider CreateTracerProvider(Action<TracerProviderBuilder> configureTracerProviderBuilder)
/// <returns>TracerProviderBuilder instance, which should be used to build TracerProvider.</returns>
public static TracerProviderBuilder CreateTracerProviderBuilder()
{
var tracerProviderBuilder = new TracerProviderBuilder();
configureTracerProviderBuilder?.Invoke(tracerProviderBuilder);
var tracerProviderSdk = new TracerProviderSdk();
Sampler sampler = tracerProviderBuilder.Sampler ?? new ParentOrElseSampler(new AlwaysOnSampler());
ActivityProcessor activityProcessor;
if (tracerProviderBuilder.ProcessingPipelines == null || !tracerProviderBuilder.ProcessingPipelines.Any())
{
// if there are no pipelines are configured, use noop processor
activityProcessor = new NoopActivityProcessor();
}
else if (tracerProviderBuilder.ProcessingPipelines.Count == 1)
{
// if there is only one pipeline - use it's outer processor as a
// single processor on the tracerSdk.
var processorFactory = tracerProviderBuilder.ProcessingPipelines[0];
activityProcessor = processorFactory.Build();
}
else
{
// if there are more pipelines, use processor that will broadcast to all pipelines
var processors = new ActivityProcessor[tracerProviderBuilder.ProcessingPipelines.Count];
for (int i = 0; i < tracerProviderBuilder.ProcessingPipelines.Count; i++)
{
processors[i] = tracerProviderBuilder.ProcessingPipelines[i].Build();
}
activityProcessor = new FanOutActivityProcessor(processors);
}
tracerProviderSdk.Resource = tracerProviderBuilder.Resource;
var activitySource = new ActivitySourceAdapter(sampler, activityProcessor, tracerProviderSdk.Resource);
if (tracerProviderBuilder.InstrumentationFactories != null)
{
foreach (var instrumentation in tracerProviderBuilder.InstrumentationFactories)
{
tracerProviderSdk.Instrumentations.Add(instrumentation.Factory(activitySource));
}
}
// This is what subscribes to Activities.
// Think of this as the replacement for DiagnosticListener.AllListeners.Subscribe(onNext => diagnosticListener.Subscribe(..));
tracerProviderSdk.ActivityListener = new ActivityListener
{
// Callback when Activity is started.
ActivityStarted = (activity) =>
{
if (activity.IsAllDataRequested)
{
activity.SetResource(tracerProviderSdk.Resource);
}
activityProcessor.OnStart(activity);
},
// Callback when Activity is stopped.
ActivityStopped = activityProcessor.OnEnd,
// Function which takes ActivitySource and returns true/false to indicate if it should be subscribed to
// or not.
ShouldListenTo = (activitySource) => tracerProviderBuilder.ActivitySourceNames?.Contains(activitySource.Name.ToUpperInvariant()) ?? false,
// Setting this to true means TraceId will be always
// available in sampling callbacks and will be the actual
// traceid used, if activity ends up getting created.
AutoGenerateRootContextTraceId = true,
// This delegate informs ActivitySource about sampling decision when the parent context is an ActivityContext.
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> options) => ComputeActivityDataRequest(options, sampler),
};
ActivitySource.AddActivityListener(tracerProviderSdk.ActivityListener);
tracerProviderSdk.ActivityProcessor = activityProcessor;
return tracerProviderSdk;
}
public static TracerProvider CreateTracerProvider(IEnumerable<string> sources, Sampler sampler = null, Resource resource = null)
{
var activitySources = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
foreach (var name in sources)
{
activitySources[name] = true;
}
var provider = new TracerProviderSdk
{
Resource = resource,
Sampler = sampler,
};
provider.ActivityListener = new ActivityListener
{
// Callback when Activity is started.
ActivityStarted = (activity) =>
{
if (activity.IsAllDataRequested)
{
activity.SetResource(resource);
}
provider.ActivityProcessor?.OnStart(activity);
},
// Callback when Activity is stopped.
ActivityStopped = (activity) =>
{
provider.ActivityProcessor?.OnEnd(activity);
},
// Function which takes ActivitySource and returns true/false to indicate if it should be subscribed to
// or not.
ShouldListenTo = (activitySource) => activitySources.ContainsKey(activitySource.Name),
// Setting this to true means TraceId will be always
// available in sampling callbacks and will be the actual
// traceid used, if activity ends up getting created.
AutoGenerateRootContextTraceId = true,
// This delegate informs ActivitySource about sampling decision when the parent context is an ActivityContext.
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> options) => ComputeActivityDataRequest(options, sampler),
};
ActivitySource.AddActivityListener(provider.ActivityListener);
return provider;
}
internal static ActivityDataRequest ComputeActivityDataRequest(
in ActivityCreationOptions<ActivityContext> options,
Sampler sampler)
{
var isRootSpan = /*TODO: Put back once AutoGenerateRootContextTraceId is removed.
options.Parent.TraceId == default ||*/ options.Parent.SpanId == default;
if (sampler != null)
{
// As we set ActivityListener.AutoGenerateRootContextTraceId = true,
// Parent.TraceId will always be the TraceId of the to-be-created Activity,
// if it get created.
ActivityTraceId traceId = options.Parent.TraceId;
var samplingParameters = new SamplingParameters(
options.Parent,
traceId,
options.Name,
options.Kind,
options.Tags,
options.Links);
var shouldSample = sampler.ShouldSample(samplingParameters);
if (shouldSample.IsSampled)
{
return ActivityDataRequest.AllDataAndRecorded;
}
}
// If it is the root span select PropagationData so the trace ID is preserved
// even if no activity of the trace is recorded (sampled per OpenTelemetry parlance).
return isRootSpan
? ActivityDataRequest.PropagationData
: ActivityDataRequest.None;
return new TracerProviderBuilder();
}
}
}

View File

@ -15,12 +15,14 @@
// </copyright>
using System;
using System.Collections.Generic;
using System.Diagnostics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace.Samplers;
namespace OpenTelemetry.Trace
{
/// <summary>
/// Build TracerProvider pipeline with Sampler, Processors and Exporters.
/// Build TracerProvider with Resource, Sampler, Processors and Instrumentation.
/// </summary>
public class TracerProviderBuilder
{
@ -28,41 +30,18 @@ namespace OpenTelemetry.Trace
{
}
internal List<ActivityProcessorPipelineBuilder> ProcessingPipelines { get; private set; }
internal List<InstrumentationFactory> InstrumentationFactories { get; private set; }
internal Sampler Sampler { get; private set; }
internal Resource Resource { get; private set; } = Resource.Empty;
internal HashSet<string> ActivitySourceNames { get; private set; }
internal ActivityProcessor ActivityProcessor { get; private set; }
internal Dictionary<string, bool> ActivitySourceNames { get; private set; }
internal List<InstrumentationFactory> InstrumentationFactories { get; private set; }
/// <summary>
/// Sets processing and exporting pipeline.
/// </summary>
/// <param name="configure">Function that configures pipeline.</param>
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
public TracerProviderBuilder AddProcessorPipeline(Action<ActivityProcessorPipelineBuilder> configure)
{
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
if (this.ProcessingPipelines == null)
{
this.ProcessingPipelines = new List<ActivityProcessorPipelineBuilder>();
}
var pipelineBuilder = new ActivityProcessorPipelineBuilder();
configure(pipelineBuilder);
this.ProcessingPipelines.Add(pipelineBuilder);
return this;
}
/// <summary>
/// Configures sampler.
/// Sets sampler.
/// </summary>
/// <param name="sampler">Sampler instance.</param>
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
@ -94,10 +73,59 @@ namespace OpenTelemetry.Trace
// Today it ignores version.
if (this.ActivitySourceNames == null)
{
this.ActivitySourceNames = new HashSet<string>();
this.ActivitySourceNames = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
}
this.ActivitySourceNames[activitySourceName] = true;
return this;
}
/// <summary>
/// Adds given activitysource names to the list of subscribed sources.
/// </summary>
/// <param name="activitySourceNames">Activity source names.</param>
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
public TracerProviderBuilder AddActivitySources(IEnumerable<string> activitySourceNames)
{
// TODO: We need to fix the listening model.
// Today it ignores version.
if (this.ActivitySourceNames == null)
{
this.ActivitySourceNames = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
}
foreach (var activitySourceName in activitySourceNames)
{
this.ActivitySourceNames[activitySourceName] = true;
}
return this;
}
/// <summary>
/// Adds processor to the provider.
/// </summary>
/// <param name="activityProcessor">Activity processor to add.</param>
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
public TracerProviderBuilder AddProcessor(ActivityProcessor activityProcessor)
{
if (this.ActivityProcessor == null)
{
this.ActivityProcessor = activityProcessor;
}
else if (this.ActivityProcessor is CompositeActivityProcessor compositeProcessor)
{
compositeProcessor.AddProcessor(activityProcessor);
}
else
{
this.ActivityProcessor = new CompositeActivityProcessor(new[]
{
this.ActivityProcessor,
activityProcessor,
});
}
this.ActivitySourceNames.Add(activitySourceName.ToUpperInvariant());
return this;
}
@ -130,6 +158,108 @@ namespace OpenTelemetry.Trace
return this;
}
public TracerProvider Build()
{
this.Sampler = this.Sampler ?? new ParentOrElseSampler(new AlwaysOnSampler());
var provider = new TracerProviderSdk
{
Resource = this.Resource,
Sampler = this.Sampler,
ActivityProcessor = this.ActivityProcessor,
};
var activitySource = new ActivitySourceAdapter(provider.Sampler, provider.ActivityProcessor, provider.Resource);
if (this.InstrumentationFactories != null)
{
foreach (var instrumentation in this.InstrumentationFactories)
{
provider.Instrumentations.Add(instrumentation.Factory(activitySource));
}
}
provider.ActivityListener = new ActivityListener
{
// Callback when Activity is started.
ActivityStarted = (activity) =>
{
if (activity.IsAllDataRequested)
{
activity.SetResource(this.Resource);
}
provider.ActivityProcessor?.OnStart(activity);
},
// Callback when Activity is stopped.
ActivityStopped = (activity) =>
{
provider.ActivityProcessor?.OnEnd(activity);
},
// Function which takes ActivitySource and returns true/false to indicate if it should be subscribed to
// or not.
ShouldListenTo = (activitySource) =>
{
if (this.ActivitySourceNames == null)
{
return false;
}
return this.ActivitySourceNames.ContainsKey(activitySource.Name);
},
// Setting this to true means TraceId will be always
// available in sampling callbacks and will be the actual
// traceid used, if activity ends up getting created.
AutoGenerateRootContextTraceId = true,
// This delegate informs ActivitySource about sampling decision when the parent context is an ActivityContext.
GetRequestedDataUsingContext = (ref ActivityCreationOptions<ActivityContext> options) => ComputeActivityDataRequest(options, this.Sampler),
};
ActivitySource.AddActivityListener(provider.ActivityListener);
return provider;
}
internal static ActivityDataRequest ComputeActivityDataRequest(
in ActivityCreationOptions<ActivityContext> options,
Sampler sampler)
{
var isRootSpan = /*TODO: Put back once AutoGenerateRootContextTraceId is removed.
options.Parent.TraceId == default ||*/ options.Parent.SpanId == default;
if (sampler != null)
{
// As we set ActivityListener.AutoGenerateRootContextTraceId = true,
// Parent.TraceId will always be the TraceId of the to-be-created Activity,
// if it get created.
ActivityTraceId traceId = options.Parent.TraceId;
var samplingParameters = new SamplingParameters(
options.Parent,
traceId,
options.Name,
options.Kind,
options.Tags,
options.Links);
var shouldSample = sampler.ShouldSample(samplingParameters);
if (shouldSample.IsSampled)
{
return ActivityDataRequest.AllDataAndRecorded;
}
}
// If it is the root span select PropagationData so the trace ID is preserved
// even if no activity of the trace is recorded (sampled per OpenTelemetry parlance).
return isRootSpan
? ActivityDataRequest.PropagationData
: ActivityDataRequest.None;
}
internal readonly struct InstrumentationFactory
{
public readonly string Name;

View File

@ -47,7 +47,7 @@ namespace OpenTelemetry.Trace
}
this.Instrumentations.Clear();
(this.Sampler as IDisposable)?.Dispose();
this.ActivityProcessor?.Dispose();
// Shutdown the listener last so that anything created while instrumentation cleans up will still be processed.

View File

@ -31,13 +31,13 @@ namespace Benchmarks
public OpenTelemetrySdkBenchmarks()
{
using var openTelemetryAlwaysOnSample = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("AlwaysOnSample").SetSampler(new AlwaysOnSampler()));
using var openTelemetryAlwaysOnSample = Sdk.CreateTracerProviderBuilder().AddActivitySource("AlwaysOnSample")
.SetSampler(new AlwaysOnSampler()).Build();
using var openTelemetryAlwaysOffSample = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("AlwaysOffSample").SetSampler(new AlwaysOffSampler()));
using var openTelemetryAlwaysOffSample = Sdk.CreateTracerProviderBuilder().AddActivitySource("AlwaysOffSample")
.SetSampler(new AlwaysOffSampler()).Build();
using var openTelemetryNoop = Sdk.CreateTracerProvider(null);
using var openTelemetryNoop = Sdk.CreateTracerProviderBuilder().Build();
this.alwaysSampleTracer = TracerProvider.Default.GetTracer("AlwaysOnSample");
this.neverSampleTracer = TracerProvider.Default.GetTracer("AlwaysOffSample");

View File

@ -31,7 +31,7 @@ namespace Benchmarks
public OpenTelemetrySdkBenchmarksActivity()
{
// Not configuring pipeline, which will result in default NoopActivityProcessor.
var openTel = Sdk.CreateTracerProvider((builder) => builder.AddActivitySource("BenchMark"));
var openTel = Sdk.CreateTracerProviderBuilder().AddActivitySource("BenchMark");
}
[Benchmark]

View File

@ -54,10 +54,11 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests
endCalled = true;
};
var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.UseJaegerExporter(
null, p => p.AddProcessor((next) => testActivityProcessor)));
var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.AddProcessor(testActivityProcessor)
.UseJaegerExporter()
.Build();
var source = new ActivitySource(ActivitySourceName);
var activity = source.StartActivity("Test Jaeger Activity");

View File

@ -73,10 +73,11 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests
});
// This following is done just to set Resource to Activity.
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(sources[0].Name)
.AddActivitySource(sources[1].Name)
.SetResource(resource));
.SetResource(resource)
.Build();
var activities = new List<Activity>();
Activity activity = null;
@ -258,10 +259,11 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests
endCalled = true;
};
var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.UseOtlpExporter(
null, p => p.AddProcessor((next) => testActivityProcessor)));
.AddProcessor(testActivityProcessor)
.UseOtlpExporter()
.Build();
var source = new ActivitySource(ActivitySourceName);
var activity = source.StartActivity("Test Otlp Activity");

View File

@ -87,10 +87,11 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
endCalled = true;
};
var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.UseZPagesExporter(
processorConfigure: p => p.AddProcessor((next) => testActivityProcessor)));
.AddProcessor(testActivityProcessor)
.UseZPagesExporter()
.Build();
var source = new ActivitySource(ActivitySourceName);
var activity = source.StartActivity("Test Zipkin Activity");
@ -128,10 +129,11 @@ namespace OpenTelemetry.Exporter.ZPages.Tests
ZPagesExporter exporter = new ZPagesExporter(options);
var zpagesProcessor = new ZPagesProcessor(exporter);
var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.UseZPagesExporter(
processorConfigure: p => p.AddProcessor((next) => zpagesProcessor)));
.AddProcessor(zpagesProcessor)
.UseZPagesExporter()
.Build();
var source = new ActivitySource(ActivitySourceName);
var activity0 = source.StartActivity("Test Zipkin Activity");

View File

@ -157,14 +157,16 @@ namespace OpenTelemetry.Exporter.Zipkin.Tests
endCalled = true;
};
var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.AddProcessor(testActivityProcessor)
.UseZipkinExporter(
o =>
{
o.ServiceName = "test-zipkin";
o.Endpoint = new Uri($"http://{this.testServerHost}:{this.testServerPort}/api/v2/spans?requestId={requestId}");
}, p => p.AddProcessor((next) => testActivityProcessor)));
})
.Build();
var source = new ActivitySource(ActivitySourceName);
var activity = source.StartActivity("Test Zipkin Activity");

View File

@ -137,8 +137,8 @@ namespace OpenTelemetry.Instrumentation.AspNet.Tests
var activity = new Activity(ActivityNameAspNet).AddBaggage("Stuff", "123");
activity.SetParentId(expectedTraceId, expectedSpanId, ActivityTraceFlags.Recorded);
var activityProcessor = new Mock<ActivityProcessor>();
using (openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddAspNetInstrumentation(
using (openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddAspNetInstrumentation(
(options) =>
{
options.RequestFilter = httpContext =>
@ -162,7 +162,7 @@ namespace OpenTelemetry.Instrumentation.AspNet.Tests
}
})
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(_ => activityProcessor.Object))))
.AddProcessor(activityProcessor.Object).Build())
{
activity.Start();
this.fakeAspNetDiagnosticSource.Write(

View File

@ -63,10 +63,11 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
var spanProcessor = new Mock<ActivityProcessor>();
void ConfigureTestServices(IServiceCollection services)
{
this.openTelemetrySdk = Sdk.CreateTracerProvider(
(builder) => builder.AddAspNetCoreInstrumentation()
this.openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddAspNetCoreInstrumentation()
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
.AddProcessor(spanProcessor.Object)
.Build();
}
// Arrange
@ -105,8 +106,9 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
.WithWebHostBuilder(builder =>
builder.ConfigureTestServices(services =>
{
this.openTelemetrySdk = Sdk.CreateTracerProvider((builder) => builder.AddAspNetCoreInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
this.openTelemetrySdk = Sdk.CreateTracerProviderBuilder().AddAspNetCoreInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build();
})))
{
using var client = testFactory.CreateClient();
@ -152,9 +154,10 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
.WithWebHostBuilder(builder =>
builder.ConfigureTestServices(services =>
{
this.openTelemetrySdk = Sdk.CreateTracerProvider(
(builder) => builder.AddAspNetCoreInstrumentation((opt) => opt.TextFormat = textFormat.Object)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
this.openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddAspNetCoreInstrumentation((opt) => opt.TextFormat = textFormat.Object)
.AddProcessor(spanProcessor.Object)
.Build();
})))
{
using var client = testFactory.CreateClient();
@ -184,10 +187,10 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
void ConfigureTestServices(IServiceCollection services)
{
this.openTelemetrySdk = Sdk.CreateTracerProvider(
(builder) =>
builder.AddAspNetCoreInstrumentation((opt) => opt.RequestFilter = (ctx) => ctx.Request.Path != "/api/values/2")
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
this.openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddAspNetCoreInstrumentation((opt) => opt.RequestFilter = (ctx) => ctx.Request.Path != "/api/values/2")
.AddProcessor(spanProcessor.Object)
.Build();
}
// Arrange

View File

@ -62,7 +62,7 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
{
services.AddSingleton<CallbackMiddleware.CallbackMiddlewareImpl>(new TestCallbackMiddlewareImpl(statusCode, reasonPhrase));
services.AddOpenTelemetry((builder) => builder.AddAspNetCoreInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
.AddProcessor(spanProcessor.Object));
}))
.CreateClient())
{

View File

@ -84,10 +84,10 @@ namespace OpenTelemetry.Instrumentation.Grpc.Tests
.ConfigureServices(serviceCollection =>
{
this.openTelemetrySdk = Sdk
.CreateTracerProvider(
(builder) => builder
.CreateTracerProviderBuilder()
.AddAspNetCoreInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => this.GrpcServerSpanProcessor.Object)));
.AddProcessor(this.GrpcServerSpanProcessor.Object)
.Build();
})
.UseStartup<Startup>();
});

View File

@ -43,12 +43,12 @@ namespace OpenTelemetry.Instrumentation.Grpc.Tests
var parent = new Activity("parent")
.Start();
using (Sdk.CreateTracerProvider(
(builder) => builder
using (Sdk.CreateTracerProviderBuilder()
.SetSampler(new AlwaysOnSampler())
.AddGrpcClientInstrumentation()
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
.AddProcessor(spanProcessor.Object)
.Build())
{
var channel = GrpcChannel.ForAddress(uri);
var client = new Greeter.GreeterClient(channel);
@ -95,12 +95,12 @@ namespace OpenTelemetry.Instrumentation.Grpc.Tests
var parent = new Activity("parent")
.Start();
using (Sdk.CreateTracerProvider(
(builder) => builder
.SetSampler(new AlwaysOnSampler())
.AddHttpClientInstrumentation()
.AddGrpcClientInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.SetSampler(new AlwaysOnSampler())
.AddGrpcClientInstrumentation()
.AddHttpClientInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build())
{
var channel = GrpcChannel.ForAddress(uri);
var client = new Greeter.GreeterClient(channel);

View File

@ -90,9 +90,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
}
});
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation(o => o.TextFormat = mockTextFormat.Object)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation(o => o.TextFormat = mockTextFormat.Object)
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
await c.SendAsync(request);
@ -143,9 +144,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
parent.TraceStateString = "k1=v1,k2=v2";
parent.ActivityTraceFlags = ActivityTraceFlags.Recorded;
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation((opt) => opt.TextFormat = textFormat.Object)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation((opt) => opt.TextFormat = textFormat.Object)
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
await c.SendAsync(request);
@ -173,9 +175,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
{
var spanProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
await c.GetAsync(this.url);
@ -191,9 +194,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
{
var spanProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
await c.GetAsync(this.url);
@ -217,9 +221,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
request.Headers.Add("traceparent", "00-0123456789abcdef0123456789abcdef-0123456789abcdef-01");
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
await c.SendAsync(request);
@ -232,12 +237,11 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
public async void HttpClientInstrumentationFiltersOutRequests()
{
var spanProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(
(builder) =>
builder.AddHttpClientInstrumentation(
(opt) => opt.FilterFunc = (req) => !req.RequestUri.OriginalString.Contains(this.url))
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation(
(opt) => opt.FilterFunc = (req) => !req.RequestUri.OriginalString.Contains(this.url))
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
await c.GetAsync(this.url);
@ -251,9 +255,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
{
var spanProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build())
{
using var c = new HttpClient();
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(100));

View File

@ -54,10 +54,11 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
using (serverLifeTime)
using (Sdk.CreateTracerProvider(
(builder) => builder.AddHttpClientInstrumentation((opt) => opt.SetHttpFlavor = tc.SetHttpFlavor)
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation((opt) => opt.SetHttpFlavor = tc.SetHttpFlavor)
.AddProcessor(spanProcessor.Object)
.SetResource(expectedResource)
.Build())
{
try
{

View File

@ -59,11 +59,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
public async Task HttpWebRequestInstrumentationInjectsHeadersAsync()
{
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddHttpWebRequestInstrumentation();
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddHttpWebRequestInstrumentation()
.Build();
var request = (HttpWebRequest)WebRequest.Create(this.url);
@ -106,11 +105,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
});
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddHttpWebRequestInstrumentation(options => options.TextFormat = textFormat.Object);
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddHttpWebRequestInstrumentation(options => options.TextFormat = textFormat.Object)
.Build();
var request = (HttpWebRequest)WebRequest.Create(this.url);
@ -146,11 +144,10 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
public async Task HttpWebRequestInstrumentationBacksOffIfAlreadyInstrumented()
{
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddHttpWebRequestInstrumentation();
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddHttpWebRequestInstrumentation()
.Build();
var request = new HttpRequestMessage
{
@ -170,12 +167,11 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
public async Task HttpWebRequestInstrumentationFiltersOutRequests()
{
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddHttpWebRequestInstrumentation(
c => c.FilterFunc = (req) => !req.RequestUri.OriginalString.Contains(this.url));
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddHttpWebRequestInstrumentation(
c => c.FilterFunc = (req) => !req.RequestUri.OriginalString.Contains(this.url))
.Build();
using var c = new HttpClient();
await c.GetAsync(this.url);

View File

@ -47,12 +47,11 @@ namespace OpenTelemetry.Instrumentation.Http.Tests
var expectedResource = Resources.Resources.CreateServiceResource("test-service");
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.SetResource(expectedResource);
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddHttpWebRequestInstrumentation(options => options.SetHttpFlavor = tc.SetHttpFlavor);
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.SetResource(expectedResource)
.AddProcessor(activityProcessor.Object)
.AddHttpWebRequestInstrumentation(options => options.SetHttpFlavor = tc.SetHttpFlavor)
.Build();
tc.Url = HttpTestData.NormalizeValues(tc.Url, host, port);

View File

@ -82,15 +82,14 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
bool isFailure = false)
{
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddSqlClientInstrumentation(options =>
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddSqlClientInstrumentation(options =>
{
options.SetStoredProcedureCommandName = captureStoredProcedureCommandName;
options.SetTextCommandContent = captureTextCommandContent;
});
});
})
.Build();
using SqlConnection sqlConnection = new SqlConnection(SqlConnectionString);
@ -137,14 +136,15 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
using var sqlCommand = sqlConnection.CreateCommand();
var spanProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(
(builder) => builder.AddSqlClientInstrumentation(
using (Sdk.CreateTracerProviderBuilder()
.AddSqlClientInstrumentation(
(opt) =>
{
opt.SetTextCommandContent = captureTextCommandContent;
opt.SetStoredProcedureCommandName = captureStoredProcedureCommandName;
})
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
.AddProcessor(spanProcessor.Object)
.Build())
{
var operationId = Guid.NewGuid();
sqlCommand.CommandType = commandType;
@ -187,9 +187,10 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
using var sqlCommand = sqlConnection.CreateCommand();
var spanProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(
(builder) => builder.AddSqlClientInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
using (Sdk.CreateTracerProviderBuilder()
.AddSqlClientInstrumentation()
.AddProcessor(spanProcessor.Object)
.Build())
{
var operationId = Guid.NewGuid();
sqlCommand.CommandText = "SP_GetOrders";

View File

@ -52,14 +52,13 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
public async Task SuccessfulCommandTest(CommandType commandType, string commandText, bool captureText, bool isFailure = false)
{
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddSqlClientInstrumentation(options =>
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddSqlClientInstrumentation(options =>
{
options.SetStoredProcedureCommandName = captureText;
});
});
})
.Build();
using SqlConnection sqlConnection = new SqlConnection(SqlConnectionString);
@ -105,15 +104,14 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
using FakeBehavingSqlEventSource fakeSqlEventSource = new FakeBehavingSqlEventSource();
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddSqlClientInstrumentation(options =>
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddSqlClientInstrumentation(options =>
{
options.SetStoredProcedureCommandName = captureText;
options.EnableConnectionLevelAttributes = enableConnectionLevelAttributes;
});
});
})
.Build();
int objectId = Guid.NewGuid().GetHashCode();
@ -145,11 +143,10 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
using FakeMisbehavingSqlEventSource fakeSqlEventSource = new FakeMisbehavingSqlEventSource();
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddSqlClientInstrumentation();
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddSqlClientInstrumentation()
.Build();
fakeSqlEventSource.WriteUnknownEventWithNullPayload();
@ -164,11 +161,10 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Tests
using FakeMisbehavingSqlEventSource fakeSqlEventSource = new FakeMisbehavingSqlEventSource();
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddSqlClientInstrumentation();
});
using var shutdownSignal = Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddSqlClientInstrumentation()
.Build();
fakeSqlEventSource.WriteBeginExecuteEvent("arg1");

View File

@ -43,8 +43,9 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation
this.connection = ConnectionMultiplexer.Connect(connectionOptions);
this.sdk = Sdk.CreateTracerProvider(
(builder) => builder.AddRedisInstrumentation(this.connection));
this.sdk = Sdk.CreateTracerProviderBuilder()
.AddRedisInstrumentation(this.connection)
.Build();
}
public void Dispose()

View File

@ -55,11 +55,10 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Tests
using var connection = ConnectionMultiplexer.Connect(connectionOptions);
var activityProcessor = new Mock<ActivityProcessor>();
using (Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddRedisInstrumentation(connection);
}))
using (Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddRedisInstrumentation(connection)
.Build())
{
var db = connection.GetDatabase();
@ -110,11 +109,10 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Tests
var activityProcessor = new Mock<ActivityProcessor>();
Assert.Throws<ArgumentNullException>(() =>
Sdk.CreateTracerProvider(b =>
{
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddRedisInstrumentation(null);
}));
Sdk.CreateTracerProviderBuilder()
.AddProcessor(activityProcessor.Object)
.AddRedisInstrumentation(null)
.Build());
}
private static void VerifyActivityData(Activity activity, bool isSet, EndPoint endPoint)

View File

@ -27,8 +27,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void SetStatus()
{
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.Build();
using var source = new ActivitySource(ActivitySourceName);
using var activity = source.StartActivity(ActivityName);
@ -41,8 +42,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void SetStatusWithDescription()
{
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.Build();
using var source = new ActivitySource(ActivitySourceName);
using var activity = source.StartActivity(ActivityName);
@ -57,8 +59,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void SetCancelledStatus()
{
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.Build();
using var source = new ActivitySource(ActivitySourceName);
using var activity = source.StartActivity(ActivityName);
@ -71,8 +74,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void GetStatusWithNoStatusInActivity()
{
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.Build();
using var source = new ActivitySource(ActivitySourceName);
using var activity = source.StartActivity(ActivityName);
@ -84,8 +88,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void LastSetStatusWins()
{
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.Build();
using var source = new ActivitySource(ActivitySourceName);
using var activity = source.StartActivity(ActivityName);

View File

@ -89,10 +89,11 @@ namespace OpenTelemetry.Trace.Test
using var inMemoryEventListener = new InMemoryEventListener();
var activityExporter = new TestActivityExporter(null, sleepMilliseconds: 5000);
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(0), 1);
using (var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
using (var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor))))
.AddProcessor(activityProcessor)
.Build())
{
var activity1 = this.CreateActivity(ActivityName1);
} // Force everything to flush out of the processor.
@ -105,10 +106,11 @@ namespace OpenTelemetry.Trace.Test
{
var activityExporter = new TestActivityExporter(null);
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, 128);
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor)));
.AddProcessor(activityProcessor)
.Build();
var activity1 = this.CreateActivity(ActivityName1);
var activity2 = this.CreateActivity(ActivityName2);
@ -133,10 +135,11 @@ namespace OpenTelemetry.Trace.Test
});
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, TimeSpan.FromMilliseconds(30), DefaultTimeout, 10);
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor)));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build();
var activities = new List<Activity>();
for (int i = 0; i < 20; i++)
@ -165,10 +168,11 @@ namespace OpenTelemetry.Trace.Test
Thread.Sleep(50);
});
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 1, TimeSpan.FromMilliseconds(100), DefaultTimeout, 1);
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor)));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build();
var activities = new List<Activity>();
for (int i = 0; i < 20; i++)
@ -195,10 +199,11 @@ namespace OpenTelemetry.Trace.Test
});
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, 3);
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor)));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build();
var activity1 = this.CreateActivity(ActivityName1);
var activity2 = this.CreateActivity(ActivityName1);
@ -229,10 +234,11 @@ namespace OpenTelemetry.Trace.Test
int exportCalledCount = 0;
var activityExporter = new TestActivityExporter(_ => Interlocked.Increment(ref exportCalledCount));
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, 1);
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.SetSampler(new ParentOrElseSampler(new AlwaysOffSampler()))
.AddActivitySource(ActivitySourceName)
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor)));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new ParentOrElseSampler(new AlwaysOffSampler()))
.AddProcessor(activityProcessor)
.Build();
var activity1 = this.CreateSampledEndedActivity(ActivityName1);
var activity2 = this.CreateNotSampledEndedActivity(ActivityName2);
@ -257,10 +263,11 @@ namespace OpenTelemetry.Trace.Test
var activityExporter = new TestActivityExporter(_ => resetEvent.WaitOne(TimeSpan.FromSeconds(10)));
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, 128);
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor)));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build();
var activity = Source.StartActivity("foo");
@ -288,10 +295,11 @@ namespace OpenTelemetry.Trace.Test
var activityExporter = new TestActivityExporter(_ => Interlocked.Increment(ref exportCalledCount));
using var activityProcessor =
new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, batchSize);
using (var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor))))
using (var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build())
{
using var inMemoryEventListener = new InMemoryEventListener();
var activities = new List<Activity>();
@ -334,10 +342,11 @@ namespace OpenTelemetry.Trace.Test
using var activityProcessor =
new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, batchSize);
using (var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor))))
using (var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build())
{
var activities = new List<Activity>();
for (int i = 0; i < 100; i++)
@ -376,10 +385,11 @@ namespace OpenTelemetry.Trace.Test
int exportCalledCount = 0;
var activityExporter = new TestActivityExporter(_ => Interlocked.Increment(ref exportCalledCount));
using var activityProcessor = new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, batchSize);
using (var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => activityProcessor))))
using (var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(activityProcessor)
.Build())
{
using var inMemoryEventListener = new InMemoryEventListener();
var activities = new List<Activity>();
@ -421,10 +431,11 @@ namespace OpenTelemetry.Trace.Test
using var inMemoryEventListener = new InMemoryEventListener();
using (var batchingActivityProcessor = new BatchingActivityProcessor(activityExporter, 128, DefaultDelay, DefaultTimeout, batchSize))
{
using var openTelemetrySdk = Sdk.CreateTracerProvider(b => b
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessorPipeline(pp => pp.AddProcessor(ap => batchingActivityProcessor)));
using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(new AlwaysOnSampler())
.AddProcessor(batchingActivityProcessor)
.Build();
for (int i = 0; i < 3; i++)
{
activities.Add(this.CreateActivity(i.ToString()));

View File

@ -37,12 +37,12 @@ namespace OpenTelemetry.Trace.Test
public SimpleActivityProcessorTest()
{
this.activityExporter = new TestActivityExporter(null);
this.openTelemetry = Sdk.CreateTracerProvider(b => b
this.openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.AddProcessorPipeline(p => p
.SetExporter(this.activityExporter)
.SetExportingProcessor(e => new SimpleActivityProcessor(e)))
.SetSampler(new AlwaysOnSampler()));
.SetSampler(new AlwaysOnSampler())
.AddProcessor(new SimpleActivityProcessor(this.activityExporter))
.Build();
this.activitySource = new ActivitySource(ActivitySourceName);
}
@ -56,13 +56,13 @@ namespace OpenTelemetry.Trace.Test
public void ThrowsInExporter()
{
this.activityExporter = new TestActivityExporter(_ => throw new ArgumentException("123"));
this.openTelemetry = Sdk.CreateTracerProvider(b => b
.AddActivitySource("cijo")
.AddProcessorPipeline(p => p
.SetExporter(this.activityExporter)
.SetExportingProcessor(e => new SimpleActivityProcessor(e))));
this.openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("random")
.SetSampler(new AlwaysOnSampler())
.AddProcessor(new SimpleActivityProcessor(this.activityExporter))
.Build();
ActivitySource source = new ActivitySource("cijo");
ActivitySource source = new ActivitySource("random");
var activity = source.StartActivity("somename");
// does not throw
@ -73,13 +73,12 @@ namespace OpenTelemetry.Trace.Test
public void ProcessorDoesNotBlockOnExporter()
{
this.activityExporter = new TestActivityExporter(async _ => await Task.Delay(500));
this.openTelemetry = Sdk.CreateTracerProvider(b => b
.AddActivitySource("cijo")
.AddProcessorPipeline(p => p
.SetExporter(this.activityExporter)
.SetExportingProcessor(e => new SimpleActivityProcessor(e))));
this.openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("random")
.AddProcessor(new SimpleActivityProcessor(this.activityExporter))
.Build();
ActivitySource source = new ActivitySource("cijo");
ActivitySource source = new ActivitySource("random");
var activity = source.StartActivity("somename");
// does not block

View File

@ -29,9 +29,10 @@ namespace OpenTelemetry.Tests.Implementation.Trace
using var activitySource = new ActivitySource(nameof(this.ResourceGetsAssociatedWithActivity));
var expectedResource = Resources.Resources.CreateServiceResource("ServiceNameAbc");
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource(nameof(this.ResourceGetsAssociatedWithActivity))
.SetResource(expectedResource));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(nameof(this.ResourceGetsAssociatedWithActivity))
.SetResource(expectedResource)
.Build();
using (var root = activitySource.StartActivity("root"))
{
@ -45,8 +46,9 @@ namespace OpenTelemetry.Tests.Implementation.Trace
using var activitySource = new ActivitySource(nameof(this.ResourceGetsAssociatedWithActivity));
var expectedResource = Resource.Empty;
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource(nameof(this.ResourceGetsAssociatedWithActivity)));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(nameof(this.ResourceGetsAssociatedWithActivity))
.Build();
using (var root = activitySource.StartActivity("root"))
{

View File

@ -29,12 +29,10 @@ namespace OpenTelemetry.Tests.Implementation.Trace
{
var testSampler = new TestSampler();
using var activitySource = new ActivitySource(ActivitySourceName);
using var sdk = Sdk.CreateTracerProvider(
(tpbuilder) =>
{
tpbuilder.AddActivitySource(ActivitySourceName);
tpbuilder.SetSampler(testSampler);
});
using var sdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(testSampler)
.Build();
// OpenTelemetry Sdk is expected to set default to W3C.
Assert.True(Activity.DefaultIdFormat == ActivityIdFormat.W3C);
@ -107,12 +105,10 @@ namespace OpenTelemetry.Tests.Implementation.Trace
{
var testSampler = new TestSampler();
using var activitySource = new ActivitySource(ActivitySourceName);
using var sdk = Sdk.CreateTracerProvider(
(tpbuilder) =>
{
tpbuilder.AddActivitySource(ActivitySourceName);
tpbuilder.SetSampler(testSampler);
});
using var sdk = Sdk.CreateTracerProviderBuilder()
.AddActivitySource(ActivitySourceName)
.SetSampler(testSampler)
.Build();
testSampler.DesiredSamplingResult = new SamplingResult(true);
using (var activity = activitySource.StartActivity("root"))

View File

@ -59,8 +59,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartRootSpan_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span1 = this.tracer.StartRootSpan(null);
Assert.Null(span1.Activity.DisplayName);
@ -75,8 +76,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartSpan_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span1 = this.tracer.StartSpan(null);
Assert.Null(span1.Activity.DisplayName);
@ -91,8 +93,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartActiveSpan_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span1 = this.tracer.StartActiveSpan(null);
Assert.Null(span1.Activity.DisplayName);
@ -107,8 +110,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartSpan_FromParent_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span1 = this.tracer.StartSpan(null, SpanKind.Client, TelemetrySpan.NoopInstance);
Assert.Null(span1.Activity.DisplayName);
@ -120,8 +124,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartSpan_FromParentContext_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var blankContext = default(SpanContext);
@ -135,8 +140,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartActiveSpan_FromParent_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span1 = this.tracer.StartActiveSpan(null, SpanKind.Client, TelemetrySpan.NoopInstance);
Assert.Null(span1.Activity.DisplayName);
@ -148,8 +154,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartActiveSpan_FromParentContext_BadArgs_NullSpanName()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var blankContext = default(SpanContext);
@ -163,8 +170,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void Tracer_StartActiveSpan_CreatesActiveSpan()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span1 = this.tracer.StartActiveSpan("Test");
Assert.Equal(span1.Activity.SpanId, this.tracer.CurrentSpan.Context.SpanId);
@ -186,16 +194,18 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void GetCurrentSpanBlank()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
Assert.False(this.tracer.CurrentSpan.Context.IsValid);
}
[Fact]
public void GetCurrentSpanBlankWontThrowOnEnd()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var current = this.tracer.CurrentSpan;
current.End();
}
@ -203,8 +213,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void GetCurrentSpan()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span = this.tracer.StartSpan("foo");
this.tracer.WithSpan(span);
@ -216,8 +227,9 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void CreateSpan_Sampled()
{
using var openTelemetry = Sdk.CreateTracerProvider(
(builder) => builder.AddActivitySource("tracername"));
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.Build();
var span = this.tracer.StartSpan("foo");
Assert.True(span.IsRecording);
}
@ -225,9 +237,10 @@ namespace OpenTelemetry.Trace.Test
[Fact]
public void CreateSpan_NotSampled()
{
using var openTelemetry = Sdk.CreateTracerProvider(b => b
using var openTelemetry = Sdk.CreateTracerProviderBuilder()
.AddActivitySource("tracername")
.SetSampler(new AlwaysOffSampler()));
.SetSampler(new AlwaysOffSampler())
.Build();
var span = this.tracer.StartSpan("foo");
Assert.False(span.IsRecording);