LCOV - code coverage report
Current view: top level - source/common/local_info - local_info_impl.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 27 33 81.8 %
Date: 2024-01-05 06:35:25 Functions: 9 12 75.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <string>
       4             : 
       5             : #include "envoy/config/core/v3/base.pb.h"
       6             : #include "envoy/local_info/local_info.h"
       7             : 
       8             : #include "source/common/config/context_provider_impl.h"
       9             : #include "source/common/stats/symbol_table.h"
      10             : 
      11             : namespace Envoy {
      12             : namespace LocalInfo {
      13             : 
      14             : namespace {
      15             : 
      16             : const envoy::config::core::v3::Node buildLocalNode(const envoy::config::core::v3::Node& node,
      17             :                                                    absl::string_view zone_name,
      18             :                                                    absl::string_view cluster_name,
      19         248 :                                                    absl::string_view node_name) {
      20         248 :   envoy::config::core::v3::Node local_node;
      21         248 :   local_node.MergeFrom(node);
      22         248 :   if (!zone_name.empty()) {
      23          98 :     local_node.mutable_locality()->set_zone(std::string(zone_name));
      24          98 :   }
      25         248 :   if (!cluster_name.empty()) {
      26          98 :     local_node.set_cluster(std::string(cluster_name));
      27          98 :   }
      28         248 :   if (!node_name.empty()) {
      29          98 :     local_node.set_id(std::string(node_name));
      30          98 :   }
      31         248 :   return local_node;
      32         248 : }
      33             : 
      34             : const absl::string_view getZoneName(const envoy::config::core::v3::Node& node,
      35         248 :                                     absl::string_view zone_name) {
      36         248 :   if (zone_name.empty()) {
      37         150 :     return node.locality().zone();
      38         150 :   }
      39          98 :   return zone_name;
      40         248 : }
      41             : 
      42             : } // namespace
      43             : 
      44             : class LocalInfoImpl : public LocalInfo {
      45             : public:
      46             :   LocalInfoImpl(Stats::SymbolTable& symbol_table, const envoy::config::core::v3::Node& node,
      47             :                 const Protobuf::RepeatedPtrField<std::string>& node_context_params,
      48             :                 const Network::Address::InstanceConstSharedPtr& address,
      49             :                 absl::string_view zone_name, absl::string_view cluster_name,
      50             :                 absl::string_view node_name)
      51             :       : node_(buildLocalNode(node, zone_name, cluster_name, node_name)), address_(address),
      52             :         context_provider_(node_, node_context_params),
      53             :         zone_stat_name_storage_(getZoneName(node_, zone_name), symbol_table),
      54             :         zone_stat_name_(zone_stat_name_storage_.statName()),
      55             :         dynamic_update_callback_handle_(context_provider_.addDynamicContextUpdateCallback(
      56           0 :             [this](absl::string_view resource_type_url) {
      57           0 :               (*node_.mutable_dynamic_parameters())
      58           0 :                   [toStdStringView(resource_type_url)] // NOLINT(std::string_view)
      59           0 :                       .CopyFrom(context_provider_.dynamicContext(resource_type_url));
      60         248 :             })) {}
      61             : 
      62         166 :   Network::Address::InstanceConstSharedPtr address() const override { return address_; }
      63           0 :   const std::string& zoneName() const override { return node_.locality().zone(); }
      64         169 :   const Stats::StatName& zoneStatName() const override { return zone_stat_name_; }
      65         361 :   const std::string& clusterName() const override { return node_.cluster(); }
      66         230 :   const std::string& nodeName() const override { return node_.id(); }
      67        1146 :   const envoy::config::core::v3::Node& node() const override { return node_; }
      68          29 :   const Config::ContextProvider& contextProvider() const override { return context_provider_; }
      69           0 :   Config::ContextProvider& contextProvider() override { return context_provider_; }
      70             : 
      71             : private:
      72             :   envoy::config::core::v3::Node node_;
      73             :   const Network::Address::InstanceConstSharedPtr address_;
      74             :   Config::ContextProviderImpl context_provider_;
      75             :   const Stats::StatNameManagedStorage zone_stat_name_storage_;
      76             :   const Stats::StatName zone_stat_name_;
      77             :   Common::CallbackHandlePtr dynamic_update_callback_handle_;
      78             : };
      79             : 
      80             : } // namespace LocalInfo
      81             : } // namespace Envoy

Generated by: LCOV version 1.15