Remove options, stick with builder (#1875)
* remove options, stick with builder * update changelog * sanity * update changelog Co-authored-by: Cijo Thomas <cithomas@microsoft.com>
This commit is contained in:
parent
f2524286d1
commit
76d9fc092f
|
|
@ -26,12 +26,10 @@ public class Program
|
||||||
|
|
||||||
public static void Main()
|
public static void Main()
|
||||||
{
|
{
|
||||||
using var tracerProvider = Sdk.CreateTracerProviderBuilder(options =>
|
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
|
||||||
{
|
|
||||||
options.SetErrorStatusOnException = true;
|
|
||||||
})
|
|
||||||
.AddSource("MyCompany.MyProduct.MyLibrary")
|
.AddSource("MyCompany.MyProduct.MyLibrary")
|
||||||
.SetSampler(new AlwaysOnSampler())
|
.SetSampler(new AlwaysOnSampler())
|
||||||
|
.SetErrorStatusOnException()
|
||||||
.AddConsoleExporter()
|
.AddConsoleExporter()
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,9 +34,9 @@ The following configuration will automatically detect exception and set the
|
||||||
activity status to `Error`:
|
activity status to `Error`:
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
Sdk.CreateTracerProviderBuilder(options => {
|
Sdk.CreateTracerProviderBuilder()
|
||||||
options.SetErrorStatusOnException = true;
|
.SetErrorStatusOnException()
|
||||||
});
|
// ...
|
||||||
```
|
```
|
||||||
|
|
||||||
A complete example can be found [here](./Program.cs).
|
A complete example can be found [here](./Program.cs).
|
||||||
|
|
@ -79,12 +79,10 @@ public class Program
|
||||||
{
|
{
|
||||||
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
|
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
|
||||||
|
|
||||||
using var tracerProvider = Sdk.CreateTracerProviderBuilder(options =>
|
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
|
||||||
{
|
|
||||||
options.SetErrorStatusOnException = true;
|
|
||||||
})
|
|
||||||
.AddSource("MyCompany.MyProduct.MyLibrary")
|
.AddSource("MyCompany.MyProduct.MyLibrary")
|
||||||
.SetSampler(new AlwaysOnSampler())
|
.SetSampler(new AlwaysOnSampler())
|
||||||
|
.SetErrorStatusOnException()
|
||||||
.AddConsoleExporter()
|
.AddConsoleExporter()
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
||||||
OpenTelemetry.Trace.TracerProviderOptions
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.get -> bool
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.set -> void
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.TracerProviderOptions() -> void
|
|
||||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder(System.Action<OpenTelemetry.Trace.TracerProviderOptions> configure = null) -> OpenTelemetry.Trace.TracerProviderBuilder
|
|
||||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetErrorStatusOnException(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, bool enabled = true) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
||||||
OpenTelemetry.Trace.TracerProviderOptions
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.get -> bool
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.set -> void
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.TracerProviderOptions() -> void
|
|
||||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder(System.Action<OpenTelemetry.Trace.TracerProviderOptions> configure = null) -> OpenTelemetry.Trace.TracerProviderBuilder
|
|
||||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetErrorStatusOnException(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, bool enabled = true) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,6 @@ OpenTelemetry.Logs.OpenTelemetryLoggerOptions.IncludeScopes.set -> void
|
||||||
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.get -> bool
|
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.get -> bool
|
||||||
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.set -> void
|
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.set -> void
|
||||||
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
||||||
OpenTelemetry.Trace.TracerProviderOptions
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.get -> bool
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.set -> void
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.TracerProviderOptions() -> void
|
|
||||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder(System.Action<OpenTelemetry.Trace.TracerProviderOptions> configure = null) -> OpenTelemetry.Trace.TracerProviderBuilder
|
|
||||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetErrorStatusOnException(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, bool enabled = true) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,6 @@ OpenTelemetry.Logs.OpenTelemetryLoggerOptions.IncludeScopes.set -> void
|
||||||
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.get -> bool
|
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.get -> bool
|
||||||
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.set -> void
|
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ParseStateValues.set -> void
|
||||||
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
OpenTelemetry.Trace.ParentBasedSampler.ParentBasedSampler(OpenTelemetry.Trace.Sampler rootSampler, OpenTelemetry.Trace.Sampler remoteParentSampled = null, OpenTelemetry.Trace.Sampler remoteParentNotSampled = null, OpenTelemetry.Trace.Sampler localParentSampled = null, OpenTelemetry.Trace.Sampler localParentNotSampled = null) -> void
|
||||||
OpenTelemetry.Trace.TracerProviderOptions
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.get -> bool
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.SetErrorStatusOnException.set -> void
|
|
||||||
OpenTelemetry.Trace.TracerProviderOptions.TracerProviderOptions() -> void
|
|
||||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder(System.Action<OpenTelemetry.Trace.TracerProviderOptions> configure = null) -> OpenTelemetry.Trace.TracerProviderBuilder
|
|
||||||
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddLegacyActivity(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, string operationName) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
|
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetErrorStatusOnException(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, bool enabled = true) -> OpenTelemetry.Trace.TracerProviderBuilder
|
||||||
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
static OpenTelemetry.Trace.TracerProviderExtensions.ForceFlush(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,10 @@ please check the latest changes
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
* Added `TracerProviderOptions` and `SetErrorStatusOnException`.
|
* Added `TracerProviderBuilder.SetErrorStatusOnException` which automatically
|
||||||
([#1858](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1858))
|
sets the activity status to `Error` when exception happened.
|
||||||
|
([#1858](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1858)
|
||||||
|
[#1875](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1875))
|
||||||
* Added `ForceFlush` to `TracerProvider`.
|
* Added `ForceFlush` to `TracerProvider`.
|
||||||
([#1837](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1837))
|
([#1837](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1837))
|
||||||
* Added a TracerProvierBuilder extension method called
|
* Added a TracerProvierBuilder extension method called
|
||||||
|
|
@ -46,9 +48,9 @@ Released 2021-Feb-09
|
||||||
Released 2021-Feb-04
|
Released 2021-Feb-04
|
||||||
|
|
||||||
* Default `Resource` will now contain service.name instead of Telemetry SDK.
|
* Default `Resource` will now contain service.name instead of Telemetry SDK.
|
||||||
[#1744](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1744)
|
([#1744](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1744))
|
||||||
* Added GetDefaultResource() method to `Provider`.
|
* Added GetDefaultResource() method to `Provider`.
|
||||||
[#1768](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1768)
|
([#1768](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1768))
|
||||||
|
|
||||||
## 1.0.0-rc2
|
## 1.0.0-rc2
|
||||||
|
|
||||||
|
|
@ -149,14 +151,14 @@ Released 2020-Oct-16
|
||||||
* Changed `ActivityExporter.OnShutdown`, `ActivityExporter.Shutdown`,
|
* Changed `ActivityExporter.OnShutdown`, `ActivityExporter.Shutdown`,
|
||||||
`ActivityProcessor.OnShutdown` and `ActivityProcessor.Shutdown` to return
|
`ActivityProcessor.OnShutdown` and `ActivityProcessor.Shutdown` to return
|
||||||
boolean value
|
boolean value
|
||||||
([#1282](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1282))
|
([#1282](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1282)
|
||||||
([#1285](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1285))
|
[#1285](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1285))
|
||||||
* Renamed `SamplingDecision` options (`NotRecord` to `Drop`, `Record` to
|
* Renamed `SamplingDecision` options (`NotRecord` to `Drop`, `Record` to
|
||||||
`RecordOnly`, and `RecordAndSampled` to `RecordAndSample`)
|
`RecordOnly`, and `RecordAndSampled` to `RecordAndSample`)
|
||||||
([#1297](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1297))
|
([#1297](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1297))
|
||||||
* Added `ILogger`/`Microsoft.Extensions.Logging` integration
|
* Added `ILogger`/`Microsoft.Extensions.Logging` integration
|
||||||
([#1308](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1308))
|
([#1308](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1308)
|
||||||
([#1315](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1315))
|
[#1315](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1315))
|
||||||
* Changed exporter and processor to generic types
|
* Changed exporter and processor to generic types
|
||||||
([#1328](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1328)):
|
([#1328](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1328)):
|
||||||
* `ActivityExporter` changed to `BaseExporter<Activity>`
|
* `ActivityExporter` changed to `BaseExporter<Activity>`
|
||||||
|
|
|
||||||
|
|
@ -60,19 +60,7 @@ namespace OpenTelemetry
|
||||||
/// <returns>TracerProviderBuilder instance, which should be used to build TracerProvider.</returns>
|
/// <returns>TracerProviderBuilder instance, which should be used to build TracerProvider.</returns>
|
||||||
public static TracerProviderBuilder CreateTracerProviderBuilder()
|
public static TracerProviderBuilder CreateTracerProviderBuilder()
|
||||||
{
|
{
|
||||||
return CreateTracerProviderBuilder(null);
|
return new TracerProviderBuilderSdk();
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates TracerProviderBuilder which should be used to build TracerProvider.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="configure">TracerProvider configuration options.</param>
|
|
||||||
/// <returns>TracerProviderBuilder instance, which should be used to build TracerProvider.</returns>
|
|
||||||
public static TracerProviderBuilder CreateTracerProviderBuilder(Action<TracerProviderOptions> configure = null)
|
|
||||||
{
|
|
||||||
var options = new TracerProviderOptions();
|
|
||||||
configure?.Invoke(options);
|
|
||||||
return new TracerProviderBuilderSdk(options);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,23 @@ namespace OpenTelemetry.Trace
|
||||||
{
|
{
|
||||||
public static class TracerProviderBuilderExtensions
|
public static class TracerProviderBuilderExtensions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Sets whether the status of <see cref="System.Diagnostics.Activity"/>
|
||||||
|
/// should be set to <c>Status.Error</c> when it ended abnormally due to an unhandled exception.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tracerProviderBuilder">TracerProviderBuilder instance.</param>
|
||||||
|
/// <param name="enabled">Enabled or not. Default value is <c>true</c>.</param>
|
||||||
|
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
|
||||||
|
public static TracerProviderBuilder SetErrorStatusOnException(this TracerProviderBuilder tracerProviderBuilder, bool enabled = true)
|
||||||
|
{
|
||||||
|
if (tracerProviderBuilder is TracerProviderBuilderSdk tracerProviderBuilderSdk)
|
||||||
|
{
|
||||||
|
tracerProviderBuilderSdk.SetErrorStatusOnException(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tracerProviderBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets sampler.
|
/// Sets sampler.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -27,29 +27,14 @@ namespace OpenTelemetry.Trace
|
||||||
internal class TracerProviderBuilderSdk : TracerProviderBuilder
|
internal class TracerProviderBuilderSdk : TracerProviderBuilder
|
||||||
{
|
{
|
||||||
private readonly List<InstrumentationFactory> instrumentationFactories = new List<InstrumentationFactory>();
|
private readonly List<InstrumentationFactory> instrumentationFactories = new List<InstrumentationFactory>();
|
||||||
|
|
||||||
private readonly TracerProviderOptions options;
|
|
||||||
private readonly List<BaseProcessor<Activity>> processors = new List<BaseProcessor<Activity>>();
|
private readonly List<BaseProcessor<Activity>> processors = new List<BaseProcessor<Activity>>();
|
||||||
private readonly List<string> sources = new List<string>();
|
private readonly List<string> sources = new List<string>();
|
||||||
private readonly Dictionary<string, bool> legacyActivityOperationNames = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
|
private readonly Dictionary<string, bool> legacyActivityOperationNames = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
|
||||||
private ResourceBuilder resourceBuilder = ResourceBuilder.CreateDefault();
|
private ResourceBuilder resourceBuilder = ResourceBuilder.CreateDefault();
|
||||||
private Sampler sampler = new ParentBasedSampler(new AlwaysOnSampler());
|
private Sampler sampler = new ParentBasedSampler(new AlwaysOnSampler());
|
||||||
|
|
||||||
internal TracerProviderBuilderSdk(TracerProviderOptions options)
|
internal TracerProviderBuilderSdk()
|
||||||
{
|
{
|
||||||
this.options = options ?? new TracerProviderOptions();
|
|
||||||
|
|
||||||
if (options.SetErrorStatusOnException)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.AddProcessor(new ExceptionProcessor());
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new NotSupportedException($"{nameof(options.SetErrorStatusOnException)} is not supported on this platform.", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -103,6 +88,47 @@ namespace OpenTelemetry.Trace
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets whether the status of <see cref="System.Diagnostics.Activity"/>
|
||||||
|
/// should be set to <c>Status.Error</c> when it ended abnormally due to an unhandled exception.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="enabled">Enabled or not.</param>
|
||||||
|
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
|
||||||
|
internal TracerProviderBuilder SetErrorStatusOnException(bool enabled)
|
||||||
|
{
|
||||||
|
ExceptionProcessor existingExceptionProcessor = null;
|
||||||
|
|
||||||
|
if (this.processors.Count > 0)
|
||||||
|
{
|
||||||
|
existingExceptionProcessor = this.processors[0] as ExceptionProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enabled)
|
||||||
|
{
|
||||||
|
if (existingExceptionProcessor == null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.processors.Insert(0, new ExceptionProcessor());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("SetErrorStatusOnException is not supported on this platform.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (existingExceptionProcessor != null)
|
||||||
|
{
|
||||||
|
this.processors.RemoveAt(0);
|
||||||
|
existingExceptionProcessor.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets sampler.
|
/// Sets sampler.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
// <copyright file="TracerProviderOptions.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.Trace
|
|
||||||
{
|
|
||||||
public class TracerProviderOptions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a value indicating whether the status of <see cref="System.Diagnostics.Activity"/>
|
|
||||||
/// should be set to <c>Status.Error</c> when it ended abnormally due to an unhandled exception.
|
|
||||||
/// </summary>
|
|
||||||
public bool SetErrorStatusOnException { get; set; } = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -23,6 +23,8 @@ namespace OpenTelemetry.Trace.Tests
|
||||||
{
|
{
|
||||||
public class TracerProviderBuilderExtensionsTest
|
public class TracerProviderBuilderExtensionsTest
|
||||||
{
|
{
|
||||||
|
private const string ActivitySourceName = "TracerProviderBuilderExtensionsTest";
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddLegacyOperationName_NullBuilder_Noop()
|
public void AddLegacyOperationName_NullBuilder_Noop()
|
||||||
{
|
{
|
||||||
|
|
@ -57,5 +59,88 @@ namespace OpenTelemetry.Trace.Tests
|
||||||
using var provider = builder.Build();
|
using var provider = builder.Build();
|
||||||
Assert.True(emptyActivitySource.HasListeners());
|
Assert.True(emptyActivitySource.HasListeners());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void SetErrorStatusOnExceptionEnabled()
|
||||||
|
{
|
||||||
|
using var activitySource = new ActivitySource(ActivitySourceName);
|
||||||
|
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
|
||||||
|
.AddSource(ActivitySourceName)
|
||||||
|
.SetSampler(new AlwaysOnSampler())
|
||||||
|
.SetErrorStatusOnException(false)
|
||||||
|
.SetErrorStatusOnException(false)
|
||||||
|
.SetErrorStatusOnException(true)
|
||||||
|
.SetErrorStatusOnException(true)
|
||||||
|
.SetErrorStatusOnException(false)
|
||||||
|
.SetErrorStatusOnException()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
Activity activity = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (activity = activitySource.StartActivity("Activity"))
|
||||||
|
{
|
||||||
|
throw new Exception("Oops!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(StatusCode.Error, activity.GetStatus().StatusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void SetErrorStatusOnExceptionDisabled()
|
||||||
|
{
|
||||||
|
using var activitySource = new ActivitySource(ActivitySourceName);
|
||||||
|
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
|
||||||
|
.AddSource(ActivitySourceName)
|
||||||
|
.SetSampler(new AlwaysOnSampler())
|
||||||
|
.SetErrorStatusOnException()
|
||||||
|
.SetErrorStatusOnException(false)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
Activity activity = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (activity = activitySource.StartActivity("Activity"))
|
||||||
|
{
|
||||||
|
throw new Exception("Oops!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(StatusCode.Unset, activity.GetStatus().StatusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void SetErrorStatusOnExceptionDefault()
|
||||||
|
{
|
||||||
|
using var activitySource = new ActivitySource(ActivitySourceName);
|
||||||
|
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
|
||||||
|
.AddSource(ActivitySourceName)
|
||||||
|
.SetSampler(new AlwaysOnSampler())
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
Activity activity = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (activity = activitySource.StartActivity("Activity"))
|
||||||
|
{
|
||||||
|
throw new Exception("Oops!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(StatusCode.Unset, activity.GetStatus().StatusCode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
||||||
// <copyright file="TracerProviderOptionsTest.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.Diagnostics;
|
|
||||||
using OpenTelemetry.Tests;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace OpenTelemetry.Trace.Tests
|
|
||||||
{
|
|
||||||
public class TracerProviderOptionsTest
|
|
||||||
{
|
|
||||||
private const string ActivitySourceName = "TracerProviderOptionsTest";
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void SetErrorStatusOnExceptionEnabled()
|
|
||||||
{
|
|
||||||
using var activitySource = new ActivitySource(ActivitySourceName);
|
|
||||||
using var tracerProvider = Sdk.CreateTracerProviderBuilder(options =>
|
|
||||||
{
|
|
||||||
options.SetErrorStatusOnException = true;
|
|
||||||
})
|
|
||||||
.AddSource(ActivitySourceName)
|
|
||||||
.SetSampler(new AlwaysOnSampler())
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var activity = activitySource.StartActivity("Activity");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (activity)
|
|
||||||
{
|
|
||||||
throw new Exception("Oops!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.Equal(StatusCode.Error, activity.GetStatus().StatusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void SetErrorStatusOnExceptionDefault()
|
|
||||||
{
|
|
||||||
using var activitySource = new ActivitySource(ActivitySourceName);
|
|
||||||
using var tracerProvider = Sdk.CreateTracerProviderBuilder(options => { })
|
|
||||||
.AddSource(ActivitySourceName)
|
|
||||||
.SetSampler(new AlwaysOnSampler())
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var activity = activitySource.StartActivity("Activity");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (activity)
|
|
||||||
{
|
|
||||||
throw new Exception("Oops!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.Equal(StatusCode.Unset, activity.GetStatus().StatusCode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue