/proc/self/cwd/source/common/runtime/runtime_protos.h
Line | Count | Source (jump to first uncovered line) |
1 | | #pragma once |
2 | | |
3 | | #include <string> |
4 | | |
5 | | #include "envoy/config/core/v3/base.pb.h" |
6 | | #include "envoy/runtime/runtime.h" |
7 | | #include "envoy/type/v3/percent.pb.h" |
8 | | |
9 | | #include "source/common/protobuf/utility.h" |
10 | | |
11 | | namespace Envoy { |
12 | | namespace Runtime { |
13 | | |
14 | | // Helper class for runtime-derived uint32. |
15 | | class UInt32 : Logger::Loggable<Logger::Id::runtime> { |
16 | | public: |
17 | | UInt32(const envoy::config::core::v3::RuntimeUInt32& uint32_proto, Runtime::Loader& runtime) |
18 | | : runtime_key_(uint32_proto.runtime_key()), default_value_(uint32_proto.default_value()), |
19 | 0 | runtime_(runtime) {} |
20 | | |
21 | 0 | const std::string& runtimeKey() const { return runtime_key_; } |
22 | | |
23 | 0 | uint32_t value() const { |
24 | 0 | uint64_t raw_value = runtime_.snapshot().getInteger(runtime_key_, default_value_); |
25 | 0 | if (raw_value > std::numeric_limits<uint32_t>::max()) { |
26 | 0 | ENVOY_LOG_EVERY_POW_2( |
27 | 0 | warn, |
28 | 0 | "parsed runtime value:{} of {} is larger than uint32 max, returning default instead", |
29 | 0 | raw_value, runtime_key_); |
30 | 0 | return default_value_; |
31 | 0 | } |
32 | 0 | return static_cast<uint32_t>(raw_value); |
33 | 0 | } Unexecuted instantiation: Envoy::Runtime::UInt32::value() const Unexecuted instantiation: Envoy::Runtime::UInt32::value() const |
34 | | |
35 | | private: |
36 | | const std::string runtime_key_; |
37 | | const uint32_t default_value_; |
38 | | Runtime::Loader& runtime_; |
39 | | }; |
40 | | |
41 | | // Helper class for runtime-derived boolean feature flags. |
42 | | class FeatureFlag { |
43 | | public: |
44 | | FeatureFlag(const envoy::config::core::v3::RuntimeFeatureFlag& feature_flag_proto, |
45 | | Runtime::Loader& runtime) |
46 | | : runtime_key_(feature_flag_proto.runtime_key()), |
47 | | default_value_(PROTOBUF_GET_WRAPPED_OR_DEFAULT(feature_flag_proto, default_value, true)), |
48 | 1.06k | runtime_(runtime) {} |
49 | | |
50 | 2.10k | bool enabled() const { return runtime_.snapshot().getBoolean(runtime_key_, default_value_); } |
51 | | |
52 | | private: |
53 | | const std::string runtime_key_; |
54 | | const bool default_value_; |
55 | | Runtime::Loader& runtime_; |
56 | | }; |
57 | | |
58 | | // Helper class for runtime-derived doubles. |
59 | | class Double { |
60 | | public: |
61 | | Double(const envoy::config::core::v3::RuntimeDouble& double_proto, Runtime::Loader& runtime) |
62 | | : runtime_key_(double_proto.runtime_key()), default_value_(double_proto.default_value()), |
63 | 193 | runtime_(runtime) {} |
64 | | Double(std::string runtime_key, double default_value, Runtime::Loader& runtime) |
65 | 0 | : runtime_key_(std::move(runtime_key)), default_value_(default_value), runtime_(runtime) {} |
66 | 386 | virtual ~Double() = default; |
67 | | |
68 | 0 | const std::string& runtimeKey() const { return runtime_key_; } |
69 | | |
70 | 48.5k | virtual double value() const { |
71 | 48.5k | return runtime_.snapshot().getDouble(runtime_key_, default_value_); |
72 | 48.5k | } |
73 | | |
74 | | protected: |
75 | | const std::string runtime_key_; |
76 | | const double default_value_; |
77 | | Runtime::Loader& runtime_; |
78 | | }; |
79 | | |
80 | | // Helper class for runtime-derived fractional percent flags. |
81 | | class FractionalPercent { |
82 | | public: |
83 | | FractionalPercent( |
84 | | const envoy::config::core::v3::RuntimeFractionalPercent& fractional_percent_proto, |
85 | | Runtime::Loader& runtime) |
86 | | : runtime_key_(fractional_percent_proto.runtime_key()), |
87 | 93 | default_value_(fractional_percent_proto.default_value()), runtime_(runtime) {} |
88 | | |
89 | 88 | bool enabled() const { return runtime_.snapshot().featureEnabled(runtime_key_, default_value_); } |
90 | | |
91 | | private: |
92 | | const std::string runtime_key_; |
93 | | const envoy::type::v3::FractionalPercent default_value_; |
94 | | Runtime::Loader& runtime_; |
95 | | }; |
96 | | |
97 | | // Helper class for runtime-derived percentages. |
98 | | class Percentage : public Double { |
99 | | public: |
100 | | Percentage(const envoy::config::core::v3::RuntimePercent& percent_proto, Runtime::Loader& runtime) |
101 | 0 | : Double(percent_proto.runtime_key(), percent_proto.default_value().value(), runtime) {} |
102 | | |
103 | 0 | double value() const override { |
104 | 0 | const auto val = Double::value(); |
105 | 0 | if (val <= 100.0 && val >= 0.0) { |
106 | 0 | return val; |
107 | 0 | } |
108 | 0 | return default_value_; |
109 | 0 | } |
110 | | }; |
111 | | |
112 | | } // namespace Runtime |
113 | | } // namespace Envoy |