LCOV - code coverage report
Current view: top level - source/server - options_impl_base.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 59 107 55.1 %
Date: 2024-01-05 06:35:25 Functions: 39 70 55.7 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <chrono>
       4             : #include <cstdint>
       5             : #include <string>
       6             : 
       7             : #include "envoy/common/exception.h"
       8             : #include "envoy/config/bootstrap/v3/bootstrap.pb.h"
       9             : #include "envoy/registry/registry.h"
      10             : #include "envoy/server/options.h"
      11             : 
      12             : #include "source/common/common/logger.h"
      13             : #include "source/common/config/well_known_names.h"
      14             : 
      15             : #include "spdlog/spdlog.h"
      16             : 
      17             : namespace Envoy {
      18             : 
      19             : /**
      20             :  * Implementation of Server::Options without command line parsing.
      21             :  */
      22             : class OptionsImplBase : public Server::Options, protected Logger::Loggable<Logger::Id::config> {
      23             : public:
      24             :   /**
      25             :    * Parameters are hot_restart_enabled
      26             :    */
      27             :   using HotRestartVersionCb = std::function<std::string(bool)>;
      28             : 
      29             :   // Constructor for mobile
      30         167 :   OptionsImplBase() = default;
      31             : 
      32             :   // Setters for option fields. These are not part of the Options interface.
      33           0 :   void setBaseId(uint64_t base_id) { base_id_ = base_id; };
      34           0 :   void setUseDynamicBaseId(bool use_dynamic_base_id) { use_dynamic_base_id_ = use_dynamic_base_id; }
      35           0 :   void setBaseIdPath(const std::string& base_id_path) { base_id_path_ = base_id_path; }
      36          98 :   void setConcurrency(uint32_t concurrency) { concurrency_ = concurrency; }
      37          98 :   void setConfigPath(const std::string& config_path) { config_path_ = config_path; }
      38           0 :   void setConfigProto(const envoy::config::bootstrap::v3::Bootstrap& config_proto) {
      39           0 :     *config_proto_ = config_proto;
      40           0 :   }
      41           0 :   void setConfigProto(std::unique_ptr<envoy::config::bootstrap::v3::Bootstrap>&& config_proto) {
      42           0 :     config_proto_ = std::move(config_proto);
      43           0 :   }
      44          98 :   void setConfigYaml(const std::string& config_yaml) { config_yaml_ = config_yaml; }
      45           0 :   void setAdminAddressPath(const std::string& admin_address_path) {
      46           0 :     admin_address_path_ = admin_address_path;
      47           0 :   }
      48          98 :   void setLocalAddressIpVersion(Network::Address::IpVersion local_address_ip_version) {
      49          98 :     local_address_ip_version_ = local_address_ip_version;
      50          98 :   }
      51          98 :   void setDrainTime(std::chrono::seconds drain_time) { drain_time_ = drain_time; }
      52          98 :   void setParentShutdownTime(std::chrono::seconds parent_shutdown_time) {
      53          98 :     parent_shutdown_time_ = parent_shutdown_time;
      54          98 :   }
      55          98 :   void setDrainStrategy(Server::DrainStrategy drain_strategy) { drain_strategy_ = drain_strategy; }
      56          98 :   void setLogLevel(spdlog::level::level_enum log_level) { log_level_ = log_level; }
      57             :   absl::Status setLogLevel(absl::string_view log_level);
      58           0 :   void setLogFormat(const std::string& log_format) {
      59           0 :     log_format_ = log_format;
      60           0 :     log_format_set_ = true;
      61           0 :   }
      62           0 :   void setLogPath(const std::string& log_path) { log_path_ = log_path; }
      63           0 :   void setRestartEpoch(uint64_t restart_epoch) { restart_epoch_ = restart_epoch; }
      64           0 :   void setMode(Server::Mode mode) { mode_ = mode; }
      65          98 :   void setFileFlushIntervalMsec(std::chrono::milliseconds file_flush_interval_msec) {
      66          98 :     file_flush_interval_msec_ = file_flush_interval_msec;
      67          98 :   }
      68          98 :   void setServiceClusterName(const std::string& service_cluster) {
      69          98 :     service_cluster_ = service_cluster;
      70          98 :   }
      71          98 :   void setServiceNodeName(const std::string& service_node) { service_node_ = service_node; }
      72          98 :   void setServiceZone(const std::string& service_zone) { service_zone_ = service_zone; }
      73          98 :   void setHotRestartDisabled(bool hot_restart_disabled) {
      74          98 :     hot_restart_disabled_ = hot_restart_disabled;
      75          98 :   }
      76           0 :   void setSignalHandling(bool signal_handling_enabled) {
      77           0 :     signal_handling_enabled_ = signal_handling_enabled;
      78           0 :   }
      79           0 :   void setCpusetThreads(bool cpuset_threads_enabled) { cpuset_threads_ = cpuset_threads_enabled; }
      80          98 :   void setAllowUnknownFields(bool allow_unknown_static_fields) {
      81          98 :     allow_unknown_static_fields_ = allow_unknown_static_fields;
      82          98 :   }
      83          98 :   void setRejectUnknownFieldsDynamic(bool reject_unknown_dynamic_fields) {
      84          98 :     reject_unknown_dynamic_fields_ = reject_unknown_dynamic_fields;
      85          98 :   }
      86          98 :   void setIgnoreUnknownFieldsDynamic(bool ignore_unknown_dynamic_fields) {
      87          98 :     ignore_unknown_dynamic_fields_ = ignore_unknown_dynamic_fields;
      88          98 :   }
      89             : 
      90           0 :   void setSocketPath(const std::string& socket_path) { socket_path_ = socket_path; }
      91             : 
      92           0 :   void setSocketMode(mode_t socket_mode) { socket_mode_ = socket_mode; }
      93             : 
      94           0 :   void setStatsTags(const Stats::TagVector& stats_tags) { stats_tags_ = stats_tags; }
      95             : 
      96             :   // Server::Options
      97           0 :   uint64_t baseId() const override { return base_id_; }
      98           0 :   bool useDynamicBaseId() const override { return use_dynamic_base_id_; }
      99           0 :   const std::string& baseIdPath() const override { return base_id_path_; }
     100         766 :   uint32_t concurrency() const override { return concurrency_; }
     101          98 :   const std::string& configPath() const override { return config_path_; }
     102          98 :   const envoy::config::bootstrap::v3::Bootstrap& configProto() const override {
     103          98 :     return *config_proto_;
     104          98 :   }
     105          98 :   const std::string& configYaml() const override { return config_yaml_; }
     106          98 :   bool allowUnknownStaticFields() const override { return allow_unknown_static_fields_; }
     107          98 :   bool rejectUnknownDynamicFields() const override { return reject_unknown_dynamic_fields_; }
     108          98 :   bool ignoreUnknownDynamicFields() const override { return ignore_unknown_dynamic_fields_; }
     109          98 :   const std::string& adminAddressPath() const override { return admin_address_path_; }
     110           0 :   Network::Address::IpVersion localAddressIpVersion() const override {
     111           0 :     return local_address_ip_version_;
     112           0 :   }
     113          14 :   std::chrono::seconds drainTime() const override { return drain_time_; }
     114           0 :   std::chrono::seconds parentShutdownTime() const override { return parent_shutdown_time_; }
     115          10 :   Server::DrainStrategy drainStrategy() const override { return drain_strategy_; }
     116             : 
     117         167 :   spdlog::level::level_enum logLevel() const override { return log_level_; }
     118             :   const std::vector<std::pair<std::string, spdlog::level::level_enum>>&
     119           0 :   componentLogLevels() const override {
     120           0 :     return component_log_levels_;
     121           0 :   }
     122          69 :   const std::string& logFormat() const override { return log_format_; }
     123           0 :   bool logFormatSet() const override { return log_format_set_; }
     124           0 :   bool logFormatEscaped() const override { return log_format_escaped_; }
     125           0 :   bool enableFineGrainLogging() const override { return enable_fine_grain_logging_; }
     126          98 :   const std::string& logPath() const override { return log_path_; }
     127          98 :   uint64_t restartEpoch() const override { return restart_epoch_; }
     128           0 :   Server::Mode mode() const override { return mode_; }
     129          98 :   std::chrono::milliseconds fileFlushIntervalMsec() const override {
     130          98 :     return file_flush_interval_msec_;
     131          98 :   }
     132          98 :   const std::string& serviceClusterName() const override { return service_cluster_; }
     133          98 :   const std::string& serviceNodeName() const override { return service_node_; }
     134          98 :   const std::string& serviceZone() const override { return service_zone_; }
     135          94 :   bool hotRestartDisabled() const override { return hot_restart_disabled_; }
     136          98 :   bool signalHandlingEnabled() const override { return signal_handling_enabled_; }
     137          98 :   bool mutexTracingEnabled() const override { return mutex_tracing_enabled_; }
     138           0 :   bool coreDumpEnabled() const override { return core_dump_enabled_; }
     139          98 :   const Stats::TagVector& statsTags() const override { return stats_tags_; }
     140           0 :   bool cpusetThreadsEnabled() const override { return cpuset_threads_; }
     141           0 :   const std::vector<std::string>& disabledExtensions() const override {
     142           0 :     return disabled_extensions_;
     143           0 :   }
     144             :   uint32_t count() const;
     145           0 :   const std::string& socketPath() const override { return socket_path_; }
     146           0 :   mode_t socketMode() const override { return socket_mode_; }
     147             :   // implemented by OptionsImpl
     148           0 :   Server::CommandLineOptionsPtr toCommandLineOptions() const override { return nullptr; }
     149             : 
     150             :   /**
     151             :    * disableExtensions parses the given set of extension names of
     152             :    * the form $CATEGORY/$NAME, and disables the corresponding extension
     153             :    * factories.
     154             :    */
     155             :   static void disableExtensions(const std::vector<std::string>&);
     156             : 
     157             :   /**
     158             :    * Parses and validates the provided log_level, returning the corresponding
     159             :    * spdlog::level::level_enum or an error status if the provided string is not a valid spdlog
     160             :    * string.
     161             :    */
     162             :   static absl::StatusOr<spdlog::level::level_enum>
     163             :   parseAndValidateLogLevel(absl::string_view log_level);
     164             : 
     165             : private:
     166             :   friend class OptionsImpl;
     167             : 
     168             :   uint64_t base_id_{0};
     169             :   bool use_dynamic_base_id_{false};
     170             :   std::string base_id_path_;
     171             :   uint32_t concurrency_{1};
     172             :   std::string config_path_;
     173             :   std::unique_ptr<envoy::config::bootstrap::v3::Bootstrap> config_proto_{
     174             :       new envoy::config::bootstrap::v3::Bootstrap()};
     175             :   std::string config_yaml_;
     176             :   bool allow_unknown_static_fields_{false};
     177             :   bool reject_unknown_dynamic_fields_{false};
     178             :   bool ignore_unknown_dynamic_fields_{false};
     179             :   std::string admin_address_path_;
     180             :   Network::Address::IpVersion local_address_ip_version_{Network::Address::IpVersion::v4};
     181             :   spdlog::level::level_enum log_level_{spdlog::level::info};
     182             :   std::vector<std::pair<std::string, spdlog::level::level_enum>> component_log_levels_;
     183             :   std::string component_log_level_str_;
     184             :   std::string log_format_{Logger::Logger::DEFAULT_LOG_FORMAT};
     185             :   bool log_format_set_{false};
     186             :   bool log_format_escaped_{false};
     187             :   std::string log_path_;
     188             :   uint64_t restart_epoch_{0};
     189             :   std::string service_cluster_;
     190             :   std::string service_node_;
     191             :   std::string service_zone_;
     192             :   std::chrono::milliseconds file_flush_interval_msec_{10000};
     193             :   std::chrono::seconds drain_time_{600};
     194             :   std::chrono::seconds parent_shutdown_time_{900};
     195             :   Server::DrainStrategy drain_strategy_{Server::DrainStrategy::Gradual};
     196             :   Server::Mode mode_{Server::Mode::Serve};
     197             :   bool hot_restart_disabled_{false};
     198             :   bool signal_handling_enabled_{true};
     199             :   bool mutex_tracing_enabled_{false};
     200             :   bool core_dump_enabled_{false};
     201             :   bool cpuset_threads_{false};
     202             :   std::vector<std::string> disabled_extensions_;
     203             :   Stats::TagVector stats_tags_;
     204             :   uint32_t count_{0};
     205             : 
     206             :   // Initialization added here to avoid integration_admin_test failure caused by uninitialized
     207             :   // enable_fine_grain_logging_.
     208             :   bool enable_fine_grain_logging_ = false;
     209             :   std::string socket_path_{"@envoy_domain_socket"};
     210             :   mode_t socket_mode_{0};
     211             : };
     212             : 
     213             : } // namespace Envoy

Generated by: LCOV version 1.15