1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/common/pure.h"
6
#include "envoy/tracing/trace_context.h"
7
#include "envoy/tracing/trace_driver.h"
8
#include "envoy/tracing/trace_reason.h"
9

            
10
namespace Envoy {
11
namespace Tracing {
12

            
13
/**
14
 * Tracer is responsible for handling traces and delegate actions to the
15
 * corresponding drivers.
16
 */
17
class Tracer {
18
public:
19
20031
  virtual ~Tracer() = default;
20

            
21
  virtual SpanPtr startSpan(const Config& config, TraceContext& trace_context,
22
                            const StreamInfo::StreamInfo& stream_info,
23
                            Tracing::Decision tracing_decision) PURE;
24
};
25

            
26
using TracerSharedPtr = std::shared_ptr<Tracer>;
27

            
28
} // namespace Tracing
29
} // namespace Envoy