@@ -1471,14 +1471,24 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePer
14711471 OTEL_INTERNAL_LOG_WARN (" metric producer not supported, ignoring" );
14721472 }
14731473
1474+ sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create (
1475+ std::move (exporter_sdk), options);
1476+
14741477 if (model->cardinality_limits != nullptr )
14751478 {
1476- OTEL_INTERNAL_LOG_WARN (" cardinality limits not supported, ignoring" );
1479+ opentelemetry::sdk::metrics::CardinalityLimitOptions cardinality_options;
1480+ cardinality_options.default_limit = model->cardinality_limits ->default_limit ;
1481+ cardinality_options.counter = model->cardinality_limits ->counter ;
1482+ cardinality_options.gauge = model->cardinality_limits ->gauge ;
1483+ cardinality_options.histogram = model->cardinality_limits ->histogram ;
1484+ cardinality_options.observable_counter = model->cardinality_limits ->observable_counter ;
1485+ cardinality_options.observable_gauge = model->cardinality_limits ->observable_gauge ;
1486+ cardinality_options.observable_up_down_counter =
1487+ model->cardinality_limits ->observable_up_down_counter ;
1488+ cardinality_options.up_down_counter = model->cardinality_limits ->up_down_counter ;
1489+ sdk->SetCardinalityLimitOptions (cardinality_options);
14771490 }
14781491
1479- sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create (
1480- std::move (exporter_sdk), options);
1481-
14821492 return sdk;
14831493}
14841494
@@ -1496,7 +1506,17 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePul
14961506
14971507 if (model->cardinality_limits != nullptr )
14981508 {
1499- OTEL_INTERNAL_LOG_WARN (" cardinality limits not supported, ignoring" );
1509+ opentelemetry::sdk::metrics::CardinalityLimitOptions cardinality_options;
1510+ cardinality_options.default_limit = model->cardinality_limits ->default_limit ;
1511+ cardinality_options.counter = model->cardinality_limits ->counter ;
1512+ cardinality_options.gauge = model->cardinality_limits ->gauge ;
1513+ cardinality_options.histogram = model->cardinality_limits ->histogram ;
1514+ cardinality_options.observable_counter = model->cardinality_limits ->observable_counter ;
1515+ cardinality_options.observable_gauge = model->cardinality_limits ->observable_gauge ;
1516+ cardinality_options.observable_up_down_counter =
1517+ model->cardinality_limits ->observable_up_down_counter ;
1518+ cardinality_options.up_down_counter = model->cardinality_limits ->up_down_counter ;
1519+ sdk->SetCardinalityLimitOptions (cardinality_options);
15001520 }
15011521
15021522 return sdk;
@@ -1600,6 +1620,20 @@ void SdkBuilder::AddView(
16001620
16011621 sdk_aggregation_config = CreateAggregationConfig (stream->aggregation , sdk_aggregation_type);
16021622
1623+ // Apply aggregation_cardinality_limit from the view stream configuration
1624+ if (stream->aggregation_cardinality_limit != 0 )
1625+ {
1626+ if (sdk_aggregation_config)
1627+ {
1628+ sdk_aggregation_config->cardinality_limit_ = stream->aggregation_cardinality_limit ;
1629+ }
1630+ else
1631+ {
1632+ sdk_aggregation_config = std::make_shared<opentelemetry::sdk::metrics::AggregationConfig>(
1633+ stream->aggregation_cardinality_limit );
1634+ }
1635+ }
1636+
16031637 std::unique_ptr<opentelemetry::sdk::metrics::AttributesProcessor> sdk_attribute_processor;
16041638
16051639 if (stream->attribute_keys != nullptr )
0 commit comments