LCOV - code coverage report
Current view: top level - source/extensions/access_loggers/open_telemetry - grpc_access_log_impl.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 1 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 1 0.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <memory>
       4             : 
       5             : #include "envoy/event/dispatcher.h"
       6             : #include "envoy/extensions/access_loggers/grpc/v3/als.pb.h"
       7             : #include "envoy/extensions/access_loggers/open_telemetry/v3/logs_service.pb.h"
       8             : #include "envoy/grpc/async_client_manager.h"
       9             : #include "envoy/local_info/local_info.h"
      10             : #include "envoy/thread_local/thread_local.h"
      11             : 
      12             : #include "source/common/protobuf/protobuf.h"
      13             : #include "source/extensions/access_loggers/common/grpc_access_logger.h"
      14             : 
      15             : #include "opentelemetry/proto/collector/logs/v1/logs_service.pb.h"
      16             : #include "opentelemetry/proto/common/v1/common.pb.h"
      17             : #include "opentelemetry/proto/logs/v1/logs.pb.h"
      18             : #include "opentelemetry/proto/resource/v1/resource.pb.h"
      19             : 
      20             : namespace Envoy {
      21             : namespace Extensions {
      22             : namespace AccessLoggers {
      23             : namespace OpenTelemetry {
      24             : 
      25             : // Note: OpenTelemetry protos are extra flexible and used also in the OT collector for batching and
      26             : // so forth. As a result, some fields are repeated, but for our use case we assume the following
      27             : // structure:
      28             : // ExportLogsServiceRequest -> (single) ResourceLogs -> (single) ScopeLogs ->
      29             : // (repeated) LogRecord.
      30             : class GrpcAccessLoggerImpl
      31             :     : public Common::GrpcAccessLogger<
      32             :           opentelemetry::proto::logs::v1::LogRecord,
      33             :           // OpenTelemetry logging uses LogRecord for both HTTP and TCP, so protobuf::Empty is used
      34             :           // as an empty placeholder for the non-used addEntry method.
      35             :           // TODO(itamarkam): Don't cache OpenTelemetry loggers by type (HTTP/TCP).
      36             :           ProtobufWkt::Empty, opentelemetry::proto::collector::logs::v1::ExportLogsServiceRequest,
      37             :           opentelemetry::proto::collector::logs::v1::ExportLogsServiceResponse> {
      38             : public:
      39             :   GrpcAccessLoggerImpl(
      40             :       const Grpc::RawAsyncClientSharedPtr& client,
      41             :       const envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig&
      42             :           config,
      43             :       Event::Dispatcher& dispatcher, const LocalInfo::LocalInfo& local_info, Stats::Scope& scope);
      44             : 
      45             : private:
      46             :   void initMessageRoot(
      47             :       const envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig&
      48             :           config,
      49             :       const LocalInfo::LocalInfo& local_info);
      50             :   // Extensions::AccessLoggers::GrpcCommon::GrpcAccessLogger
      51             :   void addEntry(opentelemetry::proto::logs::v1::LogRecord&& entry) override;
      52             :   // Non used addEntry method (the above is used for both TCP and HTTP).
      53           0 :   void addEntry(ProtobufWkt::Empty&& entry) override { (void)entry; };
      54             :   bool isEmpty() override;
      55             :   void initMessage() override;
      56             :   void clearMessage() override;
      57             : 
      58             :   opentelemetry::proto::logs::v1::ScopeLogs* root_;
      59             : };
      60             : 
      61             : class GrpcAccessLoggerCacheImpl
      62             :     : public Common::GrpcAccessLoggerCache<
      63             :           GrpcAccessLoggerImpl,
      64             :           envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig> {
      65             : public:
      66             :   GrpcAccessLoggerCacheImpl(Grpc::AsyncClientManager& async_client_manager, Stats::Scope& scope,
      67             :                             ThreadLocal::SlotAllocator& tls,
      68             :                             const LocalInfo::LocalInfo& local_info);
      69             : 
      70             : private:
      71             :   // Common::GrpcAccessLoggerCache
      72             :   GrpcAccessLoggerImpl::SharedPtr createLogger(
      73             :       const envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig&
      74             :           config,
      75             :       Event::Dispatcher& dispatcher) override;
      76             : 
      77             :   const LocalInfo::LocalInfo& local_info_;
      78             : };
      79             : 
      80             : /**
      81             :  * Aliases for class interfaces for mock definitions.
      82             :  */
      83             : using GrpcAccessLogger = GrpcAccessLoggerImpl::Interface;
      84             : using GrpcAccessLoggerSharedPtr = GrpcAccessLogger::SharedPtr;
      85             : 
      86             : using GrpcAccessLoggerCache = GrpcAccessLoggerCacheImpl::Interface;
      87             : using GrpcAccessLoggerCacheSharedPtr = GrpcAccessLoggerCache::SharedPtr;
      88             : 
      89             : } // namespace OpenTelemetry
      90             : } // namespace AccessLoggers
      91             : } // namespace Extensions
      92             : } // namespace Envoy

Generated by: LCOV version 1.15