Line data Source code
1 : #include "source/extensions/access_loggers/open_telemetry/config.h" 2 : 3 : #include "envoy/extensions/access_loggers/open_telemetry/v3/logs_service.pb.h" 4 : #include "envoy/extensions/access_loggers/open_telemetry/v3/logs_service.pb.validate.h" 5 : #include "envoy/registry/registry.h" 6 : #include "envoy/server/filter_config.h" 7 : 8 : #include "source/common/common/assert.h" 9 : #include "source/common/common/macros.h" 10 : #include "source/common/grpc/async_client_impl.h" 11 : #include "source/common/protobuf/protobuf.h" 12 : #include "source/extensions/access_loggers/open_telemetry/access_log_impl.h" 13 : #include "source/extensions/access_loggers/open_telemetry/access_log_proto_descriptors.h" 14 : 15 : namespace Envoy { 16 : namespace Extensions { 17 : namespace AccessLoggers { 18 : namespace OpenTelemetry { 19 : 20 : // Singleton registration via macro defined in envoy/singleton/manager.h 21 : SINGLETON_MANAGER_REGISTRATION(open_telemetry_access_logger_cache); 22 : 23 : GrpcAccessLoggerCacheSharedPtr 24 0 : getAccessLoggerCacheSingleton(Server::Configuration::CommonFactoryContext& context) { 25 0 : return context.singletonManager().getTyped<GrpcAccessLoggerCacheImpl>( 26 0 : SINGLETON_MANAGER_REGISTERED_NAME(open_telemetry_access_logger_cache), [&context] { 27 0 : return std::make_shared<GrpcAccessLoggerCacheImpl>( 28 0 : context.clusterManager().grpcAsyncClientManager(), context.serverScope(), 29 0 : context.threadLocal(), context.localInfo()); 30 0 : }); 31 0 : } 32 : 33 : ::Envoy::AccessLog::InstanceSharedPtr 34 : AccessLogFactory::createAccessLogInstance(const Protobuf::Message& config, 35 : ::Envoy::AccessLog::FilterPtr&& filter, 36 0 : Server::Configuration::FactoryContext& context) { 37 0 : validateProtoDescriptors(); 38 : 39 0 : const auto& proto_config = MessageUtil::downcastAndValidate< 40 0 : const envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig&>( 41 0 : config, context.messageValidationVisitor()); 42 : 43 0 : return std::make_shared<AccessLog>(std::move(filter), proto_config, 44 0 : context.serverFactoryContext().threadLocal(), 45 0 : getAccessLoggerCacheSingleton(context.serverFactoryContext())); 46 0 : } 47 : 48 2 : ProtobufTypes::MessagePtr AccessLogFactory::createEmptyConfigProto() { 49 2 : return std::make_unique< 50 2 : envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig>(); 51 2 : } 52 : 53 42 : std::string AccessLogFactory::name() const { return "envoy.access_loggers.open_telemetry"; } 54 : 55 : /** 56 : * Static registration for the OpenTelemetry (gRPC) access log. @see RegisterFactory. 57 : */ 58 : REGISTER_FACTORY(AccessLogFactory, 59 : Envoy::AccessLog::AccessLogInstanceFactory){"envoy.open_telemetry_access_log"}; 60 : 61 : } // namespace OpenTelemetry 62 : } // namespace AccessLoggers 63 : } // namespace Extensions 64 : } // namespace Envoy