Coverage Report

Created: 2024-09-19 09:45

/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