LCOV - code coverage report
Current view: top level - source/extensions/tracers/datadog - tracer.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 1 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 1 0.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <optional>
       4             : #include <string>
       5             : 
       6             : #include "envoy/thread_local/thread_local.h"
       7             : #include "envoy/tracing/trace_driver.h"
       8             : 
       9             : #include "source/common/common/logger.h"
      10             : #include "source/extensions/tracers/datadog/tracer_stats.h"
      11             : 
      12             : #include "datadog/tracer.h"
      13             : 
      14             : namespace datadog {
      15             : namespace tracing {
      16             : 
      17             : class DictReader;
      18             : class FinalizedTracerConfig;
      19             : class Span;
      20             : struct SpanConfig;
      21             : struct TracerConfig;
      22             : 
      23             : } // namespace tracing
      24             : } // namespace datadog
      25             : 
      26             : namespace Envoy {
      27             : namespace Extensions {
      28             : namespace Tracers {
      29             : namespace Datadog {
      30             : 
      31             : /**
      32             :  * Entry point for Datadog tracing. This class accepts configuration and runtime
      33             :  * dependencies, and installs a thread-local instance of itself from which
      34             :  * traces can be created.
      35             :  */
      36             : class Tracer : public Tracing::Driver, private Logger::Loggable<Logger::Id::tracing> {
      37             : public:
      38             :   /**
      39             :    * Create a \c Tracer that produces traces according to the specified \p config
      40             :    * and sends those traces to the specified \p collector_cluster, uses the
      41             :    * specified \p collector_reference_host as the "Host" header, uses the
      42             :    * specified \p cluster_manager to send requests to the collector, uses the
      43             :    * specified \p scope to keep track of usage statistics, and uses the specified
      44             :    * \p thread_local_slot_allocator to register this instance with the current
      45             :    * worker thread.
      46             :    * @param collector_cluster name of the cluster to which traces will be sent
      47             :    * @param collector_reference_host value of the "Host" header in requests sent
      48             :    * to the \p collector_cluster.
      49             :    * @param config Datadog tracer configuration
      50             :    * @param cluster_manager cluster manager from which the thread local
      51             :    * cluster is retrieved in order to send HTTP request containing traces
      52             :    * @param scope statistics scope from which \c TracerStats can be created
      53             :    * @param thread_local_slot_allocator slot allocator for installing a
      54             :    * thread-local instance of the tracer.
      55             :    */
      56             :   explicit Tracer(const std::string& collector_cluster, const std::string& collector_reference_host,
      57             :                   const datadog::tracing::TracerConfig& config,
      58             :                   Upstream::ClusterManager& cluster_manager, Stats::Scope& scope,
      59             :                   ThreadLocal::SlotAllocator& thread_local_slot_allocator);
      60             : 
      61             :   struct ThreadLocalTracer : public ThreadLocal::ThreadLocalObject {
      62             :     /**
      63             :      * Create a thread local tracer configured using the specified `config`.
      64             :      */
      65             :     explicit ThreadLocalTracer(const datadog::tracing::FinalizedTracerConfig& config);
      66             : 
      67             :     /**
      68             :      * Create a null (no-op) thread local tracer.
      69             :      */
      70           0 :     ThreadLocalTracer() = default;
      71             : 
      72             :     datadog::tracing::Optional<datadog::tracing::Tracer> tracer;
      73             :   };
      74             : 
      75             :   // Tracing::Driver
      76             : 
      77             :   /**
      78             :    * Create a Datadog span from the specified \p trace_context, and having the
      79             :    * specified \p operation_name, \p stream_info and \p tracing_decision.
      80             :    * If this tracer encountered an error during initialization, then return a
      81             :    * \c Tracing::NullSpan instead.
      82             :    * @param config this parameter is ignored
      83             :    * @param trace_context possibly contains information about an existing trace
      84             :    * that the returned span will be a part of; otherwise, the returned span is
      85             :    * the root of a new trace
      86             :    * @param stream_info contains information about the stream.
      87             :    * @param operation_name the Datadog "resource name" to associate with the span.
      88             :    * See comments in the implementation for more information.
      89             :    * @param tracing_decision the sampling decision made in advance by Envoy for
      90             :    * this trace. If the decision is to drop the trace, then this tracer will
      91             :    * honor that decision. If the decision is to keep the trace, then this tracer
      92             :    * will apply its own sampling logic, which might keep or drop the trace.
      93             :    */
      94             :   Tracing::SpanPtr startSpan(const Tracing::Config& config, Tracing::TraceContext& trace_context,
      95             :                              const StreamInfo::StreamInfo& stream_info,
      96             :                              const std::string& operation_name,
      97             :                              Tracing::Decision tracing_decision) override;
      98             : 
      99             : private:
     100             :   datadog::tracing::Span extract_or_create_span(datadog::tracing::Tracer& tracer,
     101             :                                                 const datadog::tracing::SpanConfig& span_config,
     102             :                                                 const datadog::tracing::DictReader& reader);
     103             : 
     104             :   TracerStats tracer_stats_;
     105             :   ThreadLocal::TypedSlotPtr<ThreadLocalTracer> thread_local_slot_;
     106             : };
     107             : 
     108             : } // namespace Datadog
     109             : } // namespace Tracers
     110             : } // namespace Extensions
     111             : } // namespace Envoy

Generated by: LCOV version 1.15