1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/data/accesslog/v3/accesslog.pb.h"
6
#include "envoy/event/dispatcher.h"
7
#include "envoy/extensions/access_loggers/grpc/v3/als.pb.h"
8
#include "envoy/grpc/async_client_manager.h"
9
#include "envoy/local_info/local_info.h"
10
#include "envoy/service/accesslog/v3/als.pb.h"
11
#include "envoy/thread_local/thread_local.h"
12

            
13
#include "source/extensions/access_loggers/common/grpc_access_logger.h"
14

            
15
namespace Envoy {
16
namespace Extensions {
17
namespace AccessLoggers {
18
namespace GrpcCommon {
19

            
20
class GrpcAccessLoggerImpl
21
    : public Common::GrpcAccessLogger<envoy::data::accesslog::v3::HTTPAccessLogEntry,
22
                                      envoy::data::accesslog::v3::TCPAccessLogEntry,
23
                                      envoy::service::accesslog::v3::StreamAccessLogsMessage,
24
                                      envoy::service::accesslog::v3::StreamAccessLogsResponse> {
25
public:
26
  GrpcAccessLoggerImpl(
27
      const Grpc::RawAsyncClientSharedPtr& client,
28
      const envoy::extensions::access_loggers::grpc::v3::CommonGrpcAccessLogConfig& config,
29
      Event::Dispatcher& dispatcher, const LocalInfo::LocalInfo& local_info, Stats::Scope& scope);
30

            
31
private:
32
  // Extensions::AccessLoggers::GrpcCommon::GrpcAccessLogger
33
  void addEntry(envoy::data::accesslog::v3::HTTPAccessLogEntry&& entry) override;
34
  void addEntry(envoy::data::accesslog::v3::TCPAccessLogEntry&& entry) override;
35
  bool isEmpty() override;
36
  void initMessage() override;
37

            
38
  const std::string log_name_;
39
  const LocalInfo::LocalInfo& local_info_;
40
};
41

            
42
class GrpcAccessLoggerCacheImpl
43
    : public Common::GrpcAccessLoggerCache<
44
          GrpcAccessLoggerImpl,
45
          envoy::extensions::access_loggers::grpc::v3::CommonGrpcAccessLogConfig> {
46
public:
47
  GrpcAccessLoggerCacheImpl(Grpc::AsyncClientManager& async_client_manager, Stats::Scope& scope,
48
                            ThreadLocal::SlotAllocator& tls,
49
                            const LocalInfo::LocalInfo& local_info);
50

            
51
private:
52
  // Common::GrpcAccessLoggerCache
53
  GrpcAccessLoggerImpl::SharedPtr
54
  createLogger(const envoy::extensions::access_loggers::grpc::v3::CommonGrpcAccessLogConfig& config,
55
               Event::Dispatcher& dispatcher) override;
56

            
57
  const LocalInfo::LocalInfo& local_info_;
58
};
59

            
60
/**
61
 * Aliases for class interfaces for mock definitions.
62
 */
63
using GrpcAccessLogger = GrpcAccessLoggerImpl::Interface;
64
using GrpcAccessLoggerSharedPtr = GrpcAccessLogger::SharedPtr;
65

            
66
using GrpcAccessLoggerCache = GrpcAccessLoggerCacheImpl::Interface;
67
using GrpcAccessLoggerCacheSharedPtr = GrpcAccessLoggerCache::SharedPtr;
68

            
69
} // namespace GrpcCommon
70
} // namespace AccessLoggers
71
} // namespace Extensions
72
} // namespace Envoy