Skip to content
Open
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 @@ -23,6 +23,9 @@ class AttributeLimitsConfiguration
(std::numeric_limits<std::size_t>::max)();
static constexpr std::size_t kDefaultAttributeCountLimit = 128;

bool has_attribute_value_length_limit{false};
bool has_attribute_count_limit{false};

std::size_t attribute_value_length_limit{kDefaultAttributeValueLengthLimit};
std::size_t attribute_count_limit{kDefaultAttributeCountLimit};
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class LogRecordLimitsConfiguration
(std::numeric_limits<std::size_t>::max)();
static constexpr std::size_t kDefaultAttributeCountLimit = 128;

bool has_attribute_value_length_limit{false};
bool has_attribute_count_limit{false};

std::size_t attribute_value_length_limit{kDefaultAttributeValueLengthLimit};
std::size_t attribute_count_limit{kDefaultAttributeCountLimit};
};
Expand Down
8 changes: 6 additions & 2 deletions sdk/include/opentelemetry/sdk/configuration/sdk_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,9 @@ class SdkBuilder

std::unique_ptr<opentelemetry::sdk::trace::TracerProvider> CreateTracerProvider(
const std::unique_ptr<opentelemetry::sdk::configuration::TracerProviderConfiguration> &model,
const opentelemetry::sdk::resource::Resource &resource) const;
const opentelemetry::sdk::resource::Resource &resource,
const opentelemetry::sdk::configuration::AttributeLimitsConfiguration *attribute_limits =
nullptr) const;

std::unique_ptr<opentelemetry::context::propagation::TextMapPropagator> CreateTextMapPropagator(
const std::string &name) const;
Expand Down Expand Up @@ -286,7 +288,9 @@ class SdkBuilder

std::unique_ptr<opentelemetry::sdk::logs::LoggerProvider> CreateLoggerProvider(
const std::unique_ptr<opentelemetry::sdk::configuration::LoggerProviderConfiguration> &model,
const opentelemetry::sdk::resource::Resource &resource) const;
const opentelemetry::sdk::resource::Resource &resource,
const opentelemetry::sdk::configuration::AttributeLimitsConfiguration *attribute_limits =
nullptr) const;

std::unique_ptr<opentelemetry::sdk::resource::ResourceDetector> CreateContainerResourceDetector(
const opentelemetry::sdk::configuration::ContainerResourceDetectorConfiguration *model) const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class SpanLimitsConfiguration
static constexpr std::uint32_t kDefaultEventAttributeCountLimit = 128;
static constexpr std::uint32_t kDefaultLinkAttributeCountLimit = 128;

bool has_attribute_value_length_limit{false};
bool has_attribute_count_limit{false};

std::size_t attribute_value_length_limit{kDefaultAttributeValueLengthLimit};
std::uint32_t attribute_count_limit{kDefaultAttributeCountLimit};
std::uint32_t event_count_limit{kDefaultEventCountLimit};
Expand Down
45 changes: 45 additions & 0 deletions sdk/src/configuration/configuration_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,21 @@ ConfigurationParser::ParseAttributeLimitsConfiguration(
using Config = AttributeLimitsConfiguration;
auto model = std::make_unique<AttributeLimitsConfiguration>();

if (auto child = node->GetChildNode("attribute_value_length_limit"))
{
if (!child->IsNull())
{
model->has_attribute_value_length_limit = true;
}
}
if (auto child = node->GetChildNode("attribute_count_limit"))
{
if (!child->IsNull())
{
model->has_attribute_count_limit = true;
}
}

model->attribute_value_length_limit =
node->GetInteger("attribute_value_length_limit", Config::kDefaultAttributeValueLengthLimit);
model->attribute_count_limit =
Expand Down Expand Up @@ -643,6 +658,21 @@ ConfigurationParser::ParseLogRecordLimitsConfiguration(
using Config = LogRecordLimitsConfiguration;
auto model = std::make_unique<LogRecordLimitsConfiguration>();

if (auto child = node->GetChildNode("attribute_value_length_limit"))
{
if (!child->IsNull())
{
model->has_attribute_value_length_limit = true;
}
}
if (auto child = node->GetChildNode("attribute_count_limit"))
{
if (!child->IsNull())
{
model->has_attribute_count_limit = true;
}
}

model->attribute_value_length_limit =
node->GetInteger("attribute_value_length_limit", Config::kDefaultAttributeValueLengthLimit);
model->attribute_count_limit =
Expand Down Expand Up @@ -1686,6 +1716,21 @@ std::unique_ptr<SpanLimitsConfiguration> ConfigurationParser::ParseSpanLimitsCon
return static_cast<uint32_t>(value);
};

if (auto child = node->GetChildNode("attribute_value_length_limit"))
{
if (!child->IsNull())
{
model->has_attribute_value_length_limit = true;
}
}
if (auto child = node->GetChildNode("attribute_count_limit"))
{
if (!child->IsNull())
{
model->has_attribute_count_limit = true;
}
}

model->attribute_value_length_limit =
node->GetInteger("attribute_value_length_limit", Config::kDefaultAttributeValueLengthLimit);
model->attribute_count_limit =
Expand Down
73 changes: 54 additions & 19 deletions sdk/src/configuration/sdk_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1423,7 +1423,8 @@ SdkBuilder::CreateTracerConfigurator(

std::unique_ptr<opentelemetry::sdk::trace::TracerProvider> SdkBuilder::CreateTracerProvider(
const std::unique_ptr<opentelemetry::sdk::configuration::TracerProviderConfiguration> &model,
const opentelemetry::sdk::resource::Resource &resource) const
const opentelemetry::sdk::resource::Resource &resource,
const opentelemetry::sdk::configuration::AttributeLimitsConfiguration *attribute_limits) const
{
std::unique_ptr<opentelemetry::sdk::trace::TracerProvider> sdk;

Expand Down Expand Up @@ -1451,14 +1452,33 @@ std::unique_ptr<opentelemetry::sdk::trace::TracerProvider> SdkBuilder::CreateTra
}

opentelemetry::sdk::trace::SpanLimits span_limits;
if (attribute_limits)
{
if (attribute_limits->has_attribute_value_length_limit || !model->limits)
{
span_limits.attribute_value_length_limit = attribute_limits->attribute_value_length_limit;
}
if (attribute_limits->has_attribute_count_limit || !model->limits)
{
span_limits.attribute_count_limit =
static_cast<std::uint32_t>(attribute_limits->attribute_count_limit);
}
}

if (model->limits)
{
span_limits.attribute_value_length_limit = model->limits->attribute_value_length_limit;
span_limits.attribute_count_limit = model->limits->attribute_count_limit;
span_limits.event_count_limit = model->limits->event_count_limit;
span_limits.link_count_limit = model->limits->link_count_limit;
span_limits.event_attribute_count_limit = model->limits->event_attribute_count_limit;
span_limits.link_attribute_count_limit = model->limits->link_attribute_count_limit;
if (model->limits->has_attribute_value_length_limit || !attribute_limits)
{
span_limits.attribute_value_length_limit = model->limits->attribute_value_length_limit;
}
if (model->limits->has_attribute_count_limit || !attribute_limits)
{
span_limits.attribute_count_limit = model->limits->attribute_count_limit;
}
span_limits.event_count_limit = model->limits->event_count_limit;
span_limits.link_count_limit = model->limits->link_count_limit;
span_limits.event_attribute_count_limit = model->limits->event_attribute_count_limit;
span_limits.link_attribute_count_limit = model->limits->link_attribute_count_limit;
}

if (model->tracer_configurator)
Expand Down Expand Up @@ -2349,7 +2369,8 @@ SdkBuilder::CreateLoggerConfigurator(

std::unique_ptr<opentelemetry::sdk::logs::LoggerProvider> SdkBuilder::CreateLoggerProvider(
const std::unique_ptr<opentelemetry::sdk::configuration::LoggerProviderConfiguration> &model,
const opentelemetry::sdk::resource::Resource &resource) const
const opentelemetry::sdk::resource::Resource &resource,
const opentelemetry::sdk::configuration::AttributeLimitsConfiguration *attribute_limits) const
{
std::unique_ptr<opentelemetry::sdk::logs::LoggerProvider> sdk;

Expand All @@ -2361,10 +2382,29 @@ std::unique_ptr<opentelemetry::sdk::logs::LoggerProvider> SdkBuilder::CreateLogg
}

opentelemetry::sdk::logs::LogRecordLimits log_record_limits;
if (attribute_limits)
{
if (attribute_limits->has_attribute_value_length_limit || !model->limits)
{
log_record_limits.attribute_value_length_limit =
attribute_limits->attribute_value_length_limit;
}
if (attribute_limits->has_attribute_count_limit || !model->limits)
{
log_record_limits.attribute_count_limit = attribute_limits->attribute_count_limit;
}
}

if (model->limits)
{
log_record_limits.attribute_value_length_limit = model->limits->attribute_value_length_limit;
log_record_limits.attribute_count_limit = model->limits->attribute_count_limit;
if (model->limits->has_attribute_value_length_limit || !attribute_limits)
{
log_record_limits.attribute_value_length_limit = model->limits->attribute_value_length_limit;
}
if (model->limits->has_attribute_count_limit || !attribute_limits)
{
log_record_limits.attribute_count_limit = model->limits->attribute_count_limit;
}
}

std::unique_ptr<opentelemetry::sdk::instrumentationscope::ScopeConfigurator<
Expand Down Expand Up @@ -2644,16 +2684,10 @@ std::unique_ptr<ConfiguredSdk> SdkBuilder::CreateConfiguredSdk(
{
SetResource(sdk->resource, model->resource);

if (model->attribute_limits)
{
// FIXME-SDK: https://github.com/open-telemetry/opentelemetry-cpp/issues/3303
// FIXME-SDK: Implement attribute limits
OTEL_INTERNAL_LOG_WARN("attribute_limits not supported, ignoring");
}

if (model->tracer_provider)
{
sdk->tracer_provider = CreateTracerProvider(model->tracer_provider, sdk->resource);
sdk->tracer_provider = CreateTracerProvider(
model->tracer_provider, sdk->resource, model->attribute_limits.get());
}

if (model->propagator)
Expand All @@ -2668,7 +2702,8 @@ std::unique_ptr<ConfiguredSdk> SdkBuilder::CreateConfiguredSdk(

if (model->logger_provider)
{
sdk->logger_provider = CreateLoggerProvider(model->logger_provider, sdk->resource);
sdk->logger_provider = CreateLoggerProvider(
model->logger_provider, sdk->resource, model->attribute_limits.get());
}
}

Expand Down
Loading