1
#pragma once
2

            
3
#include "source/common/grpc/typed_async_client.h"
4
#include "source/extensions/tracers/opentelemetry/trace_exporter.h"
5

            
6
namespace Envoy {
7
namespace Extensions {
8
namespace Tracers {
9
namespace OpenTelemetry {
10

            
11
/**
12
 * Exporter client for OTLP Traces. Provides abstraction on top of gRPC stream.
13
 */
14
class OpenTelemetryGrpcTraceExporter
15
    : public OpenTelemetryTraceExporter,
16
      public Grpc::AsyncRequestCallbacks<ExportTraceServiceResponse> {
17
public:
18
  OpenTelemetryGrpcTraceExporter(const Grpc::RawAsyncClientSharedPtr& client);
19
75
  ~OpenTelemetryGrpcTraceExporter() override = default;
20

            
21
  void onCreateInitialMetadata(Http::RequestHeaderMap& metadata) override;
22

            
23
  void onSuccess(Grpc::ResponsePtr<ExportTraceServiceResponse>&& response, Tracing::Span&) override;
24

            
25
  void onFailure(Grpc::Status::GrpcStatus status, const std::string& message,
26
                 Tracing::Span&) override;
27

            
28
  bool log(const ExportTraceServiceRequest& request) override;
29

            
30
  Grpc::AsyncClient<ExportTraceServiceRequest, ExportTraceServiceResponse> client_;
31
  const Protobuf::MethodDescriptor& service_method_;
32
};
33

            
34
} // namespace OpenTelemetry
35
} // namespace Tracers
36
} // namespace Extensions
37
} // namespace Envoy