1
#pragma once
2

            
3
#include "source/common/common/logger.h"
4

            
5
#include "opentelemetry/proto/collector/trace/v1/trace_service.pb.h"
6

            
7
using opentelemetry::proto::collector::trace::v1::ExportTraceServiceRequest;
8
using opentelemetry::proto::collector::trace::v1::ExportTraceServiceResponse;
9

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

            
15
/**
16
 * @brief Base class for all OpenTelemetry Protocol (OTLP) exporters.
17
 * @see
18
 * https://github.com/open-telemetry/opentelemetry-proto/blob/v1.0.0/docs/specification.md#otlphttp
19
 */
20
class OpenTelemetryTraceExporter : public Logger::Loggable<Logger::Id::tracing> {
21
public:
22
85
  virtual ~OpenTelemetryTraceExporter() = default;
23

            
24
  /**
25
   * @brief Exports the trace request to the configured OTLP service.
26
   *
27
   * @param request The protobuf-encoded OTLP trace request.
28
   * @return true When the request was sent.
29
   * @return false When sending the request failed.
30
   */
31
  virtual bool log(const ExportTraceServiceRequest& request) = 0;
32

            
33
  /**
34
   * @brief Logs as debug the number of exported spans.
35
   *
36
   * @param request The protobuf-encoded OTLP trace request.
37
   */
38
33
  void logExportedSpans(const ExportTraceServiceRequest& request) {
39
33
    if (request.resource_spans(0).has_resource()) {
40
27
      if (request.resource_spans(0).scope_spans(0).has_scope()) {
41
27
        ENVOY_LOG(debug, "Number of exported spans: {}",
42
27
                  request.resource_spans(0).scope_spans(0).spans_size());
43
27
      }
44
27
    }
45
33
  }
46
};
47

            
48
using OpenTelemetryTraceExporterPtr = std::unique_ptr<OpenTelemetryTraceExporter>;
49

            
50
} // namespace OpenTelemetry
51
} // namespace Tracers
52
} // namespace Extensions
53
} // namespace Envoy