internal static ResourceBuilder WithElasticDefaultsCore()

in src/Elastic.OpenTelemetry.Core/Extensions/ResourceBuilderExtensions.cs [29:69]


	internal static ResourceBuilder WithElasticDefaultsCore(
		this ResourceBuilder builder,
		BuilderState builderState,
		IServiceCollection? services,
		Action<ResourceBuilder, BuilderState>? configure) =>
			WithElasticDefaultsCore(builder, builderState.Components, services, configure);

	internal static ResourceBuilder WithElasticDefaultsCore(
		this ResourceBuilder builder,
		ElasticOpenTelemetryComponents components,
		IServiceCollection? services,
		Action<ResourceBuilder, BuilderState>? configure)
	{
		var callCount = Interlocked.Increment(ref WithElasticDefaultsCallCount);

		components.Logger.LogWithElasticDefaultsCallCount(callCount, nameof(ResourceBuilder));

		return SignalBuilder.WithElasticDefaults(builder, components.Options, components, services,
			(ResourceBuilder builder, BuilderState builderState, IServiceCollection? services) =>
			{
				var attributes = new Dictionary<string, object>
				{
					{ ResourceSemanticConventions.AttributeServiceInstanceId, ApplicationInstanceId },
					{ ResourceSemanticConventions.AttributeTelemetryDistroName, "elastic" },
					{ ResourceSemanticConventions.AttributeTelemetryDistroVersion, VersionHelper.InformationalVersion }
				};

				builder.AddAttributes(attributes);

				foreach (var attribute in attributes)
				{
					if (attribute.Value is not null)
					{
						var value = attribute.Value.ToString() ?? "<empty>";
						builderState.Components.Logger.LogAddingResourceAttribute(attribute.Key, value, builderState.InstanceIdentifier);
					}
				}

				configure?.Invoke(builder, builderState);
			});
	}