Coverage Report

Created: 2024-09-19 09:45

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