1
#pragma once
2

            
3
#include "envoy/common/exception.h"
4
#include "envoy/tracing/tracer.h"
5

            
6
#include "source/common/common/statusor.h"
7
#include "source/common/http/header_map_impl.h"
8
#include "source/common/tracing/trace_context_impl.h"
9
#include "source/extensions/tracers/opentelemetry/span_context.h"
10

            
11
namespace Envoy {
12
namespace Extensions {
13
namespace Tracers {
14
namespace OpenTelemetry {
15

            
16
class OpenTelemetryConstantValues {
17
public:
18
  const Tracing::TraceContextHandler TRACE_PARENT{"traceparent"};
19
  const Tracing::TraceContextHandler TRACE_STATE{"tracestate"};
20
};
21

            
22
using OpenTelemetryConstants = ConstSingleton<OpenTelemetryConstantValues>;
23

            
24
/**
25
 * This class is used to SpanContext extracted from the HTTP traceparent header
26
 * See https://www.w3.org/TR/trace-context/#traceparent-header.
27
 */
28
class SpanContextExtractor {
29
public:
30
  SpanContextExtractor(Tracing::TraceContext& trace_context);
31
  ~SpanContextExtractor();
32
  absl::StatusOr<SpanContext> extractSpanContext();
33
  bool propagationHeaderPresent();
34

            
35
private:
36
  const Tracing::TraceContext& trace_context_;
37
};
38

            
39
} // namespace OpenTelemetry
40
} // namespace Tracers
41
} // namespace Extensions
42
} // namespace Envoy