1
#pragma once
2

            
3
#include "envoy/config/trace/v3/opentelemetry.pb.h"
4

            
5
#include "source/extensions/tracers/opentelemetry/resource_detectors/resource_detector.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace Tracers {
10
namespace OpenTelemetry {
11

            
12
constexpr absl::string_view kServiceNameKey = "service.name";
13
constexpr absl::string_view kDefaultServiceName = "unknown_service:envoy";
14

            
15
constexpr absl::string_view kTelemetrySdkLanguageKey = "telemetry.sdk.language";
16
constexpr absl::string_view kDefaultTelemetrySdkLanguage = "cpp";
17

            
18
constexpr absl::string_view kTelemetrySdkNameKey = "telemetry.sdk.name";
19
constexpr absl::string_view kDefaultTelemetrySdkName = "envoy";
20

            
21
constexpr absl::string_view kTelemetrySdkVersionKey = "telemetry.sdk.version";
22

            
23
class ResourceProvider : public Logger::Loggable<Logger::Id::tracing> {
24
public:
25
71
  virtual ~ResourceProvider() = default;
26

            
27
  /**
28
   * @brief Iterates through all loaded resource detectors and merge all the returned
29
   * resources into one. Resource merging is done according to the OpenTelemetry
30
   * resource SDK specification. @see
31
   * https://github.com/open-telemetry/opentelemetry-specification/blob/v1.24.0/specification/resource/sdk.md#merge.
32
   *
33
   * @param opentelemetry_config The OpenTelemetry configuration, which contains the configured
34
   * resource detectors.
35
   * @param context The tracer factory context.
36
   * @return Resource const The merged resource.
37
   */
38
  virtual Resource
39
  getResource(const Protobuf::RepeatedPtrField<envoy::config::core::v3::TypedExtensionConfig>&
40
                  resource_detectors,
41
              Server::Configuration::ServerFactoryContext& context,
42
              absl::string_view service_name) const PURE;
43
};
44
using ResourceProviderPtr = std::shared_ptr<ResourceProvider>;
45

            
46
class ResourceProviderImpl : public ResourceProvider {
47
public:
48
  Resource
49
  getResource(const Protobuf::RepeatedPtrField<envoy::config::core::v3::TypedExtensionConfig>&
50
                  resource_detectors,
51
              Server::Configuration::ServerFactoryContext& context,
52
              absl::string_view service_name) const override;
53
};
54

            
55
} // namespace OpenTelemetry
56
} // namespace Tracers
57
} // namespace Extensions
58
} // namespace Envoy