- Franciszek Gorski
2018-10: Makefile bug fixed
+ 2019-07: Statistics enhancements
- Suzanne Goldlust
2018-10: API documentation
+1620. [func] franek, razvan
+ Kea statistics improvements: Support for storing more than one
+ sample.
+ (Gitlab #696,!418, git c7b8c275758c96f56081e02da429f5dd9d653b87)
+
1619. [func] marcin
Add support for associating subnets with the server tags in the
mysql_cb hooks library.
template<typename SampleType, typename StorageType>
void Observation::setValueInternal(SampleType value, StorageType& storage,
- Type exp_type) {
+ Type exp_type) {
if (type_ != exp_type) {
isc_throw(InvalidStatType, "Invalid statistic type requested: "
<< typeToText(exp_type) << ", but the actual type is "
}
template<typename SampleType, typename Storage>
-std::list<SampleType> Observation::getValuesInternal(Storage& storage, Type exp_type) const {
+std::list<SampleType> Observation::getValuesInternal(Storage& storage,
+ Type exp_type) const {
if (type_ != exp_type) {
isc_throw(InvalidStatType, "Invalid statistic type requested: "
<< typeToText(exp_type) << ", but the actual type is "
template<typename StorageType>
void Observation::setMaxSampleAgeInternal(StorageType& storage,
- const StatsDuration& duration, Type exp_type) {
+ const StatsDuration& duration,
+ Type exp_type) {
if (type_ != exp_type) {
isc_throw(InvalidStatType, "Invalid statistic type requested: "
<< typeToText(exp_type) << ", but the actual type is "
template<typename StorageType>
void Observation::setMaxSampleCountInternal(StorageType& storage,
- uint32_t max_samples, Type exp_type) {
+ uint32_t max_samples,
+ Type exp_type) {
if (type_ != exp_type) {
isc_throw(InvalidStatType, "Invalid statistic type requested: "
<< typeToText(exp_type) << ", but the actual type is "
///
/// @param duration determines maximum age of samples
/// Example:
- /// To set a statistic to keep observations for the last 5 minutes,
- /// call: setMaxSampleAge(time_duration(0, 5, 0, 0));
+ /// To set a statistic to keep observations for the last 5 minutes, call:
+ /// setMaxSampleAge(time_duration(0, 5, 0, 0));
/// To revert statistic to a single value, call:
- /// setMaxSampleAge(time_duration(0, 0, 0, 0))
+ /// setMaxSampleAge(time_duration(0, 0, 0, 0));
void setMaxSampleAge(const StatsDuration& duration);
/// @brief Determines how many samples of a given statistic should be kept.
/// be kept. When adding max_samples + 1 sample, the oldest sample will be
/// discarded.
///
+ ///
/// @param max_samples how many samples of a given statistic should be kept
/// Example:
/// To set a statistic to keep the last 100 observations, call:
/// @tparam Storage type of storage (e.g. list<IntegerSample>)
/// @param storage storage which size will be returned
/// @param exp_type expected observation type (used for sanity checking)
- /// @return Size of storage
+ /// @return size of storage
template<typename StorageType>
size_t getSizeInternal(StorageType& storage, Type exp_type) const;
/// @param observation storage
/// @param exp_type expected observation type (used for sanity checking)
/// @throw InvalidStatType if observation type mismatches
- /// @return List of observed samples
+ /// @return list of observed samples
template<typename SampleType, typename Storage>
std::list<SampleType> getValuesInternal(Storage& storage,
Type exp_type) const;
Type type_;
/// @brief Maximum number of samples
- /// The limit is represent as a pair
+ /// The limit is represented as a pair
/// of bool value and uint32_t
/// Only one kind of limit can be active
/// The bool value informs which limit
std::pair<bool, uint32_t> max_sample_count_ = std::make_pair(true, 20);
/// @brief Maximum timespan of samples
- /// The limit is represent as a pair
+ /// The limit is represented as a pair
/// of bool value and StatsDuration(boost::posix_time::time_duration)
/// Only one kind of limit can be active
/// The bool value informs which limit
}
}
-bool StatsMgr::setMaxSampleCount(const std::string& name, uint32_t max_samples) {
+bool StatsMgr::setMaxSampleCount(const std::string& name,
+ uint32_t max_samples) {
ObservationPtr obs = getObservation(name);
if (obs) {
obs->setMaxSampleCount(max_samples);
/// @param name name of the observation
/// @param duration determines maximum age of samples
/// @return true if successful, false if there's no such statistic
- /// Example: to set a statistic to keep observations for the last 5 minutes,
- /// call setMaxSampleAge("incoming-packets", time_duration(0, 5, 0, 0));
+ /// Example:
+ /// To set a statistic to keep observations for the last 5 minutes, call:
+ /// setMaxSampleAge("incoming-packets", time_duration(0, 5, 0, 0));
/// to revert statistic to a single value, call:
- /// setMaxSampleAge("incoming-packets" time_duration(0, 0, 0, 0))
+ /// setMaxSampleAge("incoming-packets", time_duration(0, 0, 0, 0));
bool setMaxSampleAge(const std::string& name, const StatsDuration& duration);
/// @brief Determines how many samples of a given statistic should be kept.
// See https://gitlab.isc.org/isc-projects/kea/wikis/designs/Stats-design for
// details.
TEST_F(ObservationTest, durationToJSON) {
-
// String which contains first added sample
std::string first_sample = ", \"01:02:03.000004\", \"" +
isc::util::ptimeToText(c.getDuration().second) + "\" ] ]";
// String which contains first added sample
std::string first_sample = ", \"1234\", \"" +
isc::util::ptimeToText(d.getString().second) + "\" ] ]";
+
d.setValue("Lorem ipsum dolor sit amet");
std::string exp = "[ [ \"Lorem ipsum dolor sit amet\", \"" +