diff --git a/README.md b/README.md index b524fc00d..c6eb1433f 100644 --- a/README.md +++ b/README.md @@ -357,22 +357,19 @@ the Compact Thrift API port. You can configure the Jaeger exporter by following 3. See the [sample][jaeger-sample] for an example of how to use the exporter. ```csharp -var jaegerOptions = new JaegerExporterOptions() -{ - ServiceName = "jaeger-test", - AgentHost = -}; - -using (var tracerFactory = TracerFactory.Create(builder => builder - .AddProcessorPipeline(c => c.SetExporter(new JaegerTraceExporter(jaegerOptions))))) +using (var tracerFactory = TracerFactory.Create( + builder => builder.UseJaeger(o => + { + o.ServiceName = "jaeger-test"; + o.AgentHost = ""; + }))) { var tracer = tracerFactory.GetTracer("jaeger-test"); - var span = tracer - .SpanBuilder("incoming request") - .StartSpan(); - - await Task.Delay(1000); - span.End(); + using (tracer.StartActiveSpan("incoming request", out var span)) + { + span.SetAttribute("custom-attribute", 55); + await Task.Delay(1000); + } } ``` diff --git a/samples/Exporters/TestJaeger.cs b/samples/Exporters/TestJaeger.cs index 23dd7cdf3..c14d74a2b 100644 --- a/samples/Exporters/TestJaeger.cs +++ b/samples/Exporters/TestJaeger.cs @@ -26,17 +26,14 @@ namespace Samples { internal static object Run(string host, int port) { - // Configure exporter to export traces to Jaeger - var jaegerOptions = new JaegerExporterOptions() - { - ServiceName = "jaeger-test", - AgentHost = host, - AgentPort = port, - }; - - // Create a tracer. - using (var tracerFactory = TracerFactory.Create(builder => builder - .AddProcessorPipeline(c => c.SetExporter(new JaegerTraceExporter(jaegerOptions))))) + // Create a tracer. + using (var tracerFactory = TracerFactory.Create( + builder => builder.UseJaeger(o => + { + o.ServiceName = "jaeger-test"; + o.AgentHost = host; + o.AgentPort = port; + }))) { var tracer = tracerFactory.GetTracer("jaeger-test"); diff --git a/src/OpenTelemetry.Exporter.Jaeger/TracerBuilderExtensions.cs b/src/OpenTelemetry.Exporter.Jaeger/TracerBuilderExtensions.cs new file mode 100644 index 000000000..7a3268a82 --- /dev/null +++ b/src/OpenTelemetry.Exporter.Jaeger/TracerBuilderExtensions.cs @@ -0,0 +1,86 @@ +// +// Copyright 2018, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using OpenTelemetry.Exporter.Jaeger; +using OpenTelemetry.Trace.Export; + +namespace OpenTelemetry.Trace.Configuration +{ + /// + /// Extension methods to simplify registering a Jaeger exporter. + /// + public static class TracerBuilderExtensions + { + /// + /// Registers a Jaeger exporter. + /// + /// Trace builder to use. + /// Exporter configuration options. + /// The instance of to chain the calls. + public static TracerBuilder UseJaeger(this TracerBuilder builder, Action configure) + { + if (builder == null) + { + throw new ArgumentNullException(nameof(builder)); + } + + if (configure == null) + { + throw new ArgumentNullException(nameof(configure)); + } + + var options = new JaegerExporterOptions(); + configure(options); + return builder.AddProcessorPipeline(b => b + .SetExporter(new JaegerTraceExporter(options)) + .SetExportingProcessor(e => new BatchingSpanProcessor(e))); + } + + /// + /// Registers Jaeger exporter. + /// + /// Trace builder to use. + /// Exporter configuration options. + /// Span processor configuration. + /// The instance of to chain the calls. + public static TracerBuilder UseJaeger(this TracerBuilder builder, Action configure, Action processorConfigure) + { + if (builder == null) + { + throw new ArgumentNullException(nameof(builder)); + } + + if (configure == null) + { + throw new ArgumentNullException(nameof(configure)); + } + + if (processorConfigure == null) + { + throw new ArgumentNullException(nameof(processorConfigure)); + } + + var options = new JaegerExporterOptions(); + configure(options); + return builder.AddProcessorPipeline(b => + { + b.SetExporter(new JaegerTraceExporter(options)); + processorConfigure.Invoke(b); + }); + } + } +}