1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/config/trace/v3/datadog.pb.h"
6
#include "envoy/config/trace/v3/datadog.pb.validate.h"
7

            
8
#include "source/extensions/tracers/common/factory_base.h"
9

            
10
namespace datadog {
11
namespace tracing {
12

            
13
struct TracerConfig;
14

            
15
} // namespace tracing
16
} // namespace datadog
17

            
18
namespace Envoy {
19
namespace Extensions {
20
namespace Tracers {
21
namespace Datadog {
22

            
23
/**
24
 * Config registration for the Datadog tracer. @see TracerFactory.
25
 */
26
class DatadogTracerFactory : public Common::FactoryBase<envoy::config::trace::v3::DatadogConfig> {
27
public:
28
  DatadogTracerFactory();
29

            
30
  static datadog::tracing::TracerConfig
31
  makeConfig(const envoy::config::trace::v3::DatadogConfig& proto_config);
32
  static std::string
33
  makeCollectorReferenceHost(const envoy::config::trace::v3::DatadogConfig& proto_config);
34

            
35
private:
36
  // Common::FactoryBase
37

            
38
  Tracing::DriverSharedPtr
39
  createTracerDriverTyped(const envoy::config::trace::v3::DatadogConfig& proto_config,
40
                          Server::Configuration::TracerFactoryContext& context) override;
41
};
42

            
43
} // namespace Datadog
44
} // namespace Tracers
45
} // namespace Extensions
46
} // namespace Envoy