public void ScopeManager_NotNull() { var shim = TracerShim.Create(tracer); // Internals of the ScopeManagerShim tested elsewhere Assert.NotNull(shim.ScopeManager as ScopeManagerShim); }
public void Extract_ArgumentValidation() { var shim = TracerShim.Create(tracer); Assert.Throws <ArgumentNullException>(() => shim.Extract(null, new Mock <ITextMap>().Object)); Assert.Throws <ArgumentNullException>(() => shim.Extract(new Mock <IFormat <ITextMap> >().Object, null)); }
internal static object Run(OpenTracingShimOptions options) { // Enable OpenTelemetry for the source "MyCompany.MyProduct.MyWebServer" // and use Console exporter. using var openTelemetry = Sdk.CreateTracerProvider( (builder) => builder.AddActivitySource("MyCompany.MyProduct.MyWebServer") .SetResource(Resources.CreateServiceResource("MyServiceName")) .UseConsoleExporter(opt => opt.DisplayAsJson = options.DisplayAsJson)); // The above line is required only in applications // which decide to use OpenTelemetry. // Following shows how to use the OpenTracing shim var tracer = new TracerShim(TracerProvider.Default.GetTracer("MyCompany.MyProduct.MyWebServer"), new TraceContextFormat()); using (IScope parentScope = tracer.BuildSpan("Parent").StartActive(finishSpanOnDispose: true)) { parentScope.Span.SetTag("my", "value"); parentScope.Span.SetOperationName("parent span new name"); // The child scope will automatically use parentScope as its parent. using (IScope childScope = tracer.BuildSpan("Child").StartActive(finishSpanOnDispose: true)) { childScope.Span.SetTag("Child Tag", "Child Tag Value").SetTag("ch", "value").SetTag("more", "attributes"); } } System.Console.WriteLine("Press Enter key to exit."); return(null); }
public void BuildSpan_NotNull() { var shim = TracerShim.Create(tracer); // Internals of the SpanBuilderShim tested elsewhere Assert.NotNull(shim.BuildSpan("foo") as SpanBuilderShim); }
public void Extract_ArgumentValidation() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, new TextMapPropagator()); Assert.Throws <ArgumentNullException>(() => shim.Extract(null, new Mock <ITextMap>().Object)); Assert.Throws <ArgumentNullException>(() => shim.Extract(new Mock <IFormat <ITextMap> >().Object, null)); }
public void BuildSpan_NotNull() { var tracer = TracerProvider.GetTracer(TracerName); var shim = new TracerShim(tracer, new TraceContextFormat()); // Internals of the SpanBuilderShim tested elsewhere Assert.NotNull(shim.BuildSpan("foo") as SpanBuilderShim); }
public void BuildSpan_NotNull() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, new TextMapPropagator()); // Internals of the SpanBuilderShim tested elsewhere Assert.NotNull(shim.BuildSpan("foo") as SpanBuilderShim); }
public void BuildSpan_NotNull() { var tracerMock = new Mock <Trace.ITracer>(); var shim = TracerShim.Create(tracerMock.Object); // Internals of the SpanBuilderShim tested elsewhere Assert.NotNull(shim.BuildSpan("foo") as SpanBuilderShim); }
public void ScopeManager_NotNull() { var tracerMock = new Mock <Trace.ITracer>(); var shim = TracerShim.Create(tracerMock.Object); // Internals of the ScopeManagerShim tested elsewhere Assert.NotNull(shim.ScopeManager as ScopeManagerShim); }
public void BuildSpan_NotNull() { var tracerMock = new Mock <Trace.Tracer>(); var shim = new TracerShim(tracerMock.Object, new TraceContextFormat(), new BinaryFormat()); // Internals of the SpanBuilderShim tested elsewhere Assert.NotNull(shim.BuildSpan("foo") as SpanBuilderShim); }
public void ScopeManager_NotNull() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, new TextMapPropagator()); // Internals of the ScopeManagerShim tested elsewhere Assert.NotNull(shim.ScopeManager as ScopeManagerShim); }
public void Extract_ArgumentValidation() { var tracerMock = new Mock <Trace.Tracer>(); var shim = new TracerShim(tracerMock.Object, new TraceContextFormat(), new BinaryFormat()); Assert.Throws <ArgumentNullException>(() => shim.Extract(null, new Mock <ITextMap>().Object)); Assert.Throws <ArgumentNullException>(() => shim.Extract(new Mock <IFormat <ITextMap> >().Object, null)); }
public void ScopeManager_NotNull() { var tracer = TracerProvider.GetTracer(TracerName); var shim = new TracerShim(tracer, new TraceContextFormat()); // Internals of the ScopeManagerShim tested elsewhere Assert.NotNull(shim.ScopeManager as ScopeManagerShim); }
public void ScopeManager_NotNull() { var tracerMock = new Mock <Trace.Tracer>(); var shim = new TracerShim(tracerMock.Object, new TraceContextFormat(), new BinaryFormat()); // Internals of the ScopeManagerShim tested elsewhere Assert.NotNull(shim.ScopeManager as ScopeManagerShim); }
public void Inject_Ok() { var shim = TracerShim.Create(tracer); var spanContextShim = new SpanContextShim(Defaults.GetOpenTelemetrySpanContext()); var mockCarrier = new Mock <ITextMap>(); shim.Inject(spanContextShim, BuiltinFormats.TextMap, mockCarrier.Object); // Verify that the carrier mock was invoked at least one time. mockCarrier.Verify(x => x.Set(It.IsAny <string>(), It.IsAny <string>()), Times.AtLeastOnce); }
public void Inject_ArgumentValidation() { var shim = TracerShim.Create(tracer); var spanContextShim = new SpanContextShim(Defaults.GetOpenTelemetrySpanContext()); var mockFormat = new Mock <IFormat <ITextMap> >(); var mockCarrier = new Mock <ITextMap>(); Assert.Throws <ArgumentNullException>(() => shim.Inject(null, mockFormat.Object, mockCarrier.Object)); Assert.Throws <ArgumentException>(() => shim.Inject(new Mock <ISpanContext>().Object, mockFormat.Object, mockCarrier.Object)); Assert.Throws <ArgumentNullException>(() => shim.Inject(spanContextShim, null, mockCarrier.Object)); Assert.Throws <ArgumentNullException>(() => shim.Inject(spanContextShim, mockFormat.Object, null)); }
public void Extract_UnknownFormatIgnored() { var shim = TracerShim.Create(tracer); var spanContextShim = new SpanContextShim(Defaults.GetOpenTelemetrySpanContext()); // Only two specific types of ITextMap are supported, and neither is a Mock. var mockCarrier = new Mock <ITextMap>(); var context = shim.Extract(new Mock <IFormat <ITextMap> >().Object, mockCarrier.Object); // Verify that the carrier mock was never called. mockCarrier.Verify(x => x.GetEnumerator(), Times.Never); }
public void Extract_UnknownFormatIgnored() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, new TextMapPropagator()); var spanContextShim = new SpanContextShim(new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None)); // Only two specific types of ITextMap are supported, and neither is a Mock. var mockCarrier = new Mock <ITextMap>(); var context = shim.Extract(new Mock <IFormat <ITextMap> >().Object, mockCarrier.Object); // Verify that the carrier mock was never called. mockCarrier.Verify(x => x.GetEnumerator(), Times.Never); }
public void Inject_UnknownFormatIgnored() { var shim = TracerShim.Create(NoopTracer.Instance); var spanContextShim = new SpanContextShim(Defaults.GetOpenTelemetrySpanContext()); // Only two specific types of ITextMap are supported, and neither is a Mock. var mockCarrier = new Mock <ITextMap>(); shim.Inject(spanContextShim, new Mock <IFormat <ITextMap> >().Object, mockCarrier.Object); // Verify that the carrier mock was never called. mockCarrier.Verify(x => x.Set(It.IsAny <string>(), It.IsAny <string>()), Times.Never); }
public void Inject_ArgumentValidation() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, new TextMapPropagator()); var spanContextShim = new SpanContextShim(new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None)); var mockFormat = new Mock <IFormat <ITextMap> >(); var mockCarrier = new Mock <ITextMap>(); Assert.Throws <ArgumentNullException>(() => shim.Inject(null, mockFormat.Object, mockCarrier.Object)); Assert.Throws <ArgumentException>(() => shim.Inject(new Mock <ISpanContext>().Object, mockFormat.Object, mockCarrier.Object)); Assert.Throws <ArgumentNullException>(() => shim.Inject(spanContextShim, null, mockCarrier.Object)); Assert.Throws <ArgumentNullException>(() => shim.Inject(spanContextShim, mockFormat.Object, null)); }
public void Inject_UnknownFormatIgnored() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, new TraceContextFormat()); var spanContextShim = new SpanContextShim(new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded)); // Only two specific types of ITextMap are supported, and neither is a Mock. var mockCarrier = new Mock <ITextMap>(); shim.Inject(spanContextShim, new Mock <IFormat <ITextMap> >().Object, mockCarrier.Object); // Verify that the carrier mock was never called. mockCarrier.Verify(x => x.Set(It.IsAny <string>(), It.IsAny <string>()), Times.Never); }
public void InjectExtract_TextMap_Ok() { var carrier = new TextMapCarrier(); var spanContextShim = new SpanContextShim(new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None)); var format = new TextMapPropagator(); var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new TracerShim(tracer, format); // first inject shim.Inject(spanContextShim, BuiltinFormats.TextMap, carrier); // then extract var extractedSpanContext = shim.Extract(BuiltinFormats.TextMap, carrier); AssertOpenTracerSpanContextEqual(spanContextShim, extractedSpanContext); }
public void InjectExtract_Binary_Ok() { var tracerMock = new Mock <Trace.Tracer>(); var carrier = new BinaryCarrier(); var spanContextShim = new SpanContextShim(Defaults.GetOpenTelemetrySpanContext()); var format = new BinaryFormat(); var shim = new TracerShim(tracerMock.Object, new TraceContextFormat(), format); // first inject shim.Inject(spanContextShim, BuiltinFormats.Binary, carrier); // then extract var extractedSpanContext = shim.Extract(BuiltinFormats.Binary, carrier); AssertOpenTracerSpanContextEqual(spanContextShim, extractedSpanContext); }
public void Extract_InvalidTraceParent() { var shim = TracerShim.Create(tracer); var mockCarrier = new Mock <ITextMap>(); // The ProxyTracer uses OpenTelemetry.Context.Propagation.TraceContextFormat, so we need to satisfy the traceparent key at the least var carrierMap = new Dictionary <string, string> { // This is an invalid traceparent value { "traceparent", "unused" }, }; mockCarrier.Setup(x => x.GetEnumerator()).Returns(carrierMap.GetEnumerator()); var spanContextShim = shim.Extract(BuiltinFormats.TextMap, mockCarrier.Object) as SpanContextShim; // Verify that the carrier was called mockCarrier.Verify(x => x.GetEnumerator(), Times.Once); Assert.Null(spanContextShim); }
public void InjectExtract_TextMap_Ok() { var tracerMock = new Mock <Trace.ITracer>(); var carrier = new TextMapCarrier(); var spanContextShim = new SpanContextShim(Defaults.GetOpenTelemetrySpanContext()); var format = new TraceContextFormat(); tracerMock.Setup(x => x.TextFormat).Returns(format); var shim = TracerShim.Create(tracerMock.Object); // first inject shim.Inject(spanContextShim, BuiltinFormats.TextMap, carrier); // then extract var extractedSpanContext = shim.Extract(BuiltinFormats.TextMap, carrier); AssertOpenTracerSpanContextEqual(spanContextShim, extractedSpanContext); }
internal static object Run(OpenTracingShimOptions options) { // Enable OpenTelemetry for the source "MyCompany.MyProduct.MyWebServer" // and use Console exporter. using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyServiceName")) .AddConsoleExporter() .Build(); // Instantiate the OpenTracing shim. The underlying OpenTelemetry tracer will create // spans using the "MyCompany.MyProduct.MyWebServer" source. var tracer = new TracerShim( TracerProvider.Default.GetTracer("MyCompany.MyProduct.MyWebServer"), Propagators.DefaultTextMapPropagator); // Not necessary for this example, though it is best practice per // the OpenTracing project to register a GlobalTracer. OpenTracing.Util.GlobalTracer.Register(tracer); // The code below is meant to resemble application code that has been instrumented // with the OpenTracing API. using (IScope parentScope = tracer.BuildSpan("Parent").StartActive(finishSpanOnDispose: true)) { parentScope.Span.SetTag("my", "value"); parentScope.Span.SetOperationName("parent span new name"); // The child scope will automatically use parentScope as its parent. using (IScope childScope = tracer.BuildSpan("Child").StartActive(finishSpanOnDispose: true)) { childScope.Span.SetTag("Child Tag", "Child Tag Value").SetTag("ch", "value").SetTag("more", "attributes"); } } System.Console.WriteLine("Press Enter key to exit."); System.Console.ReadLine(); return(null); }
public void Extract_Ok() { var shim = TracerShim.Create(tracer); var mockCarrier = new Mock <ITextMap>(); // The ProxyTracer uses OpenTelemetry.Context.Propagation.TraceContextFormat, so we need to satisfy that. var traceContextFormat = new TraceContextFormat(); var spanContext = Defaults.GetOpenTelemetrySpanContext(); var carrierMap = new Dictionary <string, string>(); // inject the SpanContext into the carrier map traceContextFormat.Inject <Dictionary <string, string> >(spanContext, carrierMap, (map, key, value) => map.Add(key, value)); // send the populated carrier map to the extract method. mockCarrier.Setup(x => x.GetEnumerator()).Returns(carrierMap.GetEnumerator()); var spanContextShim = shim.Extract(BuiltinFormats.TextMap, mockCarrier.Object) as SpanContextShim; // Verify that the carrier was called mockCarrier.Verify(x => x.GetEnumerator(), Times.Once); Assert.Equal(spanContext, spanContextShim.SpanContext); }
/// <summary> /// Initialize the OpenTelemetry SDK with a pre-defined set of exporters, shims, and /// instrumentations. /// </summary> public static void Initialize() { if (Interlocked.Exchange(ref _firstInitialization, value: 0) != 1) { // Initialize() was already called before return; } try { if (TracerSettings.LoadTracerAtStartup || MeterSettings.LoadMetricsAtStartup) { // Initialize SdkSelfDiagnosticsEventListener to create an EventListener for the OpenTelemetry SDK _sdkEventListener = new(EventLevel.Warning); // Register to shutdown events AppDomain.CurrentDomain.ProcessExit += OnExit; AppDomain.CurrentDomain.DomainUnload += OnExit; if (TracerSettings.FlushOnUnhandledException || MeterSettings.FlushOnUnhandledException) { AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; } } if (TracerSettings.LoadTracerAtStartup) { var builder = Sdk .CreateTracerProviderBuilder() .SetResourceBuilder(_resourceBuilder) .UseEnvironmentVariables(TracerSettings) .SetSampler(new AlwaysOnSampler()) .InvokePlugins(TracerSettings.TracerPlugins); _tracerProvider = builder.Build(); Logger.Information("OpenTelemetry tracer initialized."); } if (MeterSettings.LoadMetricsAtStartup) { var builder = Sdk .CreateMeterProviderBuilder() .SetResourceBuilder(_resourceBuilder) .UseEnvironmentVariables(MeterSettings) .InvokePlugins(MeterSettings.MetricPlugins); _meterProvider = builder.Build(); Logger.Information("OpenTelemetry meter initialized."); } } catch (Exception ex) { Logger.Error(ex, "OpenTelemetry SDK load exception."); throw; } try { if (_tracerProvider is not null) { // Instantiate the OpenTracing shim. The underlying OpenTelemetry tracer will create // spans using the "OpenTelemetry.AutoInstrumentation.OpenTracingShim" source. var openTracingShim = new TracerShim( _tracerProvider.GetTracer("OpenTelemetry.AutoInstrumentation.OpenTracingShim"), Propagators.DefaultTextMapPropagator); // This registration must occur prior to any reference to the OpenTracing tracer: // otherwise the no-op tracer is going to be used by OpenTracing instead. GlobalTracer.RegisterIfAbsent(openTracingShim); Logger.Information("OpenTracingShim loaded."); } else { Logger.Information("OpenTracingShim was not loaded as the provider is not initialized."); } } catch (Exception ex) { Logger.Error(ex, "OpenTracingShim exception."); throw; } }
public void CtorArgumentValidation() { Assert.Throws <ArgumentNullException>(() => TracerShim.Create(null)); }