Line data Source code
1 : #include "source/extensions/access_loggers/grpc/tcp_grpc_access_log_impl.h" 2 : 3 : #include "envoy/data/accesslog/v3/accesslog.pb.h" 4 : #include "envoy/extensions/access_loggers/grpc/v3/als.pb.h" 5 : 6 : #include "source/common/common/assert.h" 7 : #include "source/common/config/utility.h" 8 : #include "source/common/network/utility.h" 9 : #include "source/common/stream_info/utility.h" 10 : #include "source/extensions/access_loggers/grpc/grpc_access_log_utils.h" 11 : 12 : namespace Envoy { 13 : namespace Extensions { 14 : namespace AccessLoggers { 15 : namespace TcpGrpc { 16 : 17 : TcpGrpcAccessLog::ThreadLocalLogger::ThreadLocalLogger(GrpcCommon::GrpcAccessLoggerSharedPtr logger) 18 0 : : logger_(std::move(logger)) {} 19 : 20 : TcpGrpcAccessLog::TcpGrpcAccessLog(AccessLog::FilterPtr&& filter, 21 : const TcpGrpcAccessLogConfig config, 22 : ThreadLocal::SlotAllocator& tls, 23 : GrpcCommon::GrpcAccessLoggerCacheSharedPtr access_logger_cache) 24 : : Common::ImplBase(std::move(filter)), 25 : config_(std::make_shared<const TcpGrpcAccessLogConfig>(std::move(config))), 26 0 : tls_slot_(tls.allocateSlot()), access_logger_cache_(std::move(access_logger_cache)) { 27 0 : THROW_IF_NOT_OK(Config::Utility::checkTransportVersion(config_->common_config())); 28 0 : tls_slot_->set( 29 0 : [config = config_, access_logger_cache = access_logger_cache_](Event::Dispatcher&) { 30 0 : return std::make_shared<ThreadLocalLogger>(access_logger_cache->getOrCreateLogger( 31 0 : config->common_config(), Common::GrpcAccessLoggerType::TCP)); 32 0 : }); 33 0 : } 34 : 35 : void TcpGrpcAccessLog::emitLog(const Formatter::HttpFormatterContext& context, 36 0 : const StreamInfo::StreamInfo& stream_info) { 37 : // Common log properties. 38 0 : envoy::data::accesslog::v3::TCPAccessLogEntry log_entry; 39 0 : GrpcCommon::Utility::extractCommonAccessLogProperties( 40 0 : *log_entry.mutable_common_properties(), context.requestHeaders(), stream_info, 41 0 : config_->common_config(), context.accessLogType()); 42 : 43 0 : envoy::data::accesslog::v3::ConnectionProperties& connection_properties = 44 0 : *log_entry.mutable_connection_properties(); 45 0 : connection_properties.set_received_bytes(stream_info.bytesReceived()); 46 0 : connection_properties.set_sent_bytes(stream_info.bytesSent()); 47 : 48 : // request_properties->set_request_body_bytes(stream_info.bytesReceived()); 49 0 : tls_slot_->getTyped<ThreadLocalLogger>().logger_->log(std::move(log_entry)); 50 0 : } 51 : 52 : } // namespace TcpGrpc 53 : } // namespace AccessLoggers 54 : } // namespace Extensions 55 : } // namespace Envoy