Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public MeterProviderBuilder BeforeConfigureMeterProvider(MeterProviderBuilder bu
public void ConfigureLogsOptions(OpenTelemetryLoggerOptions options)
{
if (_bootstrapInfo.Succeeded && _components is not null)
options.UseElasticDefaults(_components.Logger);
options.WithElasticDefaults(_components.Logger);
}

/// <summary>
Expand Down
4 changes: 2 additions & 2 deletions src/Elastic.OpenTelemetry/Core/BuilderState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ internal sealed class BuilderState(

public Guid InstanceIdentifier { get; } = instanceIdentifier ?? Guid.NewGuid();

public void IncrementUseElasticDefaults() =>
public void IncrementWithElasticDefaults() =>
Interlocked.Increment(ref _useElasticDefaultsCounter);

public int UseElasticDefaultsCounter => _useElasticDefaultsCounter;
public int WithElasticDefaultsCounter => _useElasticDefaultsCounter;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Elastic.OpenTelemetry.Core;

/// <summary>
/// Each XyzProviderBuilder (e.g. TracerProviderBuilder) uses a shared instance
/// of this to track the number of calls made to their `UseElasticDefaults` methods.
/// of this to track the number of calls made to their `WithElasticDefaults` methods.
/// Generally, we expect only a single call. While we don't prohibit multiple calls,
/// by tracking the actual number, we can ensure we log this to enhance diagnostics
/// and support later on.
Expand All @@ -15,8 +15,8 @@ internal sealed class GlobalProviderBuilderState
{
private int _useElasticDefaultsCounter;

public int IncrementUseElasticDefaults() =>
public int IncrementWithElasticDefaults() =>
Interlocked.Increment(ref _useElasticDefaultsCounter);

public int UseElasticDefaultsCounter => _useElasticDefaultsCounter;
public int WithElasticDefaultsCounter => _useElasticDefaultsCounter;
}
14 changes: 7 additions & 7 deletions src/Elastic.OpenTelemetry/Core/SignalBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public static bool ConfigureBuilder<T>(
Action<T, ElasticOpenTelemetryComponents> configure,
[NotNullWhen(true)] ref ElasticOpenTelemetryComponents? components) where T : class
{
var callCount = globalProviderBuilderState.IncrementUseElasticDefaults();
var callCount = globalProviderBuilderState.IncrementWithElasticDefaults();

// If we are provided with options and components, we can avoid attempting to bootstrap again.
// This scenario occurs if for example `AddElasticOpenTelemetry` is called multipled times
Expand Down Expand Up @@ -91,17 +91,17 @@ public static bool ConfigureBuilder<T>(
// This allows us to track the number of times a specific instance of a builder is configured.
// We expect each builder to be configured at most once and log a warning if multiple invocations
// are detected.
state.IncrementUseElasticDefaults();
state.IncrementWithElasticDefaults();

if (state.UseElasticDefaultsCounter > 1)
components.Logger.LogWarning("The `{MethodName}` method has been called {UseElasticDefaultsCount} " +
if (state.WithElasticDefaultsCounter > 1)
components.Logger.LogWarning("The `{MethodName}` method has been called {WithElasticDefaultsCount} " +
"times on the same `{BuilderType}` (instance: {BuilderInstanceId}). This method is " +
"expected to be invoked a maximum of one time.", methodName,
state.UseElasticDefaultsCounter, builderName, state.InstanceIdentifier);
state.WithElasticDefaultsCounter, builderName, state.InstanceIdentifier);

if (existingStateFound && state.BootstrapInfo.Succeeded)
{
// If `UseElasticDefaults` is invoked more than once on the same builder instance,
// If `WithElasticDefaults` is invoked more than once on the same builder instance,
// we reuse the same components and skip the configure action.

components.Logger.LogTrace("Existing components have been found for the current {Builder} " +
Expand Down Expand Up @@ -156,7 +156,7 @@ static void ValidateGlobalCallCount(string methodName, string builderName, Compo
if (callCount > 1)
{
var logger = components is not null ? components.Logger : options?.AdditionalLogger;
logger?.LogWarning("The `{MethodName}` method has been called {UseElasticDefaultsCount} " +
logger?.LogWarning("The `{MethodName}` method has been called {WithElasticDefaultsCount} " +
"times across all {Builder} instances. This method is generally expected to be invoked " +
"once. Consider reviewing the usage at the callsite(s).", methodName,
callCount, builderName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace OpenTelemetry.Logs;
public static class LoggingProviderBuilderExtensions
{
/// <summary>
/// Used to track the number of times any overload of `UseElasticDefaults` is invoked on a
/// Used to track the number of times any overload of `WithElasticDefaults` is invoked on a
/// `LoggingProviderBuilder`. Generally, we expect one builder to be used per application,
/// and for it to be configured once. By tracking the total count of invocations, we can
/// log scenarios where the consumer may have inadvertently misconfigured OpenTelemetry in
Expand All @@ -37,25 +37,25 @@ public static class LoggingProviderBuilderExtensions
/// </summary>
/// <param name="builder">The <see cref="LoggerProviderBuilder"/> to configure.</param>
/// <returns>The <see cref="LoggerProviderBuilder"/> for chaining configuration.</returns>
public static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilder builder) =>
UseElasticDefaultsCore(builder, null, null);
public static LoggerProviderBuilder WithElasticDefaults(this LoggerProviderBuilder builder) =>
WithElasticDefaultsCore(builder, null, null);

/// <summary>
/// <inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" />
/// <inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" />
/// </summary>
/// <param name="builder"><inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="builder"><inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="skipOtlpExporter">When registering Elastic defaults, skip automatic registration of the OTLP exporter for logging.</param>
/// <returns><inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" /></returns>
public static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilder builder, bool skipOtlpExporter) =>
UseElasticDefaultsCore(builder, skipOtlpExporter ? CompositeElasticOpenTelemetryOptions.SkipOtlpOptions : CompositeElasticOpenTelemetryOptions.DefaultOptions, null);
/// <returns><inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" /></returns>
public static LoggerProviderBuilder WithElasticDefaults(this LoggerProviderBuilder builder, bool skipOtlpExporter) =>
WithElasticDefaultsCore(builder, skipOtlpExporter ? CompositeElasticOpenTelemetryOptions.SkipOtlpOptions : CompositeElasticOpenTelemetryOptions.DefaultOptions, null);

/// <summary>
/// <inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" />
/// <inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" />
/// </summary>
/// <param name="builder"><inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="builder"><inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="options"><see cref="ElasticOpenTelemetryOptions"/> used to configure the Elastic Distribution of OpenTelemetry (EDOT) for .NET.</param>
/// <returns><inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" /></returns>
public static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilder builder, ElasticOpenTelemetryOptions options)
/// <returns><inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" /></returns>
public static LoggerProviderBuilder WithElasticDefaults(this LoggerProviderBuilder builder, ElasticOpenTelemetryOptions options)
{
#if NET
ArgumentNullException.ThrowIfNull(options);
Expand All @@ -64,36 +64,36 @@ public static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilde
throw new ArgumentNullException(nameof(options));
#endif

return UseElasticDefaultsCore(builder, new(options), null);
return WithElasticDefaultsCore(builder, new(options), null);
}

/// <summary>
/// <inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" />
/// <inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" />
/// </summary>
/// <param name="builder"><inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="builder"><inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="configuration">An <see cref="IConfiguration"/> instance from which to load the OpenTelemetry SDK options.</param>
/// <returns><inheritdoc cref="UseElasticDefaults(LoggerProviderBuilder)" /></returns>
public static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilder builder, IConfiguration configuration)
/// <returns><inheritdoc cref="WithElasticDefaults(LoggerProviderBuilder)" /></returns>
public static LoggerProviderBuilder WithElasticDefaults(this LoggerProviderBuilder builder, IConfiguration configuration)
{
#if NET
ArgumentNullException.ThrowIfNull(configuration);
#else
if (configuration is null)
throw new ArgumentNullException(nameof(configuration));
#endif
return UseElasticDefaultsCore(builder, new(configuration), null);
return WithElasticDefaultsCore(builder, new(configuration), null);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilder builder, ElasticOpenTelemetryComponents components) =>
UseElasticDefaultsCore(builder, components.Options, components);
internal static LoggerProviderBuilder WithElasticDefaults(this LoggerProviderBuilder builder, ElasticOpenTelemetryComponents components) =>
WithElasticDefaultsCore(builder, components.Options, components);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static LoggerProviderBuilder UseElasticDefaults(this LoggerProviderBuilder builder, ElasticOpenTelemetryComponents components, IServiceCollection? services) =>
UseElasticDefaultsCore(builder, components.Options, components, services);
internal static LoggerProviderBuilder WithElasticDefaults(this LoggerProviderBuilder builder, ElasticOpenTelemetryComponents components, IServiceCollection? services) =>
WithElasticDefaultsCore(builder, components.Options, components, services);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static LoggerProviderBuilder UseElasticDefaultsCore(
internal static LoggerProviderBuilder WithElasticDefaultsCore(
this LoggerProviderBuilder builder,
CompositeElasticOpenTelemetryOptions? options,
ElasticOpenTelemetryComponents? components,
Expand All @@ -109,7 +109,7 @@ internal static LoggerProviderBuilder UseElasticDefaultsCore(

try
{
if (!SignalBuilder.ConfigureBuilder(nameof(UseElasticDefaults), providerBuilderName, builder,
if (!SignalBuilder.ConfigureBuilder(nameof(WithElasticDefaults), providerBuilderName, builder,
GlobalLoggerProviderBuilderState, options, services, ConfigureBuilder, ref components))
{
logger = components?.Logger ?? options?.AdditionalLogger ?? NullLogger.Instance; // Update the logger we should use from the ref-returned components.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,26 +38,26 @@ public static class MeterProviderBuilderExtensions
/// </remarks>
/// <param name="builder">The <see cref="MeterProviderBuilder"/> to configure.</param>
/// <returns>The <see cref="MeterProviderBuilder"/> for chaining configuration.</returns>
public static MeterProviderBuilder UseElasticDefaults(this MeterProviderBuilder builder) =>
UseElasticDefaultsCore(builder, null, null);
public static MeterProviderBuilder WithElasticDefaults(this MeterProviderBuilder builder) =>
WithElasticDefaultsCore(builder, null, null);

/// <summary>
/// <inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" />
/// <inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" />
/// </summary>
/// <remarks><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" /></remarks>
/// <param name="builder"><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" path="/param[@name='builder']"/></param>
/// <remarks><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" /></remarks>
/// <param name="builder"><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="skipOtlpExporter">When registering Elastic defaults, skip automatic registration of the OTLP exporter for metrics.</param>
/// <returns><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" /></returns>
public static MeterProviderBuilder UseElasticDefaults(this MeterProviderBuilder builder, bool skipOtlpExporter) =>
UseElasticDefaultsCore(builder, skipOtlpExporter ? CompositeElasticOpenTelemetryOptions.SkipOtlpOptions : null, null);
/// <returns><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" /></returns>
public static MeterProviderBuilder WithElasticDefaults(this MeterProviderBuilder builder, bool skipOtlpExporter) =>
WithElasticDefaultsCore(builder, skipOtlpExporter ? CompositeElasticOpenTelemetryOptions.SkipOtlpOptions : null, null);

/// <summary>
/// <inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" />
/// <inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" />
/// </summary>
/// <param name="builder"><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="builder"><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="options"><see cref="ElasticOpenTelemetryOptions"/> used to configure the Elastic Distribution of OpenTelemetry (EDOT) for .NET.</param>
/// <returns><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" /></returns>
public static MeterProviderBuilder UseElasticDefaults(this MeterProviderBuilder builder, ElasticOpenTelemetryOptions options)
/// <returns><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" /></returns>
public static MeterProviderBuilder WithElasticDefaults(this MeterProviderBuilder builder, ElasticOpenTelemetryOptions options)
{
#if NET
ArgumentNullException.ThrowIfNull(options);
Expand All @@ -66,56 +66,56 @@ public static MeterProviderBuilder UseElasticDefaults(this MeterProviderBuilder
throw new ArgumentNullException(nameof(options));
#endif

return UseElasticDefaultsCore(builder, new(options), null);
return WithElasticDefaultsCore(builder, new(options), null);
}

/// <summary>
/// <inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" />
/// <inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" />
/// </summary>
/// <param name="builder"><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="builder"><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" path="/param[@name='builder']"/></param>
/// <param name="configuration">An <see cref="IConfiguration"/> instance from which to load the Elastic Distribution of
/// OpenTelemetry (EDOT) options.</param>
/// <returns><inheritdoc cref="UseElasticDefaults(MeterProviderBuilder)" /></returns>
public static MeterProviderBuilder UseElasticDefaults(this MeterProviderBuilder builder, IConfiguration configuration)
/// <returns><inheritdoc cref="WithElasticDefaults(MeterProviderBuilder)" /></returns>
public static MeterProviderBuilder WithElasticDefaults(this MeterProviderBuilder builder, IConfiguration configuration)
{
#if NET
ArgumentNullException.ThrowIfNull(configuration);
#else
if (configuration is null)
throw new ArgumentNullException(nameof(configuration));
#endif
return UseElasticDefaultsCore(builder, new(configuration), null);
return WithElasticDefaultsCore(builder, new(configuration), null);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static MeterProviderBuilder UseElasticDefaults(
internal static MeterProviderBuilder WithElasticDefaults(
this MeterProviderBuilder builder,
ElasticOpenTelemetryComponents components) =>
UseElasticDefaultsCore(builder, components.Options, components, null);
WithElasticDefaultsCore(builder, components.Options, components, null);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static MeterProviderBuilder UseElasticDefaults(
internal static MeterProviderBuilder WithElasticDefaults(
this MeterProviderBuilder builder,
ElasticOpenTelemetryComponents components,
IServiceCollection serviceCollection) =>
UseElasticDefaultsCore(builder, components.Options, components, serviceCollection);
WithElasticDefaultsCore(builder, components.Options, components, serviceCollection);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static MeterProviderBuilder UseElasticDefaults(
internal static MeterProviderBuilder WithElasticDefaults(
this MeterProviderBuilder builder,
IConfiguration configuration,
IServiceCollection serviceCollection) =>
UseElasticDefaultsCore(builder, new(configuration), null, serviceCollection);
WithElasticDefaultsCore(builder, new(configuration), null, serviceCollection);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static MeterProviderBuilder UseElasticDefaults(
internal static MeterProviderBuilder WithElasticDefaults(
this MeterProviderBuilder builder,
IServiceCollection serviceCollection) =>
UseElasticDefaultsCore(builder, null, null, serviceCollection);
WithElasticDefaultsCore(builder, null, null, serviceCollection);

[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026", Justification = "The calls to `AddSqlClientInstrumentation` and `AssemblyScanning.AddInstrumentationViaReflection` " +
"are guarded by a RuntimeFeature.IsDynamicCodeSupported` check and therefore this method is safe to call in AoT scenarios.")]
internal static MeterProviderBuilder UseElasticDefaultsCore(
internal static MeterProviderBuilder WithElasticDefaultsCore(
this MeterProviderBuilder builder,
CompositeElasticOpenTelemetryOptions? options,
ElasticOpenTelemetryComponents? components,
Expand All @@ -131,7 +131,7 @@ internal static MeterProviderBuilder UseElasticDefaultsCore(

try
{
if (!SignalBuilder.ConfigureBuilder(nameof(UseElasticDefaults), providerBuilderName, builder,
if (!SignalBuilder.ConfigureBuilder(nameof(WithElasticDefaults), providerBuilderName, builder,
GlobalMeterProviderBuilderState, options, services, ConfigureBuilder, ref components))
{
logger = components?.Logger ?? options?.AdditionalLogger ?? NullLogger.Instance; // Update the logger we should use from the ref-returned components.
Expand Down
Loading
Loading