/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 |