Coverage Report

Created: 2023-11-12 09:30

/proc/self/cwd/envoy/server/options.h
Line
Count
Source
1
#pragma once
2
3
#include <chrono>
4
#include <cstdint>
5
#include <string>
6
7
#include "envoy/admin/v3/server_info.pb.h"
8
#include "envoy/common/pure.h"
9
#include "envoy/config/bootstrap/v3/bootstrap.pb.h"
10
#include "envoy/network/address.h"
11
#include "envoy/stats/tag.h"
12
13
#include "absl/types/optional.h"
14
#include "spdlog/spdlog.h"
15
16
namespace Envoy {
17
namespace Server {
18
19
/**
20
 * Whether to run Envoy in serving mode, or in config validation mode at one of two levels (in which
21
 * case we'll verify the configuration file is valid, print any errors, and exit without serving.)
22
 */
23
enum class Mode {
24
  /**
25
   * Default mode: Regular Envoy serving process. Configs are validated in the normal course of
26
   * initialization, but if all is well we proceed to serve traffic.
27
   */
28
  Serve,
29
30
  /**
31
   * Validate as much as possible without opening network connections upstream or downstream.
32
   */
33
  Validate,
34
35
  /**
36
   * Completely load and initialize the config, and then exit without running the listener loop.
37
   */
38
  InitOnly,
39
40
  // TODO(rlazarus): Add a fourth option for "light validation": Mock out access to the filesystem.
41
  // Perform no validation of files referenced in the config, such as runtime configs, SSL certs,
42
  // etc. Validation will pass even if those files are malformed or don't exist, allowing the config
43
  // to be validated in a non-prod environment.
44
};
45
46
/**
47
 * During the drain sequence, different components ask the DrainManager
48
 * whether to drain via drainClose(). This enum dictates the behaviour of
49
 * drainClose() calls.
50
 */
51
enum class DrainStrategy {
52
  /**
53
   * The probability of drainClose() returning true increases from 0 to 100%
54
   * over the duration of the drain period.
55
   */
56
  Gradual,
57
58
  /**
59
   * drainClose() will return true as soon as the drain sequence is initiated.
60
   */
61
  Immediate,
62
};
63
64
using CommandLineOptionsPtr = std::unique_ptr<envoy::admin::v3::CommandLineOptions>;
65
66
/**
67
 * General options for the server.
68
 */
69
class Options {
70
public:
71
39.4k
  virtual ~Options() = default;
72
73
  /**
74
   * @return uint64_t the base ID for the server. This is required for system-wide things like
75
   *         shared memory, domain sockets, etc. that are used during hot restart. Setting the
76
   *         base ID to a different value will allow the server to run multiple times on the same
77
   *         host if desired.
78
   */
79
  virtual uint64_t baseId() const PURE;
80
81
  /**
82
   * @return bool choose an unused base ID dynamically. The chosen base id can be written to a
83
   *         a file using the baseIdPath option.
84
   */
85
  virtual bool useDynamicBaseId() const PURE;
86
87
  /**
88
   * @return const std::string& the dynamic base id output file.
89
   */
90
  virtual const std::string& baseIdPath() const PURE;
91
92
  /**
93
   * @return the number of worker threads to run in the server.
94
   */
95
  virtual uint32_t concurrency() const PURE;
96
97
  /**
98
   * @return the duration of the drain period in seconds.
99
   */
100
  virtual std::chrono::seconds drainTime() const PURE;
101
102
  /**
103
   * @return the strategy that defines behaviour of DrainManager::drainClose();
104
   */
105
  virtual DrainStrategy drainStrategy() const PURE;
106
107
  /**
108
   * @return the delay before shutting down the parent envoy in a hot restart,
109
   *         generally longer than drainTime().
110
   */
111
  virtual std::chrono::seconds parentShutdownTime() const PURE;
112
113
  /**
114
   * @return const std::string& the path to the configuration file.
115
   */
116
  virtual const std::string& configPath() const PURE;
117
118
  /**
119
   * @return const std::string& an inline YAML bootstrap config that merges
120
   *                            into the config loaded in configPath().
121
   */
122
  virtual const std::string& configYaml() const PURE;
123
124
  /**
125
   * @return const envoy::config::bootstrap::v2::Bootstrap& a bootstrap proto object
126
   * that merges into the config last, after configYaml and configPath.
127
   */
128
  virtual const envoy::config::bootstrap::v3::Bootstrap& configProto() const PURE;
129
130
  /**
131
   * @return bool allow unknown fields in the static configuration?
132
   */
133
  virtual bool allowUnknownStaticFields() const PURE;
134
135
  /**
136
   * @return bool allow unknown fields in the dynamic configuration?
137
   */
138
  virtual bool rejectUnknownDynamicFields() const PURE;
139
140
  /**
141
   * @return bool ignore unknown fields in the dynamic configuration?
142
   **/
143
  virtual bool ignoreUnknownDynamicFields() const PURE;
144
145
  /**
146
   * @return const std::string& the admin address output file.
147
   */
148
  virtual const std::string& adminAddressPath() const PURE;
149
150
  /**
151
   * @return Network::Address::IpVersion the local address IP version.
152
   */
153
  virtual Network::Address::IpVersion localAddressIpVersion() const PURE;
154
155
  /**
156
   * @return spdlog::level::level_enum the default log level for the server.
157
   */
158
  virtual spdlog::level::level_enum logLevel() const PURE;
159
160
  /**
161
   * @return const std::vector<std::pair<std::string, spdlog::level::level_enum>>& pair of
162
   * component,log level for all configured components.
163
   */
164
  virtual const std::vector<std::pair<std::string, spdlog::level::level_enum>>&
165
  componentLogLevels() const PURE;
166
167
  /**
168
   * @return const std::string& the log format string.
169
   */
170
  virtual const std::string& logFormat() const PURE;
171
172
  /**
173
   * @return whether or not a log format was set by CLI option.
174
   */
175
  virtual bool logFormatSet() const PURE;
176
177
  /**
178
   * @return const bool indicating whether to escape c-style escape sequences in logs.
179
   */
180
  virtual bool logFormatEscaped() const PURE;
181
182
  /**
183
   * @return const bool logger mode: whether to use Fine-Grain Logger.
184
   */
185
  virtual bool enableFineGrainLogging() const PURE;
186
187
  /**
188
   * @return const std::string& the log file path.
189
   */
190
  virtual const std::string& logPath() const PURE;
191
192
  /**
193
   * @return the restart epoch. 0 indicates the first server start, 1 the second, and so on.
194
   */
195
  virtual uint64_t restartEpoch() const PURE;
196
197
  /**
198
   * @return whether to verify the configuration file is valid, print any errors, and exit
199
   *         without serving.
200
   */
201
  virtual Mode mode() const PURE;
202
203
  /**
204
   * @return std::chrono::milliseconds the duration in msec between log flushes.
205
   */
206
  virtual std::chrono::milliseconds fileFlushIntervalMsec() const PURE;
207
208
  /**
209
   * @return const std::string& the server's cluster.
210
   */
211
  virtual const std::string& serviceClusterName() const PURE;
212
213
  /**
214
   * @return const std::string& the server's node identification.
215
   */
216
  virtual const std::string& serviceNodeName() const PURE;
217
218
  /**
219
   * @return const std::string& the server's zone.
220
   */
221
  virtual const std::string& serviceZone() const PURE;
222
223
  /**
224
   * @return bool indicating whether the hot restart functionality has been disabled via cli flags.
225
   */
226
  virtual bool hotRestartDisabled() const PURE;
227
228
  /**
229
   * @return bool indicating whether system signal listeners are enabled.
230
   */
231
  virtual bool signalHandlingEnabled() const PURE;
232
233
  /**
234
   * @return bool indicating whether mutex tracing functionality has been enabled.
235
   */
236
  virtual bool mutexTracingEnabled() const PURE;
237
238
  /**
239
   * @return bool indicating whether core dumps have been enabled.
240
   */
241
  virtual bool coreDumpEnabled() const PURE;
242
243
  /**
244
   * @return bool indicating whether cpuset size should determine the number of worker threads.
245
   */
246
  virtual bool cpusetThreadsEnabled() const PURE;
247
248
  /**
249
   * @return the names of extensions to disable.
250
   */
251
  virtual const std::vector<std::string>& disabledExtensions() const PURE;
252
253
  /**
254
   * Converts the Options in to CommandLineOptions proto message defined in server_info.proto.
255
   * @return CommandLineOptionsPtr the protobuf representation of the options.
256
   */
257
  virtual CommandLineOptionsPtr toCommandLineOptions() const PURE;
258
259
  /**
260
   * @return the path of socket file.
261
   */
262
  virtual const std::string& socketPath() const PURE;
263
264
  /**
265
   * @return the mode of socket file.
266
   */
267
  virtual mode_t socketMode() const PURE;
268
269
  /**
270
   * @return the stats tags provided by the cli. Tags may contain duplicates. It is the
271
   * responsibility of the caller to handle the duplicates.
272
   */
273
  virtual const Stats::TagVector& statsTags() const PURE;
274
};
275
276
} // namespace Server
277
} // namespace Envoy