diff --git a/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h new file mode 100644 index 0000000000..31ac98895f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/always_off_sampler_configuration.h @@ -0,0 +1,29 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: always_off +class AlwaysOffSamplerConfiguration : public SamplerConfiguration +{ +public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitAlwaysOff(this); + } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h new file mode 100644 index 0000000000..1e8ef97c68 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/always_on_sampler_configuration.h @@ -0,0 +1,26 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: always_on +class AlwaysOnSamplerConfiguration : public SamplerConfiguration +{ +public: + void Accept(SamplerConfigurationVisitor *visitor) const override { visitor->VisitAlwaysOn(this); } +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h new file mode 100644 index 0000000000..19af801b61 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/jaeger_remote_sampler_configuration.h @@ -0,0 +1,36 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: jaeger_remote +class JaegerRemoteSamplerConfiguration : public SamplerConfiguration +{ +public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitJaegerRemote(this); + } + + std::string endpoint; + std::size_t interval{0}; + std::unique_ptr initial_sampler; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h new file mode 100644 index 0000000000..30f188bca7 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/parent_based_sampler_configuration.h @@ -0,0 +1,37 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: parent_based +class ParentBasedSamplerConfiguration : public SamplerConfiguration +{ +public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitParentBased(this); + } + + std::unique_ptr root; + std::unique_ptr remote_parent_sampled; + std::unique_ptr remote_parent_not_sampled; + std::unique_ptr local_parent_sampled; + std::unique_ptr local_parent_not_sampled; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h new file mode 100644 index 0000000000..26611a6dd3 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration.h @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class SamplerConfigurationVisitor; + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: Sampler +class SamplerConfiguration +{ +public: + SamplerConfiguration() = default; + SamplerConfiguration(SamplerConfiguration &&) = default; + SamplerConfiguration(const SamplerConfiguration &) = default; + SamplerConfiguration &operator=(SamplerConfiguration &&) = default; + SamplerConfiguration &operator=(const SamplerConfiguration &other) = default; + virtual ~SamplerConfiguration() = default; + + virtual void Accept(SamplerConfigurationVisitor *visitor) const = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h new file mode 100644 index 0000000000..930e447325 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/sampler_configuration_visitor.h @@ -0,0 +1,41 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +class AlwaysOffSamplerConfiguration; +class AlwaysOnSamplerConfiguration; +class JaegerRemoteSamplerConfiguration; +class ParentBasedSamplerConfiguration; +class TraceIdRatioBasedSamplerConfiguration; +class ExtensionSamplerConfiguration; + +class SamplerConfigurationVisitor +{ +public: + SamplerConfigurationVisitor() = default; + SamplerConfigurationVisitor(SamplerConfigurationVisitor &&) = default; + SamplerConfigurationVisitor(const SamplerConfigurationVisitor &) = default; + SamplerConfigurationVisitor &operator=(SamplerConfigurationVisitor &&) = default; + SamplerConfigurationVisitor &operator=(const SamplerConfigurationVisitor &other) = default; + virtual ~SamplerConfigurationVisitor() = default; + + virtual void VisitAlwaysOff(const AlwaysOffSamplerConfiguration *model) = 0; + virtual void VisitAlwaysOn(const AlwaysOnSamplerConfiguration *model) = 0; + virtual void VisitJaegerRemote(const JaegerRemoteSamplerConfiguration *model) = 0; + virtual void VisitParentBased(const ParentBasedSamplerConfiguration *model) = 0; + virtual void VisitTraceIdRatioBased(const TraceIdRatioBasedSamplerConfiguration *model) = 0; + virtual void VisitExtension(const ExtensionSamplerConfiguration *model) = 0; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h new file mode 100644 index 0000000000..bc19cad509 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/configuration/trace_id_ratio_based_sampler_configuration.h @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/sdk/configuration/sampler_configuration.h" +#include "opentelemetry/sdk/configuration/sampler_configuration_visitor.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace configuration +{ + +// YAML-SCHEMA: schema/tracer_provider.json +// YAML-NODE: trace_id_ratio_based +class TraceIdRatioBasedSamplerConfiguration : public SamplerConfiguration +{ +public: + void Accept(SamplerConfigurationVisitor *visitor) const override + { + visitor->VisitTraceIdRatioBased(this); + } + + double ratio{0.0}; +}; + +} // namespace configuration +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE