Skip to content

Commit

Permalink
experimental API, suppress exceptions, AddMeter
Browse files Browse the repository at this point in the history
  • Loading branch information
lmolkova committed Mar 12, 2024
1 parent e731edf commit fbf27ff
Show file tree
Hide file tree
Showing 12 changed files with 260 additions and 16 deletions.
4 changes: 4 additions & 0 deletions src/OpenTelemetry.Api/Metrics/MeterProviderBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ public abstract MeterProviderBuilder AddInstrumentation<TInstrumentation>(

/// <summary>
/// Adds given Meter names to the list of subscribed meters.
/// <remarks>
/// When multiple matchers are added for the same meter name, the <see cref="MeterProvider"/>
/// will enable a meter if its name matches at least one of the provided names.
/// </remarks>
/// </summary>
/// <param name="names">Meter names.</param>
/// <returns>Returns <see cref="MeterProviderBuilder"/> for chaining.</returns>
Expand Down
5 changes: 5 additions & 0 deletions src/OpenTelemetry.Api/Trace/TracerProviderBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ public abstract TracerProviderBuilder AddInstrumentation<TInstrumentation>(

/// <summary>
/// Adds the given <see cref="ActivitySource"/> names to the list of subscribed sources.
///
/// <remarks>
/// When multiple matchers are added for the same source name, the <see cref="TracerProvider"/>
/// will enable an ActivitySource if its name matches at least one of the provided names.
/// </remarks>
/// </summary>
/// <param name="names">Activity source names.</param>
/// <returns>Returns <see cref="TracerProviderBuilder"/> for chaining.</returns>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,5 @@ static OpenTelemetry.Sdk.CreateLoggerProviderBuilder() -> OpenTelemetry.Logs.Log
static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.UseOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder! builder) -> Microsoft.Extensions.Logging.ILoggingBuilder!
static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.UseOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder! builder, System.Action<OpenTelemetry.Logs.LoggerProviderBuilder!>! configure) -> Microsoft.Extensions.Logging.ILoggingBuilder!
static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.UseOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder! builder, System.Action<OpenTelemetry.Logs.LoggerProviderBuilder!>? configureBuilder, System.Action<OpenTelemetry.Logs.OpenTelemetryLoggerOptions!>? configureOptions) -> Microsoft.Extensions.Logging.ILoggingBuilder!
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddSource(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, System.Predicate<System.Diagnostics.ActivitySource!>! sourcePredicate) -> OpenTelemetry.Trace.TracerProviderBuilder!
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.AddMeter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, System.Predicate<System.Diagnostics.Metrics.Meter!>! meterPredicate) -> OpenTelemetry.Metrics.MeterProviderBuilder!
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,3 @@ static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithMetrics(this OpenTele
static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithMetrics(this OpenTelemetry.IOpenTelemetryBuilder! builder, System.Action<OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> OpenTelemetry.IOpenTelemetryBuilder!
static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithTracing(this OpenTelemetry.IOpenTelemetryBuilder! builder) -> OpenTelemetry.IOpenTelemetryBuilder!
static OpenTelemetry.OpenTelemetryBuilderSdkExtensions.WithTracing(this OpenTelemetry.IOpenTelemetryBuilder! builder, System.Action<OpenTelemetry.Trace.TracerProviderBuilder!>! configure) -> OpenTelemetry.IOpenTelemetryBuilder!
static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddSource(this OpenTelemetry.Trace.TracerProviderBuilder! tracerProviderBuilder, System.Predicate<System.Diagnostics.ActivitySource!>! sourcePredicate) -> OpenTelemetry.Trace.TracerProviderBuilder!
30 changes: 30 additions & 0 deletions src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,24 @@ public void LoggerProcessStateSkipped<TState>()
}
}

[NonEvent]
public void ActivitySourcePredicateException(string sourceName, Exception ex)
{
if (this.IsEnabled(EventLevel.Warning, EventKeywords.All))
{
this.ActivitySourcePredicateException(sourceName, ex.ToInvariantString());
}
}

[NonEvent]
public void MeterPredicateException(string meterName, Exception ex)
{
if (this.IsEnabled(EventLevel.Warning, EventKeywords.All))
{
this.MeterPredicateException(meterName, ex.ToInvariantString());
}
}

[Event(4, Message = "Unknown error in SpanProcessor event '{0}': '{1}'.", Level = EventLevel.Error)]
public void SpanProcessorException(string evnt, string ex)
{
Expand Down Expand Up @@ -346,6 +364,18 @@ public void MetricInstrumentRemoved(string instrumentName, string meterName)
this.WriteEvent(53, instrumentName, meterName);
}

[Event(54, Message = "Exception thrown when invoking ActivitySource predicate for source '{0}', ignoring it. Exception: '{1}'", Level = EventLevel.Warning)]
public void ActivitySourcePredicateException(string sourceName, string error)
{
this.WriteEvent(54, sourceName, error);
}

[Event(55, Message = "Exception thrown when invoking Meter predicate for meter name '{0}', ignoring it. Exception: '{1}'", Level = EventLevel.Warning)]
public void MeterPredicateException(string meterName, string error)
{
this.WriteEvent(55, meterName, error);
}

#if DEBUG
public class OpenTelemetryEventListener : EventListener
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,35 @@ public static MeterProviderBuilder AddView(this MeterProviderBuilder meterProvid
return meterProviderBuilder;
}

#if EXPOSE_EXPERIMENTAL_FEATURES
/// <summary>
/// Adds a predicate for <see cref="Meter"/> that is used to determine
/// if <see cref="MeterProvider"/> should subscribe to the meter.
///
/// <remarks>
/// When multiple predicates are added using this method or via <see cref="MeterProviderBuilder.AddMeter(string[])"/>,
/// the <see cref="MeterProvider"/> will enable a meter if at least one of the predicates returns true for it, or
/// if the meter name matches one provided in the <see cref="MeterProviderBuilder.AddMeter(string[])"/> overload.
/// </remarks>
/// </summary>
/// <param name="meterProviderBuilder"><see cref="MeterProviderBuilder"/>.</param>
/// <param name="meterPredicate">Meter predicate - if it returns true, OpenTelemetry subscribes to the corresponding meter.</param>
/// <returns>Returns <see cref="MeterProviderBuilder"/> for chaining.</returns>
public static MeterProviderBuilder AddMeter(this MeterProviderBuilder meterProviderBuilder, Predicate<Meter> meterPredicate)
{
Guard.ThrowIfNull(meterProviderBuilder);
meterProviderBuilder.ConfigureBuilder((_, builder) =>
{
if (builder is MeterProviderBuilderSdk meterProviderBuilderSdk)
{
meterProviderBuilderSdk.AddMeter(meterPredicate);
}
});

return meterProviderBuilder;
}
#endif

/// <summary>
/// Sets the maximum number of Metric streams supported by the MeterProvider.
/// When no Views are configured, every instrument will result in one metric stream,
Expand Down
10 changes: 10 additions & 0 deletions src/OpenTelemetry/Metrics/Builder/MeterProviderBuilderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public MeterProviderBuilderSdk(IServiceProvider serviceProvider)

public List<string> MeterSources { get; } = new();

public List<Predicate<Meter>> MeterSelectionPredicates { get; } = new();

public List<Func<Instrument, MetricStreamConfiguration?>> ViewConfigs { get; } = new();

public int MetricLimit { get; private set; } = DefaultMetricLimit;
Expand Down Expand Up @@ -166,6 +168,14 @@ public override MeterProviderBuilder AddMeter(params string[] names)
return this;
}

public MeterProviderBuilder AddMeter(Predicate<Meter> meterPredicate)
{
Guard.ThrowIfNull(meterPredicate);
this.MeterSelectionPredicates.Add(meterPredicate!);

return this;
}

public MeterProviderBuilder AddReader(MetricReader reader)
{
Debug.Assert(reader != null, "reader was null");
Expand Down
58 changes: 45 additions & 13 deletions src/OpenTelemetry/Metrics/MeterProviderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -143,19 +143,7 @@ internal MeterProviderSdk(
}

// Setup Listener
if (state.MeterSources.Any(s => WildcardHelper.ContainsWildcard(s)))
{
var regex = WildcardHelper.GetWildcardRegex(state.MeterSources);
this.shouldListenTo = instrument => regex.IsMatch(instrument.Meter.Name);
}
else if (state.MeterSources.Any())
{
var meterSourcesToSubscribe = new HashSet<string>(state.MeterSources, StringComparer.OrdinalIgnoreCase);
this.shouldListenTo = instrument => meterSourcesToSubscribe.Contains(instrument.Meter.Name);
}

OpenTelemetrySdkEventSource.Log.MeterProviderSdkEvent($"Listening to following meters = \"{string.Join(";", state.MeterSources)}\".");

this.shouldListenTo = this.GetPredicate(state);
this.listener = new MeterListener();
var viewConfigCount = this.viewConfigs.Count;

Expand Down Expand Up @@ -187,6 +175,36 @@ internal MeterProviderSdk(
OpenTelemetrySdkEventSource.Log.MeterProviderSdkEvent("MeterProvider built successfully.");
}

private Func<Instrument, bool> GetPredicate(MeterProviderBuilderSdk state)
{
List<Predicate<Meter>> predicates = new List<Predicate<Meter>>();

if (state.MeterSources.Any())
{
predicates.Add(this.GetNamePredicate(state));
}

predicates.AddRange(state.MeterSelectionPredicates);

return (instrument) =>
{
bool shouldListen = false;
for (int i = 0; i < predicates.Count && !shouldListen; i++)
{
try
{
shouldListen |= predicates[i](instrument.Meter);
}
catch (Exception ex)
{
OpenTelemetrySdkEventSource.Log.MeterPredicateException(instrument.Meter.Name, ex);
}
}

return shouldListen;
};
}

internal Resource Resource { get; }

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (ubuntu-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (windows-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / concurrency-tests / run-concurrency-tests (ubuntu-latest, net8.0, OpenTelemetry.Api.Tests)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net6.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-stable

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-stable

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-stable

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-stable

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-stable

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net8.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-stable / build-test (windows-latest, net462)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / build-test-solution-experimental / build-test (windows-latest, net7.0)

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-experimental

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-experimental

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-experimental

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-experimental

Check failure on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / validate-packages / run-package-validation-experimental

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-stable

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-stable

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-stable

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-stable

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-stable

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-experimental

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-experimental

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-experimental

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-experimental

A property should not follow a method

Check warning on line 208 in src/OpenTelemetry/Metrics/MeterProviderSdk.cs

View workflow job for this annotation

GitHub Actions / lint-dotnet-format / run-dotnet-format-experimental

A property should not follow a method

internal List<object> Instrumentations => this.instrumentations;
Expand Down Expand Up @@ -531,4 +549,18 @@ private void ApplySpecificationConfigurationKeys(IConfiguration configuration)
}
#endif
}

private Predicate<Meter> GetNamePredicate(MeterProviderBuilderSdk state)
{
Debug.Assert(state.MeterSources.Any(), "Should only be called when there are name-based source predicates.");

if (state.MeterSources.Any(s => WildcardHelper.ContainsWildcard(s)))
{
var regex = WildcardHelper.GetWildcardRegex(state.MeterSources);
return meter => regex.IsMatch(meter.Name);
}

var meterSourcesToSubscribe = new HashSet<string>(state.MeterSources, StringComparer.OrdinalIgnoreCase);
return meter => meterSourcesToSubscribe.Contains(meter.Name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,16 @@ public static TracerProviderBuilder AddProcessor(
return tracerProviderBuilder;
}

#if EXPOSE_EXPERIMENTAL_FEATURES
/// <summary>
/// Adds predicate for <see cref="ActivitySource"/> that will be used to determine
/// Adds a predicate for <see cref="ActivitySource"/> that is used to determine
/// if <see cref="TracerProvider"/> should subscribe to the source.
///
/// <remarks>
/// When multiple predicates are added using this method or via <see cref="TracerProviderBuilder.AddSource(string[])"/>,
/// the <see cref="TracerProvider"/> will enable an ActivitySource if at least one of the predicates returns true for it, or
/// if the ActivitySource name matches one provided in the <see cref="TracerProviderBuilder.AddSource(string[])"/> overload.
/// </remarks>
/// </summary>
/// <param name="tracerProviderBuilder"><see cref="TracerProviderBuilder"/>.</param>
/// <param name="sourcePredicate">Activity Source predicate - if it returns true, OpenTelemetry subscribes to the corresponding source.</param>
Expand All @@ -257,6 +264,7 @@ public static TracerProviderBuilder AddSource(this TracerProviderBuilder tracerP

return tracerProviderBuilder;
}
#endif

/// <summary>
/// Run the given actions to initialize the <see cref="TracerProvider"/>.
Expand Down
9 changes: 8 additions & 1 deletion src/OpenTelemetry/Trace/TracerProviderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,14 @@ private Func<ActivitySource, bool> GetPredicate(TracerProviderBuilderSdk state)
bool shouldListen = false;
for (int i = 0; i < predicates.Count && !shouldListen; i++)
{
shouldListen |= predicates[i](activitySource);
try
{
shouldListen |= predicates[i](activitySource);
}
catch (Exception ex)
{
OpenTelemetrySdkEventSource.Log.ActivitySourcePredicateException(activitySource.Name, ex);
}
}

return shouldListen;
Expand Down
103 changes: 103 additions & 0 deletions test/OpenTelemetry.Tests/Metrics/MeterProviderSdkTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,107 @@ void RunTest()
}
}
}

[Fact]
public void MeterProviderSdkAddMeterWithPredicate()
{
using var meter1 = new Meter($"{Utils.GetCurrentMethodName()}.A", "1.0.0");
using var meter2 = new Meter($"{Utils.GetCurrentMethodName()}.A", "2.0.0");
using var meter3 = new Meter($"{Utils.GetCurrentMethodName()}.B");
using var meter4 = new Meter($"B.{Utils.GetCurrentMethodName()}");

using (var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter(meter => meter.Version == "2.0.0" || meter.Name.EndsWith(".B"))
.AddInMemoryExporter(new List<Metric>())
.Build())
{
Assert.False(IsMeterEnabled(meter1));
Assert.True(IsMeterEnabled(meter2));
Assert.True(IsMeterEnabled(meter3));
Assert.False(IsMeterEnabled(meter4));
}
}

[Fact]
public void MeterProviderSdkAddMeterWithPredicateException()
{
using var meter1 = new Meter($"{Utils.GetCurrentMethodName()}.A", "1.0.0");
using var meter2 = new Meter($"{Utils.GetCurrentMethodName()}.B");

using (var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter(meter => meter.Version.StartsWith("1.0.0")) // throws!
.AddInMemoryExporter(new List<Metric>())
.Build())
{
Assert.True(IsMeterEnabled(meter1));
Assert.False(IsMeterEnabled(meter2));
}
}

[Fact]
public void MeterProviderSdkAddMeterWithMultiplePredicates()
{
using var meter1 = new Meter($"{Utils.GetCurrentMethodName()}.A", "1.0.0");
using var meter2 = new Meter($"{Utils.GetCurrentMethodName()}.A", "2.0.0");
using var meter3 = new Meter($"{Utils.GetCurrentMethodName()}.B");
using var meter4 = new Meter($"B.{Utils.GetCurrentMethodName()}");

using (var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter(meter => meter.Version == "2.0.0")
.AddMeter(meter => meter.Name.StartsWith("B."))
.AddInMemoryExporter(new List<Metric>())
.Build())
{
Assert.False(IsMeterEnabled(meter1));
Assert.True(IsMeterEnabled(meter2));
Assert.False(IsMeterEnabled(meter3));
Assert.True(IsMeterEnabled(meter4));
}
}

[Fact]
public void MeterProviderSdkAddMeterWithWildCardAndPredicate()
{
using var meter1 = new Meter($"{Utils.GetCurrentMethodName()}.A", "1.0.0");
using var meter2 = new Meter($"{Utils.GetCurrentMethodName()}.A", "2.0.0");
using var meter3 = new Meter($"{Utils.GetCurrentMethodName()}.B");
using var meter4 = new Meter($"B.{Utils.GetCurrentMethodName()}");

using (var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter(meter => meter.Version == "2.0.0")
.AddMeter("B.*")
.AddInMemoryExporter(new List<Metric>())
.Build())
{
Assert.False(IsMeterEnabled(meter1));
Assert.True(IsMeterEnabled(meter2));
Assert.False(IsMeterEnabled(meter3));
Assert.True(IsMeterEnabled(meter4));
}
}

[Fact]
public void MeterProviderSdkAddMeterWithConflictingWildCardAndPredicate()
{
using var meter1 = new Meter($"{Utils.GetCurrentMethodName()}.A", "1.0.0");
using var meter2 = new Meter($"{Utils.GetCurrentMethodName()}.B");
using var meter3 = new Meter($"B.{Utils.GetCurrentMethodName()}");

using (var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter(meter => !meter.Name.StartsWith("B.*"))
.AddMeter("B.*")
.AddInMemoryExporter(new List<Metric>())
.Build())
{
Assert.True(IsMeterEnabled(meter1));
Assert.True(IsMeterEnabled(meter2));
Assert.True(IsMeterEnabled(meter3));
}
}

private static bool IsMeterEnabled(Meter meter)
{
var counter = meter.CreateCounter<int>("test");
return counter.Enabled;
}
}
15 changes: 15 additions & 0 deletions test/OpenTelemetry.Tests/Trace/TracerProviderSdkTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,21 @@ public void TracerProviderSdkAddSourceWithPredicate()
}
}

[Fact]
public void TracerProviderSdkAddSourceWithPredicateException()
{
using var source1 = new ActivitySource($"{Utils.GetCurrentMethodName()}.A", "1.0.0");
using var source2 = new ActivitySource($"{Utils.GetCurrentMethodName()}.B");

using (var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(source => source.Version.StartsWith("1.0.0")) // throws!
.Build())
{
Assert.True(IsSourceEnabled(source1));
Assert.False(IsSourceEnabled(source2));
}
}

[Fact]
public void TracerProviderSdkAddSourceWithMultiplePredicates()
{
Expand Down

0 comments on commit fbf27ff

Please sign in to comment.