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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ Increment the:
* [CONFIGURATION] File configuration - tls
[#3726](https://github.com/open-telemetry/opentelemetry-cpp/pull/3726)

* [CONFIGURATION] File configuration - console metric exporter
[#3734](https://github.com/open-telemetry/opentelemetry-cpp/pull/3734)

New Features:

* [CONFIGURATION] Implement declarative configuration (config.yaml)
Expand Down
30 changes: 27 additions & 3 deletions exporters/ostream/src/console_push_metric_builder.cc
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#include <iostream>
#include <memory>
#include <utility>

#include "opentelemetry/exporters/ostream/console_push_metric_builder.h"
#include "opentelemetry/exporters/ostream/metric_exporter_factory.h"
#include "opentelemetry/sdk/common/global_log_handler.h"
#include "opentelemetry/sdk/configuration/console_push_metric_exporter_builder.h"
#include "opentelemetry/sdk/configuration/console_push_metric_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/registry.h"
#include "opentelemetry/sdk/configuration/temporality_preference.h"
#include "opentelemetry/sdk/metrics/instruments.h"
#include "opentelemetry/sdk/metrics/push_metric_exporter.h"
#include "opentelemetry/version.h"

Expand All @@ -25,10 +29,30 @@ void ConsolePushMetricBuilder::Register(opentelemetry::sdk::configuration::Regis
}

std::unique_ptr<opentelemetry::sdk::metrics::PushMetricExporter> ConsolePushMetricBuilder::Build(
const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration * /* model */)
const
const opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration *model) const
{
return OStreamMetricExporterFactory::Create();
sdk::metrics::AggregationTemporality aggregation_temporality;

switch (model->temporality_preference)
{
case opentelemetry::sdk::configuration::TemporalityPreference::delta:
aggregation_temporality = sdk::metrics::AggregationTemporality::kDelta;
break;
case opentelemetry::sdk::configuration::TemporalityPreference::low_memory:
/*
* FIXME: OStreamMetricExporter does not support "low_memory"
* temporality
*/
OTEL_INTERNAL_LOG_WARN("[Console Exporter] TemporalityPreference::low_memory not supported");
aggregation_temporality = sdk::metrics::AggregationTemporality::kCumulative;
break;
case opentelemetry::sdk::configuration::TemporalityPreference::cumulative:
default:
aggregation_temporality = sdk::metrics::AggregationTemporality::kCumulative;
break;
};

return OStreamMetricExporterFactory::Create(std::cout, aggregation_temporality);
}

} // namespace metrics
Expand Down
9 changes: 8 additions & 1 deletion install/test/src/test_exporters_ostream_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,14 @@ TEST(ExportersOstreamBuilderInstall, ConsolePushMetricBuilder)
{
auto builder = std::make_unique<opentelemetry::exporter::metrics::ConsolePushMetricBuilder>();
ASSERT_TRUE(builder != nullptr);
auto exporter = builder->Build(nullptr);

opentelemetry::sdk::configuration::ConsolePushMetricExporterConfiguration model;
model.temporality_preference =
opentelemetry::sdk::configuration::TemporalityPreference::cumulative;
model.default_histogram_aggregation =
opentelemetry::sdk::configuration::DefaultHistogramAggregation::explicit_bucket_histogram;

auto exporter = builder->Build(&model);
ASSERT_TRUE(exporter != nullptr);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@

#pragma once

#include "opentelemetry/sdk/configuration/default_histogram_aggregation.h"
#include "opentelemetry/sdk/configuration/headers_configuration.h"
#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/push_metric_exporter_configuration_visitor.h"
#include "opentelemetry/sdk/configuration/temporality_preference.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
Expand All @@ -14,15 +16,19 @@ namespace sdk
namespace configuration
{

// YAML-SCHEMA: schema/common.json
// YAML-NODE: Console
// YAML-SCHEMA: schema/meter_provider.json
// YAML-NODE: ConsoleMetricExporter
class ConsolePushMetricExporterConfiguration : public PushMetricExporterConfiguration
{
public:
void Accept(PushMetricExporterConfigurationVisitor *visitor) const override
{
visitor->VisitConsole(this);
}

TemporalityPreference temporality_preference{TemporalityPreference::cumulative};
DefaultHistogramAggregation default_histogram_aggregation{
DefaultHistogramAggregation::explicit_bucket_histogram};
};

} // namespace configuration
Expand Down
44 changes: 27 additions & 17 deletions sdk/src/configuration/configuration_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,8 @@ ConfigurationParser::ParseOtlpHttpLogRecordExporterConfiguration(
model->compression = node->GetString("compression", "");
model->timeout = node->GetInteger("timeout", 10000);

std::string encoding = node->GetString("encoding", "protobuf");
model->encoding = ParseOtlpHttpEncoding(node, encoding);
const std::string encoding = node->GetString("encoding", "protobuf");
model->encoding = ParseOtlpHttpEncoding(node, encoding);

return model;
}
Expand Down Expand Up @@ -565,16 +565,17 @@ ConfigurationParser::ParseOtlpHttpPushMetricExporterConfiguration(
model->compression = node->GetString("compression", "");
model->timeout = node->GetInteger("timeout", 10000);

std::string temporality_preference = node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);
const std::string temporality_preference =
node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);

std::string default_histogram_aggregation =
const std::string default_histogram_aggregation =
node->GetString("default_histogram_aggregation", "explicit_bucket_histogram");
model->default_histogram_aggregation =
ParseDefaultHistogramAggregation(node, default_histogram_aggregation);

std::string encoding = node->GetString("encoding", "protobuf");
model->encoding = ParseOtlpHttpEncoding(node, encoding);
const std::string encoding = node->GetString("encoding", "protobuf");
model->encoding = ParseOtlpHttpEncoding(node, encoding);

return model;
}
Expand Down Expand Up @@ -604,10 +605,11 @@ ConfigurationParser::ParseOtlpGrpcPushMetricExporterConfiguration(
model->compression = node->GetString("compression", "");
model->timeout = node->GetInteger("timeout", 10000);

std::string temporality_preference = node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);
const std::string temporality_preference =
node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);

std::string default_histogram_aggregation =
const std::string default_histogram_aggregation =
node->GetString("default_histogram_aggregation", "explicit_bucket_histogram");
model->default_histogram_aggregation =
ParseDefaultHistogramAggregation(node, default_histogram_aggregation);
Expand All @@ -624,10 +626,11 @@ ConfigurationParser::ParseOtlpFilePushMetricExporterConfiguration(

model->output_stream = node->GetString("output_stream", "");

std::string temporality_preference = node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);
const std::string temporality_preference =
node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);

std::string default_histogram_aggregation =
const std::string default_histogram_aggregation =
node->GetString("default_histogram_aggregation", "explicit_bucket_histogram");
model->default_histogram_aggregation =
ParseDefaultHistogramAggregation(node, default_histogram_aggregation);
Expand All @@ -637,11 +640,18 @@ ConfigurationParser::ParseOtlpFilePushMetricExporterConfiguration(

std::unique_ptr<ConsolePushMetricExporterConfiguration>
ConfigurationParser::ParseConsolePushMetricExporterConfiguration(
const std::unique_ptr<DocumentNode> & /* node */) const
const std::unique_ptr<DocumentNode> &node) const
{
auto model = std::make_unique<ConsolePushMetricExporterConfiguration>();

// FIXME-CONFIG: https://github.com/open-telemetry/opentelemetry-configuration/issues/242
const std::string temporality_preference =
node->GetString("temporality_preference", "cumulative");
model->temporality_preference = ParseTemporalityPreference(node, temporality_preference);

const std::string default_histogram_aggregation =
node->GetString("default_histogram_aggregation", "explicit_bucket_histogram");
model->default_histogram_aggregation =
ParseDefaultHistogramAggregation(node, default_histogram_aggregation);

return model;
}
Expand Down Expand Up @@ -1479,8 +1489,8 @@ ConfigurationParser::ParseOtlpHttpSpanExporterConfiguration(
model->compression = node->GetString("compression", "");
model->timeout = node->GetInteger("timeout", 10000);

std::string encoding = node->GetString("encoding", "protobuf");
model->encoding = ParseOtlpHttpEncoding(node, encoding);
const std::string encoding = node->GetString("encoding", "protobuf");
model->encoding = ParseOtlpHttpEncoding(node, encoding);

return model;
}
Expand Down
Loading