LCOV - code coverage report
Current view: top level - source/extensions/common/tap - extension_config_base.cc (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 20 51 39.2 %
Date: 2024-01-05 06:35:25 Functions: 4 10 40.0 %

          Line data    Source code
       1             : #include "source/extensions/common/tap/extension_config_base.h"
       2             : 
       3             : #include "envoy/config/tap/v3/common.pb.h"
       4             : #include "envoy/extensions/common/tap/v3/common.pb.h"
       5             : 
       6             : namespace Envoy {
       7             : namespace Extensions {
       8             : namespace Common {
       9             : namespace Tap {
      10             : 
      11             : ExtensionConfigBase::ExtensionConfigBase(
      12             :     const envoy::extensions::common::tap::v3::CommonExtensionConfig proto_config,
      13             :     TapConfigFactoryPtr&& config_factory, OptRef<Server::Admin> admin,
      14             :     Singleton::Manager& singleton_manager, ThreadLocal::SlotAllocator& tls,
      15             :     Event::Dispatcher& main_thread_dispatcher)
      16           2 :     : proto_config_(proto_config), config_factory_(std::move(config_factory)), tls_slot_(tls) {
      17           2 :   tls_slot_.set([](Event::Dispatcher&) { return std::make_shared<TlsFilterConfig>(); });
      18             : 
      19           2 :   switch (proto_config_.config_type_case()) {
      20           2 :   case envoy::extensions::common::tap::v3::CommonExtensionConfig::ConfigTypeCase::kAdminConfig: {
      21           2 :     admin_handler_ = AdminHandler::getSingleton(admin, singleton_manager, main_thread_dispatcher);
      22           2 :     admin_handler_->registerConfig(*this, proto_config_.admin_config().config_id());
      23           2 :     ENVOY_LOG(debug, "initializing tap extension with admin endpoint (config_id={})",
      24           2 :               proto_config_.admin_config().config_id());
      25           2 :     break;
      26           0 :   }
      27           0 :   case envoy::extensions::common::tap::v3::CommonExtensionConfig::ConfigTypeCase::kStaticConfig: {
      28             :     // Right now only one sink is supported.
      29           0 :     ASSERT(proto_config_.static_config().output_config().sinks().size() == 1);
      30           0 :     if (proto_config_.static_config().output_config().sinks()[0].output_sink_type_case() ==
      31           0 :         envoy::config::tap::v3::OutputSink::OutputSinkTypeCase::kStreamingAdmin) {
      32             :       // Require that users do not specify a streaming admin with static configuration.
      33           0 :       throw EnvoyException(
      34           0 :           fmt::format("Error: Specifying admin streaming output without configuring admin."));
      35           0 :     }
      36           0 :     installNewTap(proto_config_.static_config(), nullptr);
      37           0 :     ENVOY_LOG(debug, "initializing tap extension with static config");
      38           0 :     break;
      39           0 :   }
      40           0 :   case envoy::extensions::common::tap::v3::CommonExtensionConfig::ConfigTypeCase::
      41           0 :       CONFIG_TYPE_NOT_SET:
      42           0 :     PANIC_DUE_TO_CORRUPT_ENUM;
      43           2 :   }
      44           2 : }
      45             : 
      46           2 : ExtensionConfigBase::~ExtensionConfigBase() {
      47           2 :   if (admin_handler_) {
      48           2 :     admin_handler_->unregisterConfig(*this);
      49           2 :   }
      50           2 : }
      51             : 
      52           2 : const absl::string_view ExtensionConfigBase::adminId() {
      53             :   // It is only possible to get here if we had an admin config and registered with the admin
      54             :   // handler.
      55           2 :   ASSERT(proto_config_.has_admin_config());
      56           2 :   return proto_config_.admin_config().config_id();
      57           2 : }
      58             : 
      59           0 : void ExtensionConfigBase::clearTapConfig() {
      60           0 :   tls_slot_.runOnAllThreads(
      61           0 :       [](OptRef<TlsFilterConfig> tls_filter_config) { tls_filter_config->config_ = nullptr; });
      62           0 : }
      63             : 
      64             : void ExtensionConfigBase::installNewTap(const envoy::config::tap::v3::TapConfig& proto_config,
      65           0 :                                         Sink* admin_streamer) {
      66           0 :   TapConfigSharedPtr new_config =
      67           0 :       config_factory_->createConfigFromProto(proto_config, admin_streamer);
      68           0 :   tls_slot_.runOnAllThreads(
      69           0 :       [new_config](OptRef<TlsFilterConfig> tls_filter_config) {
      70           0 :         tls_filter_config->config_ = new_config;
      71           0 :       },
      72           0 :       []() -> void { ENVOY_LOG(debug, "New tap installed on all workers."); });
      73           0 : }
      74             : 
      75             : void ExtensionConfigBase::newTapConfig(const envoy::config::tap::v3::TapConfig& proto_config,
      76           0 :                                        Sink* admin_streamer) {
      77           0 :   installNewTap(proto_config, admin_streamer);
      78           0 : }
      79             : 
      80             : } // namespace Tap
      81             : } // namespace Common
      82             : } // namespace Extensions
      83             : } // namespace Envoy

Generated by: LCOV version 1.15