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
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>

#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h"
#include "opentelemetry/sdk/metrics/metric_reader.h"
#include "opentelemetry/sdk/metrics/push_metric_exporter.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

class PeriodicMetricReaderBuilder
{
public:
PeriodicMetricReaderBuilder() = default;
PeriodicMetricReaderBuilder(PeriodicMetricReaderBuilder &&) = default;
PeriodicMetricReaderBuilder(const PeriodicMetricReaderBuilder &) = default;
PeriodicMetricReaderBuilder &operator=(PeriodicMetricReaderBuilder &&) = default;
PeriodicMetricReaderBuilder &operator=(const PeriodicMetricReaderBuilder &other) = default;
virtual ~PeriodicMetricReaderBuilder() = default;

virtual std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> Build(
const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model,
std::unique_ptr<opentelemetry::sdk::metrics::PushMetricExporter> &&exporter) const = 0;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
12 changes: 12 additions & 0 deletions sdk/include/opentelemetry/sdk/configuration/registry.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "opentelemetry/sdk/configuration/otlp_http_log_record_exporter_builder.h"
#include "opentelemetry/sdk/configuration/otlp_http_push_metric_exporter_builder.h"
#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h"
#include "opentelemetry/sdk/configuration/periodic_metric_reader_builder.h"
#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h"
#include "opentelemetry/sdk/configuration/text_map_propagator_builder.h"
#include "opentelemetry/version.h"
Expand Down Expand Up @@ -143,6 +144,16 @@ class Registry
prometheus_metric_builder_ = std::move(builder);
}

const PeriodicMetricReaderBuilder *GetPeriodicMetricReaderBuilder() const
{
return periodic_metric_reader_builder_.get();
}

void SetPeriodicMetricReaderBuilder(std::unique_ptr<PeriodicMetricReaderBuilder> &&builder)
{
periodic_metric_reader_builder_ = std::move(builder);
}

const OtlpHttpLogRecordExporterBuilder *GetOtlpHttpLogRecordBuilder() const
{
return otlp_http_log_record_builder_.get();
Expand Down Expand Up @@ -246,6 +257,7 @@ class Registry
std::unique_ptr<OtlpFilePushMetricExporterBuilder> otlp_file_push_metric_builder_;
std::unique_ptr<ConsolePushMetricExporterBuilder> console_metric_builder_;
std::unique_ptr<PrometheusPullMetricExporterBuilder> prometheus_metric_builder_;
std::unique_ptr<PeriodicMetricReaderBuilder> periodic_metric_reader_builder_;

std::unique_ptr<OtlpHttpLogRecordExporterBuilder> otlp_http_log_record_builder_;
std::unique_ptr<OtlpGrpcLogRecordExporterBuilder> otlp_grpc_log_record_builder_;
Expand Down
26 changes: 26 additions & 0 deletions sdk/src/configuration/registry.cc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#include <chrono>
#include <map>
#include <memory>
#include <string>
Expand All @@ -14,8 +15,14 @@
#include "opentelemetry/sdk/configuration/extension_sampler_builder.h"
#include "opentelemetry/sdk/configuration/extension_span_exporter_builder.h"
#include "opentelemetry/sdk/configuration/extension_span_processor_builder.h"
#include "opentelemetry/sdk/configuration/periodic_metric_reader_builder.h"
#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h"
#include "opentelemetry/sdk/configuration/registry.h"
#include "opentelemetry/sdk/configuration/text_map_propagator_builder.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h"
#include "opentelemetry/sdk/metrics/metric_reader.h"
#include "opentelemetry/sdk/metrics/push_metric_exporter.h"
#include "opentelemetry/trace/propagation/b3_propagator.h"
#include "opentelemetry/trace/propagation/http_trace_context.h"
#include "opentelemetry/trace/propagation/jaeger.h"
Expand Down Expand Up @@ -80,6 +87,23 @@ class JaegerBuilder : public TextMapPropagatorBuilder
}
};

class DefaultPeriodicMetricReaderBuilder : public PeriodicMetricReaderBuilder
{
public:
std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> Build(
const opentelemetry::sdk::configuration::PeriodicMetricReaderConfiguration *model,
std::unique_ptr<opentelemetry::sdk::metrics::PushMetricExporter> &&exporter) const override
{
opentelemetry::sdk::metrics::PeriodicExportingMetricReaderOptions options;

options.export_interval_millis = std::chrono::milliseconds(model->interval);
options.export_timeout_millis = std::chrono::milliseconds(model->timeout);

return opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create(
std::move(exporter), options);
}
};

} // namespace

Registry::Registry()
Expand All @@ -89,6 +113,8 @@ Registry::Registry()
SetTextMapPropagatorBuilder("b3", std::make_unique<B3Builder>());
SetTextMapPropagatorBuilder("b3multi", std::make_unique<B3MultiBuilder>());
SetTextMapPropagatorBuilder("jaeger", std::make_unique<JaegerBuilder>());

SetPeriodicMetricReaderBuilder(std::make_unique<DefaultPeriodicMetricReaderBuilder>());
}

const TextMapPropagatorBuilder *Registry::GetTextMapPropagatorBuilder(const std::string &name) const
Expand Down
21 changes: 11 additions & 10 deletions sdk/src/configuration/sdk_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_builder.h"
#include "opentelemetry/sdk/configuration/otlp_http_span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/parent_based_sampler_configuration.h"
#include "opentelemetry/sdk/configuration/periodic_metric_reader_builder.h"
#include "opentelemetry/sdk/configuration/periodic_metric_reader_configuration.h"
#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_builder.h"
#include "opentelemetry/sdk/configuration/prometheus_pull_metric_exporter_configuration.h"
Expand Down Expand Up @@ -145,8 +146,6 @@
#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h"
#include "opentelemetry/sdk/metrics/export/metric_producer.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h"
#include "opentelemetry/sdk/metrics/instruments.h"
#include "opentelemetry/sdk/metrics/meter_config.h"
#include "opentelemetry/sdk/metrics/meter_context.h"
Expand Down Expand Up @@ -1555,11 +1554,6 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePer
{
std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> sdk;

opentelemetry::sdk::metrics::PeriodicExportingMetricReaderOptions options;

options.export_interval_millis = std::chrono::milliseconds(model->interval);
options.export_timeout_millis = std::chrono::milliseconds(model->timeout);

auto exporter_sdk = CreatePushMetricExporter(model->exporter);

if (model->producers.size() > 0)
Expand All @@ -1572,10 +1566,17 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePer
OTEL_INTERNAL_LOG_WARN("cardinality limits not supported, ignoring");
}

sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create(
std::move(exporter_sdk), options);
const PeriodicMetricReaderBuilder *builder = registry_->GetPeriodicMetricReaderBuilder();

return sdk;
if (builder != nullptr)
{
OTEL_INTERNAL_LOG_DEBUG("CreatePeriodicMetricReader() using registered builder");
sdk = builder->Build(model, std::move(exporter_sdk));
return sdk;
}

static const std::string die("No builder for PeriodicMetricReader");
throw UnsupportedException(die);
}

std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePullMetricReader(
Expand Down
3 changes: 3 additions & 0 deletions sdk/test/configuration/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ load("@rules_cc//cc:cc_test.bzl", "cc_test")
cc_test(
name = "sdk_builder_test",
srcs = [
"config_test_common.h",
"sdk_builder_test.cc",
],
tags = [
Expand All @@ -26,6 +27,7 @@ cc_test(
cc_test(
name = "configured_sdk_test",
srcs = [
"config_test_common.h",
"configured_sdk_test.cc",
],
tags = [
Expand All @@ -46,6 +48,7 @@ cc_test(
cc_test(
name = "programmatic_configuration_test",
srcs = [
"config_test_common.h",
"programmatic_configuration_test.cc",
],
tags = [
Expand Down
Loading
Loading