Add GlobalPropagators API and have instrumentation default to it (#1428)
* Add GlobalPropagators API and have instrumentation default to it * changelog * fix name * reset after * min comment address * move id format to same place as context propagator * renam * renai * text initialize correctly * modify microsoervice example to pick global propagator * make Global propagator get only in api * Add SetDefaultPropagato to SDK
This commit is contained in:
parent
ddac284e53
commit
097925980d
|
|
@ -28,7 +28,7 @@ namespace Utils.Messaging
|
|||
public class MessageSender : IDisposable
|
||||
{
|
||||
private static readonly ActivitySource ActivitySource = new ActivitySource(nameof(MessageSender));
|
||||
private static readonly TextMapPropagator Propagator = new TraceContextPropagator();
|
||||
private static readonly TextMapPropagator Propagator = Propagators.DefaultTextMapPropagator;
|
||||
|
||||
private readonly ILogger<MessageSender> logger;
|
||||
private readonly IConnection connection;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
to CompositeTextMapPropagator. IPropagator is renamed to TextMapPropagator
|
||||
and changed from interface to abstract class.
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1427))
|
||||
* Added GlobalPropagators API via Propagators.DefaultTextMapPropagator.
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1428))
|
||||
|
||||
## 0.7.0-beta.1
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
// <copyright file="NoopTextMapPropagator.cs" company="OpenTelemetry Authors">
|
||||
// Copyright The 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.
|
||||
// </copyright>
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace OpenTelemetry.Context.Propagation
|
||||
{
|
||||
internal class NoopTextMapPropagator : TextMapPropagator
|
||||
{
|
||||
private static readonly PropagationContext DefaultPropagationContext = default;
|
||||
|
||||
public override ISet<string> Fields => null;
|
||||
|
||||
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
|
||||
{
|
||||
return DefaultPropagationContext;
|
||||
}
|
||||
|
||||
public override void Inject<T>(PropagationContext context, T carrier, Action<T, string, string> setter)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
// <copyright file="Propagators.cs" company="OpenTelemetry Authors">
|
||||
// Copyright The 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.
|
||||
// </copyright>
|
||||
|
||||
namespace OpenTelemetry.Context.Propagation
|
||||
{
|
||||
/// <summary>
|
||||
/// Propagators allow setting the global default Propagators.
|
||||
/// </summary>
|
||||
public static class Propagators
|
||||
{
|
||||
private static readonly TextMapPropagator Noop = new NoopTextMapPropagator();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Default TextMapPropagator to be used.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Setting this can be done only from Sdk.
|
||||
/// </remarks>
|
||||
public static TextMapPropagator DefaultTextMapPropagator { get; internal set; } = Noop;
|
||||
|
||||
internal static void Reset()
|
||||
{
|
||||
DefaultTextMapPropagator = Noop;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -27,13 +27,10 @@ namespace OpenTelemetry.Instrumentation.AspNet
|
|||
public class AspNetInstrumentationOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets <see cref="TextMapPropagator"/> for context propagation. Default value: <see cref="CompositeTextMapPropagator"/> with <see cref="TraceContextPropagator"/> & <see cref="BaggagePropagator"/>.
|
||||
/// Gets or sets <see cref="TextMapPropagator"/> for context propagation.
|
||||
/// By default, <see cref="Propagators.DefaultTextMapPropagator" /> will be used.
|
||||
/// </summary>
|
||||
public TextMapPropagator Propagator { get; set; } = new CompositeTextMapPropagator(new TextMapPropagator[]
|
||||
{
|
||||
new TraceContextPropagator(),
|
||||
new BaggagePropagator(),
|
||||
});
|
||||
public TextMapPropagator Propagator { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a Filter function to filter instrumentation for requests on a per request basis.
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
to CompositeTextMapPropagator. IPropagator is renamed to TextMapPropagator
|
||||
and changed from interface to abstract class.
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1427))
|
||||
* Propagators.DefaultTextMapPropagator will be used as the default Propagator
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1428))
|
||||
|
||||
## 0.7.0-beta.1
|
||||
|
||||
|
|
|
|||
|
|
@ -69,10 +69,11 @@ namespace OpenTelemetry.Instrumentation.AspNet.Implementation
|
|||
|
||||
var request = context.Request;
|
||||
var requestValues = request.Unvalidated;
|
||||
var textMapPropagator = this.options.Propagator ?? Propagators.DefaultTextMapPropagator;
|
||||
|
||||
if (!(this.options.Propagator is TraceContextPropagator))
|
||||
if (!(textMapPropagator is TraceContextPropagator))
|
||||
{
|
||||
var ctx = this.options.Propagator.Extract(default, request, HttpRequestHeaderValuesGetter);
|
||||
var ctx = textMapPropagator.Extract(default, request, HttpRequestHeaderValuesGetter);
|
||||
|
||||
if (ctx.ActivityContext.IsValid()
|
||||
&& ctx.ActivityContext != new ActivityContext(activity.TraceId, activity.ParentSpanId, activity.ActivityTraceFlags, activity.TraceStateString, true))
|
||||
|
|
@ -139,7 +140,8 @@ namespace OpenTelemetry.Instrumentation.AspNet.Implementation
|
|||
Activity activityToEnrich = activity;
|
||||
Activity createdActivity = null;
|
||||
|
||||
bool isCustomPropagator = !(this.options.Propagator is TraceContextPropagator);
|
||||
var textMapPropagator = this.options.Propagator ?? Propagators.DefaultTextMapPropagator;
|
||||
bool isCustomPropagator = !(textMapPropagator is TraceContextPropagator);
|
||||
|
||||
if (isCustomPropagator)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,13 +27,10 @@ namespace OpenTelemetry.Instrumentation.AspNetCore
|
|||
public class AspNetCoreInstrumentationOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets <see cref="TextMapPropagator"/> for context propagation. Default value: <see cref="CompositeTextMapPropagator"/> with <see cref="TraceContextPropagator"/> & <see cref="BaggagePropagator"/>.
|
||||
/// Gets or sets <see cref="TextMapPropagator"/> for context propagation.
|
||||
/// By default, <see cref="Propagators.DefaultTextMapPropagator" /> will be used.
|
||||
/// </summary>
|
||||
public TextMapPropagator Propagator { get; set; } = new CompositeTextMapPropagator(new TextMapPropagator[]
|
||||
{
|
||||
new TraceContextPropagator(),
|
||||
new BaggagePropagator(),
|
||||
});
|
||||
public TextMapPropagator Propagator { get; set; } = Propagators.DefaultTextMapPropagator;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a Filter function to filter instrumentation for requests on a per request basis.
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
to CompositeTextMapPropagator. IPropagator is renamed to TextMapPropagator
|
||||
and changed from interface to abstract class.
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1427))
|
||||
* Propagators.DefaultTextMapPropagator will be used as the default Propagator
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1428))
|
||||
|
||||
## 0.7.0-beta.1
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
to CompositeTextMapPropagator. IPropagator is renamed to TextMapPropagator
|
||||
and changed from interface to abstract class.
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1427))
|
||||
* Propagators.DefaultTextMapPropagator will be used as the default Propagator
|
||||
([#1427](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1428))
|
||||
|
||||
## 0.7.0-beta.1
|
||||
|
||||
|
|
|
|||
|
|
@ -35,13 +35,10 @@ namespace OpenTelemetry.Instrumentation.Http
|
|||
public bool SetHttpFlavor { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets <see cref="TextMapPropagator"/> for context propagation. Default value: <see cref="CompositeTextMapPropagator"/> with <see cref="TraceContextPropagator"/> & <see cref="BaggagePropagator"/>.
|
||||
/// Gets or sets <see cref="TextMapPropagator"/> for context propagation.
|
||||
/// By default, <see cref="Propagators.DefaultTextMapPropagator" /> will be used.
|
||||
/// </summary>
|
||||
public TextMapPropagator Propagator { get; set; } = new CompositeTextMapPropagator(new TextMapPropagator[]
|
||||
{
|
||||
new TraceContextPropagator(),
|
||||
new BaggagePropagator(),
|
||||
});
|
||||
public TextMapPropagator Propagator { get; set; } = Propagators.DefaultTextMapPropagator;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a Filter function to filter instrumentation for requests on a per request basis.
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@ namespace OpenTelemetry.Logs
|
|||
private bool disposed;
|
||||
private IExternalScopeProvider scopeProvider;
|
||||
|
||||
static OpenTelemetryLoggerProvider()
|
||||
{
|
||||
// Accessing Sdk class is just to trigger its static ctor,
|
||||
// which sets default Propagators and default Activity Id format
|
||||
_ = Sdk.SuppressInstrumentation;
|
||||
}
|
||||
|
||||
public OpenTelemetryLoggerProvider(IOptionsMonitor<OpenTelemetryLoggerOptions> options)
|
||||
: this(options?.CurrentValue)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
// limitations under the License.
|
||||
// </copyright>
|
||||
|
||||
using System.Diagnostics;
|
||||
using OpenTelemetry.Context.Propagation;
|
||||
using OpenTelemetry.Metrics;
|
||||
using OpenTelemetry.Trace;
|
||||
|
||||
|
|
@ -24,11 +26,32 @@ namespace OpenTelemetry
|
|||
/// </summary>
|
||||
public static class Sdk
|
||||
{
|
||||
static Sdk()
|
||||
{
|
||||
Propagators.DefaultTextMapPropagator = new CompositeTextMapPropagator(new TextMapPropagator[]
|
||||
{
|
||||
new TraceContextPropagator(),
|
||||
new BaggagePropagator(),
|
||||
});
|
||||
|
||||
Activity.DefaultIdFormat = ActivityIdFormat.W3C;
|
||||
Activity.ForceDefaultIdFormat = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether instrumentation is suppressed (disabled).
|
||||
/// </summary>
|
||||
public static bool SuppressInstrumentation => SuppressInstrumentationScope.IsSuppressed;
|
||||
|
||||
/// <summary>
|
||||
/// Sets the Default TextMapPropagator.
|
||||
/// </summary>
|
||||
/// <param name="textMapPropagator">TextMapPropagator to be set as default.</param>
|
||||
public static void SetDefaultTextMapPropagator(TextMapPropagator textMapPropagator)
|
||||
{
|
||||
Propagators.DefaultTextMapPropagator = textMapPropagator;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates MeterProviderBuilder which should be used to build MeterProvider.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -34,12 +34,6 @@ namespace OpenTelemetry.Trace
|
|||
private readonly ActivitySourceAdapter adapter;
|
||||
private BaseProcessor<Activity> processor;
|
||||
|
||||
static TracerProviderSdk()
|
||||
{
|
||||
Activity.DefaultIdFormat = ActivityIdFormat.W3C;
|
||||
Activity.ForceDefaultIdFormat = true;
|
||||
}
|
||||
|
||||
internal TracerProviderSdk(
|
||||
Resource resource,
|
||||
IEnumerable<string> sources,
|
||||
|
|
|
|||
|
|
@ -58,6 +58,21 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
|
|||
Assert.Throws<ArgumentNullException>(() => builder.AddAspNetCoreInstrumentation());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DefaultPropagatorIsFromPropagators()
|
||||
{
|
||||
var options = new AspNetCoreInstrumentationOptions();
|
||||
Assert.Same(Propagators.DefaultTextMapPropagator, options.Propagator);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PropagatorSetDoesNotAffectGlobalPropagators()
|
||||
{
|
||||
var options = new AspNetCoreInstrumentationOptions();
|
||||
options.Propagator = new TraceContextPropagator();
|
||||
Assert.NotSame(Propagators.DefaultTextMapPropagator, options.Propagator);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task StatusIsUnsetOn200Response()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
// <copyright file="PropagatorsTest.cs" company="OpenTelemetry Authors">
|
||||
// Copyright The 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.
|
||||
// </copyright>
|
||||
|
||||
using System;
|
||||
using OpenTelemetry.Context.Propagation;
|
||||
using OpenTelemetry.Context.Propagation.Tests;
|
||||
using Xunit;
|
||||
|
||||
namespace OpenTelemetry.Context.Tests
|
||||
{
|
||||
public class PropagatorsTest : IDisposable
|
||||
{
|
||||
public PropagatorsTest()
|
||||
{
|
||||
Propagators.Reset();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DefaultTextMapPropagatorIsNoop()
|
||||
{
|
||||
Assert.IsType<NoopTextMapPropagator>(Propagators.DefaultTextMapPropagator);
|
||||
Assert.Same(Propagators.DefaultTextMapPropagator, Propagators.DefaultTextMapPropagator);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanSetPropagator()
|
||||
{
|
||||
var testPropagator = new TestPropagator(string.Empty, string.Empty);
|
||||
Propagators.DefaultTextMapPropagator = testPropagator;
|
||||
Assert.Same(testPropagator, Propagators.DefaultTextMapPropagator);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Propagators.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue