Skip to content

Commit d9580d0

Browse files
committed
Rework on MetricProducer
1 parent 6fc4d37 commit d9580d0

File tree

5 files changed

+207
-1
lines changed

5 files changed

+207
-1
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#include <memory>
7+
#include <string>
8+
9+
#include "opentelemetry/sdk/configuration/document_node.h"
10+
#include "opentelemetry/sdk/configuration/metric_producer_configuration.h"
11+
#include "opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h"
12+
#include "opentelemetry/version.h"
13+
14+
OPENTELEMETRY_BEGIN_NAMESPACE
15+
namespace sdk
16+
{
17+
namespace configuration
18+
{
19+
20+
class ExtensionMetricProducerConfiguration : public MetricProducerConfiguration
21+
{
22+
public:
23+
void Accept(MetricProducerConfigurationVisitor *visitor) const override
24+
{
25+
visitor->VisitExtension(this);
26+
}
27+
28+
std::string name;
29+
std::unique_ptr<DocumentNode> node;
30+
};
31+
32+
} // namespace configuration
33+
} // namespace sdk
34+
OPENTELEMETRY_END_NAMESPACE
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#include "opentelemetry/version.h"
7+
8+
OPENTELEMETRY_BEGIN_NAMESPACE
9+
namespace sdk
10+
{
11+
namespace configuration
12+
{
13+
14+
class OpenCensusMetricProducerConfiguration;
15+
class ExtensionMetricProducerConfiguration;
16+
17+
class MetricProducerConfigurationVisitor
18+
{
19+
public:
20+
MetricProducerConfigurationVisitor() = default;
21+
MetricProducerConfigurationVisitor(MetricProducerConfigurationVisitor &&) = default;
22+
MetricProducerConfigurationVisitor(const MetricProducerConfigurationVisitor &) = default;
23+
MetricProducerConfigurationVisitor &operator=(MetricProducerConfigurationVisitor &&) = default;
24+
MetricProducerConfigurationVisitor &operator=(const MetricProducerConfigurationVisitor &other) =
25+
default;
26+
virtual ~MetricProducerConfigurationVisitor() = default;
27+
28+
virtual void VisitOpenCensus(const OpenCensusMetricProducerConfiguration *model) = 0;
29+
virtual void VisitExtension(const ExtensionMetricProducerConfiguration *model) = 0;
30+
};
31+
32+
} // namespace configuration
33+
} // namespace sdk
34+
OPENTELEMETRY_END_NAMESPACE
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#include <string>
7+
8+
#include "opentelemetry/sdk/configuration/metric_producer_configuration.h"
9+
#include "opentelemetry/sdk/configuration/metric_producer_configuration_visitor.h"
10+
#include "opentelemetry/version.h"
11+
12+
OPENTELEMETRY_BEGIN_NAMESPACE
13+
namespace sdk
14+
{
15+
namespace configuration
16+
{
17+
18+
// YAML-SCHEMA: schema/meter_provider.json
19+
// YAML-NODE: OpenCensusMetricProducer
20+
class OpenCensusMetricProducerConfiguration : public MetricProducerConfiguration
21+
{
22+
public:
23+
void Accept(MetricProducerConfigurationVisitor *visitor) const override
24+
{
25+
visitor->VisitOpenCensus(this);
26+
}
27+
};
28+
29+
} // namespace configuration
30+
} // namespace sdk
31+
OPENTELEMETRY_END_NAMESPACE

sdk/src/configuration/configuration_parser.cc

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "opentelemetry/sdk/configuration/explicit_bucket_histogram_aggregation_configuration.h"
3838
#include "opentelemetry/sdk/configuration/extension_log_record_exporter_configuration.h"
3939
#include "opentelemetry/sdk/configuration/extension_log_record_processor_configuration.h"
40+
#include "opentelemetry/sdk/configuration/extension_metric_producer_configuration.h"
4041
#include "opentelemetry/sdk/configuration/extension_pull_metric_exporter_configuration.h"
4142
#include "opentelemetry/sdk/configuration/extension_push_metric_exporter_configuration.h"
4243
#include "opentelemetry/sdk/configuration/extension_sampler_configuration.h"
@@ -55,7 +56,9 @@
5556
#include "opentelemetry/sdk/configuration/log_record_processor_configuration.h"
5657
#include "opentelemetry/sdk/configuration/logger_provider_configuration.h"
5758
#include "opentelemetry/sdk/configuration/meter_provider_configuration.h"
59+
#include "opentelemetry/sdk/configuration/metric_producer_configuration.h"
5860
#include "opentelemetry/sdk/configuration/metric_reader_configuration.h"
61+
#include "opentelemetry/sdk/configuration/open_census_metric_producer_configuration.h"
5962
#include "opentelemetry/sdk/configuration/otlp_file_log_record_exporter_configuration.h"
6063
#include "opentelemetry/sdk/configuration/otlp_file_push_metric_exporter_configuration.h"
6164
#include "opentelemetry/sdk/configuration/otlp_file_span_exporter_configuration.h"
@@ -703,6 +706,61 @@ static std::unique_ptr<PullMetricExporterConfiguration> ParsePullMetricExporterC
703706
return model;
704707
}
705708

709+
static std::unique_ptr<OpenCensusMetricProducerConfiguration>
710+
ParseOpenCensusMetricProducerConfiguration(const std::unique_ptr<DocumentNode> & /* node */)
711+
{
712+
auto model = std::make_unique<OpenCensusMetricProducerConfiguration>();
713+
714+
return model;
715+
}
716+
717+
static std::unique_ptr<ExtensionMetricProducerConfiguration>
718+
ParseExtensionMetricProducerConfiguration(const std::string &name,
719+
std::unique_ptr<DocumentNode> node)
720+
{
721+
auto model = std::make_unique<ExtensionMetricProducerConfiguration>();
722+
723+
model->name = name;
724+
model->node = std::move(node);
725+
726+
return model;
727+
}
728+
729+
static std::unique_ptr<MetricProducerConfiguration> ParseMetricProducerConfiguration(
730+
const std::unique_ptr<DocumentNode> &node)
731+
{
732+
std::unique_ptr<MetricProducerConfiguration> model;
733+
734+
std::string name;
735+
std::unique_ptr<DocumentNode> child;
736+
size_t count = 0;
737+
738+
for (auto it = node->begin_properties(); it != node->end_properties(); ++it)
739+
{
740+
name = it.Name();
741+
child = it.Value();
742+
count++;
743+
}
744+
745+
if (count != 1)
746+
{
747+
std::string message("Illegal metric producer, properties count: ");
748+
message.append(std::to_string(count));
749+
throw InvalidSchemaException(message);
750+
}
751+
752+
if (name == "opencensus")
753+
{
754+
model = ParseOpenCensusMetricProducerConfiguration(child);
755+
}
756+
else
757+
{
758+
model = ParseExtensionMetricProducerConfiguration(name, std::move(child));
759+
}
760+
761+
return model;
762+
}
763+
706764
static std::unique_ptr<PeriodicMetricReaderConfiguration> ParsePeriodicMetricReaderConfiguration(
707765
const std::unique_ptr<DocumentNode> &node)
708766
{
@@ -715,6 +773,16 @@ static std::unique_ptr<PeriodicMetricReaderConfiguration> ParsePeriodicMetricRea
715773
child = node->GetRequiredChildNode("exporter");
716774
model->exporter = ParsePushMetricExporterConfiguration(child);
717775

776+
child = node->GetChildNode("producers");
777+
778+
if (child)
779+
{
780+
for (auto it = child->begin(); it != child->end(); ++it)
781+
{
782+
model->producers.push_back(ParseMetricProducerConfiguration(*it));
783+
}
784+
}
785+
718786
return model;
719787
}
720788

@@ -727,6 +795,16 @@ static std::unique_ptr<PullMetricReaderConfiguration> ParsePullMetricReaderConfi
727795
child = node->GetRequiredChildNode("exporter");
728796
model->exporter = ParsePullMetricExporterConfiguration(child);
729797

798+
child = node->GetChildNode("producers");
799+
800+
if (child)
801+
{
802+
for (auto it = child->begin(); it != child->end(); ++it)
803+
{
804+
model->producers.push_back(ParseMetricProducerConfiguration(*it));
805+
}
806+
}
807+
730808
return model;
731809
}
732810

sdk/src/configuration/sdk_builder.cc

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1074,7 +1074,26 @@ SdkBuilder::CreatePropagator(
10741074
propagators.push_back(std::move(propagator));
10751075
}
10761076

1077-
// FIXME: composite_list
1077+
if (model->composite_list.size() > 0)
1078+
{
1079+
std::string str_list = model->composite_list;
1080+
size_t start_pos = 0;
1081+
size_t end_pos = 0;
1082+
char separator = ',';
1083+
std::string name;
1084+
1085+
while ((end_pos = str_list.find(separator, start_pos)) != std::string::npos)
1086+
{
1087+
name = str_list.substr(start_pos, end_pos - start_pos);
1088+
propagator = CreateTextMapPropagator(name);
1089+
propagators.push_back(std::move(propagator));
1090+
start_pos = end_pos + 1;
1091+
}
1092+
1093+
name = str_list.substr(start_pos);
1094+
propagator = CreateTextMapPropagator(name);
1095+
propagators.push_back(std::move(propagator));
1096+
}
10781097

10791098
auto sdk = std::make_unique<opentelemetry::context::propagation::CompositePropagator>(
10801099
std::move(propagators));
@@ -1295,6 +1314,11 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePer
12951314

12961315
auto exporter_sdk = CreatePushMetricExporter(model->exporter);
12971316

1317+
if (model->producers.size() > 0)
1318+
{
1319+
OTEL_INTERNAL_LOG_WARN("metric producer not supported, ignoring");
1320+
}
1321+
12981322
sdk = opentelemetry::sdk::metrics::PeriodicExportingMetricReaderFactory::Create(
12991323
std::move(exporter_sdk), options);
13001324

@@ -1308,6 +1332,11 @@ std::unique_ptr<opentelemetry::sdk::metrics::MetricReader> SdkBuilder::CreatePul
13081332

13091333
sdk = CreatePullMetricExporter(model->exporter);
13101334

1335+
if (model->producers.size() > 0)
1336+
{
1337+
OTEL_INTERNAL_LOG_WARN("metric producer not supported, ignoring");
1338+
}
1339+
13111340
return sdk;
13121341
}
13131342

0 commit comments

Comments
 (0)