Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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 @@ -32,6 +32,9 @@ Increment the:
* [BUILD] Upgrade to opentelemetry-proto 1.8.0
[#3730](https://github.com/open-telemetry/opentelemetry-cpp/pull/3730)

* [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:
Comment thread
marcalff marked this conversation as resolved.
/*
* 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 @@ -226,8 +226,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 @@ -530,16 +530,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 All @@ -566,10 +567,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 @@ -588,10 +590,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 @@ -601,11 +604,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 @@ -1440,8 +1450,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