Line data Source code
1 : #include "source/extensions/tracers/datadog/config.h" 2 : 3 : #include <datadog/tracer_config.h> 4 : 5 : #include <memory> 6 : 7 : #include "envoy/config/trace/v3/datadog.pb.h" 8 : #include "envoy/config/trace/v3/datadog.pb.validate.h" 9 : #include "envoy/registry/registry.h" 10 : 11 : #include "source/common/version/version.h" 12 : #include "source/extensions/tracers/datadog/tracer.h" 13 : 14 : namespace Envoy { 15 : namespace Extensions { 16 : namespace Tracers { 17 : namespace Datadog { 18 : 19 2 : DatadogTracerFactory::DatadogTracerFactory() : FactoryBase("envoy.tracers.datadog") {} 20 : 21 : datadog::tracing::TracerConfig 22 0 : DatadogTracerFactory::makeConfig(const envoy::config::trace::v3::DatadogConfig& proto_config) { 23 0 : datadog::tracing::TracerConfig config; 24 0 : config.defaults.version = "envoy " + Envoy::VersionInfo::version(); 25 0 : config.defaults.name = "envoy.proxy"; 26 0 : if (proto_config.service_name().empty()) { 27 0 : config.defaults.service = "envoy"; 28 0 : } else { 29 0 : config.defaults.service = proto_config.service_name(); 30 0 : } 31 0 : return config; 32 0 : } 33 : 34 : std::string DatadogTracerFactory::makeCollectorReferenceHost( 35 0 : const envoy::config::trace::v3::DatadogConfig& proto_config) { 36 0 : std::string collector_reference_host = proto_config.collector_hostname(); 37 0 : if (collector_reference_host.empty()) { 38 0 : collector_reference_host = proto_config.collector_cluster(); 39 0 : } 40 0 : return collector_reference_host; 41 0 : } 42 : 43 : Tracing::DriverSharedPtr DatadogTracerFactory::createTracerDriverTyped( 44 : const envoy::config::trace::v3::DatadogConfig& proto_config, 45 0 : Server::Configuration::TracerFactoryContext& context) { 46 0 : return std::make_shared<Tracer>( 47 0 : proto_config.collector_cluster(), makeCollectorReferenceHost(proto_config), 48 0 : makeConfig(proto_config), context.serverFactoryContext().clusterManager(), 49 0 : context.serverFactoryContext().scope(), context.serverFactoryContext().threadLocal()); 50 0 : } 51 : 52 : /** 53 : * Static registration for the Datadog tracer. @see RegisterFactory. 54 : */ 55 : REGISTER_FACTORY(DatadogTracerFactory, Server::Configuration::TracerFactory); 56 : 57 : } // namespace Datadog 58 : } // namespace Tracers 59 : } // namespace Extensions 60 : } // namespace Envoy