Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>

#include "opentelemetry/sdk/configuration/span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/span_processor_configuration.h"
#include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/tracer_provider.json
// YAML-NODE: BatchSpanProcessor
class BatchSpanProcessorConfiguration : public SpanProcessorConfiguration
{
public:
void Accept(SpanProcessorConfigurationVisitor *visitor) const override
{
visitor->VisitBatch(this);
}

std::size_t schedule_delay{0};
std::size_t export_timeout{0};
std::size_t max_queue_size{0};
std::size_t max_export_batch_size{0};
std::unique_ptr<SpanExporterConfiguration> exporter;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
75 changes: 75 additions & 0 deletions sdk/include/opentelemetry/sdk/configuration/configuration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>
#include <string>

#include "opentelemetry/sdk/configuration/attribute_limits_configuration.h"
#include "opentelemetry/sdk/configuration/document.h"
#include "opentelemetry/sdk/configuration/logger_provider_configuration.h"
#include "opentelemetry/sdk/configuration/meter_provider_configuration.h"
#include "opentelemetry/sdk/configuration/propagator_configuration.h"
#include "opentelemetry/sdk/configuration/resource_configuration.h"
#include "opentelemetry/sdk/configuration/tracer_provider_configuration.h"
#include "opentelemetry/version.h"

/*
* General notes about configuration classes.
*
* Each Yaml node that exists in the yaml schema,
* as defined by https://github.com/open-telemetry/opentelemetry-configuration
* is represented by a C++ class.
* Special comments are used to relate the C++ class to
* the Yaml node it represents.
*
* YAML-SCHEMA: points to the relevant file within the
* opentelemetry-configuration repository
* YAML-NODE: points to the relevant node within the file.
*
* For example,
* C++ class opentelemetry::sdk::configuration::Configuration
* corresponds to
* Yaml node OpenTelemetryConfiguration,
* in file
* https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/opentelemetry_configuration.json
*/

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/opentelemetry_configuration.json
// YAML-NODE: OpenTelemetryConfiguration
class Configuration
{
public:
Configuration(std::unique_ptr<Document> doc) : doc_(std::move(doc)) {}
Configuration(Configuration &&) = delete;
Configuration(const Configuration &) = delete;
Configuration &operator=(Configuration &&) = delete;
Configuration &operator=(const Configuration &other) = delete;
~Configuration() = default;

std::string file_format;
bool disabled{false};
std::string log_level;

std::unique_ptr<AttributeLimitsConfiguration> attribute_limits;
std::unique_ptr<LoggerProviderConfiguration> logger_provider;
std::unique_ptr<MeterProviderConfiguration> meter_provider;
std::unique_ptr<PropagatorConfiguration> propagator;
std::unique_ptr<TracerProviderConfiguration> tracer_provider;
std::unique_ptr<ResourceConfiguration> resource;
// Ignored: instrumentation

private:
std::unique_ptr<Document> doc_;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "opentelemetry/sdk/configuration/span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/common.json
// YAML-NODE: Console
class ConsoleSpanExporterConfiguration : public SpanExporterConfiguration
{
public:
void Accept(SpanExporterConfigurationVisitor *visitor) const override
{
visitor->VisitConsole(this);
}
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <string>

#include "opentelemetry/sdk/configuration/span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/common.json
// YAML-NODE: ExperimentalOtlpFileExporter
class OtlpFileSpanExporterConfiguration : public SpanExporterConfiguration
{
public:
void Accept(SpanExporterConfigurationVisitor *visitor) const override
{
visitor->VisitOtlpFile(this);
}

std::string output_stream;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>
#include <string>

#include "opentelemetry/sdk/configuration/headers_configuration.h"
#include "opentelemetry/sdk/configuration/span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/common.json
// YAML-NODE: OtlpGrpcExporter
class OtlpGrpcSpanExporterConfiguration : public SpanExporterConfiguration
{
public:
void Accept(SpanExporterConfigurationVisitor *visitor) const override
{
visitor->VisitOtlpGrpc(this);
}

std::string endpoint;
std::string certificate_file;
std::string client_key_file;
std::string client_certificate_file;
std::unique_ptr<HeadersConfiguration> headers;
std::string headers_list;
std::string compression;
std::size_t timeout{0};
bool insecure{false};
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>
#include <string>

#include "opentelemetry/sdk/configuration/headers_configuration.h"
#include "opentelemetry/sdk/configuration/otlp_http_encoding.h"
#include "opentelemetry/sdk/configuration/span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/span_exporter_configuration_visitor.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/common.json
// YAML-NODE: OtlpHttpExporter
class OtlpHttpSpanExporterConfiguration : public SpanExporterConfiguration
{
public:
void Accept(SpanExporterConfigurationVisitor *visitor) const override
{
visitor->VisitOtlpHttp(this);
}

std::string endpoint;
std::string certificate_file;
std::string client_key_file;
std::string client_certificate_file;
std::unique_ptr<HeadersConfiguration> headers;
std::string headers_list;
std::string compression;
std::size_t timeout{0};
enum_otlp_http_encoding encoding{protobuf};
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>

#include "opentelemetry/sdk/configuration/span_exporter_configuration.h"
#include "opentelemetry/sdk/configuration/span_processor_configuration.h"
#include "opentelemetry/sdk/configuration/span_processor_configuration_visitor.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

// YAML-SCHEMA: schema/tracer_provider.json
// YAML-NODE: SimpleSpanProcessor
class SimpleSpanProcessorConfiguration : public SpanProcessorConfiguration
{
public:
void Accept(SpanProcessorConfigurationVisitor *visitor) const override
{
visitor->VisitSimple(this);
}

std::unique_ptr<SpanExporterConfiguration> exporter;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{
class SpanExporterConfigurationVisitor;

// YAML-SCHEMA: schema/tracer_provider.json
// YAML-NODE: SpanExporter
class SpanExporterConfiguration
{
public:
SpanExporterConfiguration() = default;
SpanExporterConfiguration(SpanExporterConfiguration &&) = default;
SpanExporterConfiguration(const SpanExporterConfiguration &) = default;
SpanExporterConfiguration &operator=(SpanExporterConfiguration &&) = default;
SpanExporterConfiguration &operator=(const SpanExporterConfiguration &other) = default;
virtual ~SpanExporterConfiguration() = default;

virtual void Accept(SpanExporterConfigurationVisitor *visitor) const = 0;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace configuration
{

class OtlpHttpSpanExporterConfiguration;
class OtlpGrpcSpanExporterConfiguration;
class OtlpFileSpanExporterConfiguration;
class ConsoleSpanExporterConfiguration;
class ZipkinSpanExporterConfiguration;
class ExtensionSpanExporterConfiguration;

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

virtual void VisitOtlpHttp(const OtlpHttpSpanExporterConfiguration *model) = 0;
virtual void VisitOtlpGrpc(const OtlpGrpcSpanExporterConfiguration *model) = 0;
virtual void VisitOtlpFile(const OtlpFileSpanExporterConfiguration *model) = 0;
virtual void VisitConsole(const ConsoleSpanExporterConfiguration *model) = 0;
virtual void VisitZipkin(const ZipkinSpanExporterConfiguration *model) = 0;
virtual void VisitExtension(const ExtensionSpanExporterConfiguration *model) = 0;
};

} // namespace configuration
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
Loading
Loading