1
#pragma once
2

            
3
#include "envoy/tracing/trace_driver.h"
4

            
5
#include "source/common/common/empty_string.h"
6

            
7
namespace Envoy {
8
namespace Tracing {
9

            
10
/**
11
 * Null implementation of Span.
12
 */
13
class NullSpan : public Span {
14
public:
15
131776
  static NullSpan& instance() {
16
131776
    static NullSpan* instance = new NullSpan();
17
131776
    return *instance;
18
131776
  }
19

            
20
  // Tracing::Span
21
1
  void setOperation(absl::string_view) override {}
22
13651
  void setTag(absl::string_view, absl::string_view) override {}
23
1
  void log(SystemTime, const std::string&) override {}
24
4323
  void finishSpan() override {}
25
51492
  void injectContext(Tracing::TraceContext&, const UpstreamContext&) override {}
26
1
  void setBaggage(absl::string_view, absl::string_view) override {}
27
1
  std::string getBaggage(absl::string_view) override { return EMPTY_STRING; }
28
1
  std::string getSpanId() const override { return EMPTY_STRING; }
29
1
  std::string getTraceId() const override { return EMPTY_STRING; }
30
1459
  SpanPtr spawnChild(const Config&, const std::string&, SystemTime) override {
31
1459
    return SpanPtr{new NullSpan()};
32
1459
  }
33
3276
  void setSampled(bool) override {}
34
1
  bool useLocalDecision() const override { return false; }
35
};
36

            
37
} // namespace Tracing
38
} // namespace Envoy