Line data Source code
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 0 : 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