1
#pragma once
2

            
3
#include "envoy/config/core/v3/http_service.pb.h"
4
#include "envoy/upstream/cluster_manager.h"
5

            
6
#include "source/common/common/logger.h"
7
#include "source/common/http/async_client_impl.h"
8
#include "source/common/http/async_client_utility.h"
9
#include "source/common/http/headers.h"
10
#include "source/common/http/message_impl.h"
11
#include "source/common/http/utility.h"
12
#include "source/extensions/tracers/opentelemetry/trace_exporter.h"
13

            
14
#include "opentelemetry/proto/collector/trace/v1/trace_service.pb.h"
15

            
16
namespace Envoy {
17
namespace Extensions {
18
namespace Tracers {
19
namespace OpenTelemetry {
20

            
21
/**
22
 * Exporter for OTLP traces over HTTP.
23
 */
24
class OpenTelemetryHttpTraceExporter : public OpenTelemetryTraceExporter,
25
                                       public Http::AsyncClient::Callbacks {
26
public:
27
  OpenTelemetryHttpTraceExporter(Upstream::ClusterManager& cluster_manager,
28
                                 const envoy::config::core::v3::HttpService& http_service);
29

            
30
  bool log(const ExportTraceServiceRequest& request) override;
31

            
32
  // Http::AsyncClient::Callbacks.
33
  void onSuccess(const Http::AsyncClient::Request&, Http::ResponseMessagePtr&&) override;
34
  void onFailure(const Http::AsyncClient::Request&, Http::AsyncClient::FailureReason) override;
35
2
  void onBeforeFinalizeUpstreamSpan(Tracing::Span&, const Http::ResponseHeaderMap*) override {}
36

            
37
private:
38
  Upstream::ClusterManager& cluster_manager_;
39
  envoy::config::core::v3::HttpService http_service_;
40
  // Track active HTTP requests to be able to cancel them on destruction.
41
  Http::AsyncClientRequestTracker active_requests_;
42
  std::vector<std::pair<const Http::LowerCaseString, const std::string>> parsed_headers_to_add_;
43
};
44

            
45
} // namespace OpenTelemetry
46
} // namespace Tracers
47
} // namespace Extensions
48
} // namespace Envoy