proxygen
folly::MultiLevelTimeSeries< VT, CT > Class Template Reference

#include <MultiLevelTimeSeries.h>

Public Types

using ValueType = VT
 
using Clock = CT
 
using Duration = typename Clock::duration
 
using TimePoint = typename Clock::time_point
 
using Level = folly::BucketedTimeSeries< ValueType, Clock >
 

Public Member Functions

 MultiLevelTimeSeries (size_t numBuckets, size_t numLevels, const Duration levelDurations[])
 
 MultiLevelTimeSeries (size_t numBuckets, std::initializer_list< Duration > durations)
 
size_t numBuckets () const
 
size_t numLevels () const
 
const LevelgetLevel (size_t level) const
 
const LevelgetLevel (TimePoint start) const
 
const LevelgetLevelByDuration (Duration duration) const
 
ValueType sum (size_t level) const
 
template<typename ReturnType = double>
ReturnType avg (size_t level) const
 
template<typename ReturnType = double, typename Interval = Duration>
ReturnType rate (size_t level) const
 
uint64_t count (size_t level) const
 
template<typename ReturnType = double, typename Interval = Duration>
ReturnType countRate (size_t level) const
 
ValueType sum (Duration duration) const
 
template<typename ReturnType = double>
ReturnType avg (Duration duration) const
 
template<typename ReturnType = double, typename Interval = Duration>
ReturnType rate (Duration duration) const
 
uint64_t count (Duration duration) const
 
template<typename ReturnType = double, typename Interval = Duration>
ReturnType countRate (Duration duration) const
 
ValueType sum (TimePoint start, TimePoint end) const
 
template<typename ReturnType = double>
ReturnType avg (TimePoint start, TimePoint end) const
 
template<typename ReturnType = double>
ReturnType rate (TimePoint start, TimePoint end) const
 
uint64_t count (TimePoint start, TimePoint end) const
 
void addValue (TimePoint now, const ValueType &val)
 
void addValue (TimePoint now, const ValueType &val, uint64_t times)
 
void addValueAggregated (TimePoint now, const ValueType &total, uint64_t nsamples)
 
void update (TimePoint now)
 
void clear ()
 
void flush ()
 
void update (Duration now)
 
void addValue (Duration now, const ValueType &value)
 
void addValue (Duration now, const ValueType &value, uint64_t times)
 
void addValueAggregated (Duration now, const ValueType &total, uint64_t nsamples)
 

Private Attributes

std::vector< Levellevels_
 
TimePoint cachedTime_
 
ValueType cachedSum_
 
uint64_t cachedCount_
 

Detailed Description

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
class folly::MultiLevelTimeSeries< VT, CT >

Definition at line 53 of file MultiLevelTimeSeries.h.

Member Typedef Documentation

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
using folly::MultiLevelTimeSeries< VT, CT >::Clock = CT

Definition at line 56 of file MultiLevelTimeSeries.h.

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
using folly::MultiLevelTimeSeries< VT, CT >::Duration = typename Clock::duration

Definition at line 57 of file MultiLevelTimeSeries.h.

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
using folly::MultiLevelTimeSeries< VT, CT >::Level = folly::BucketedTimeSeries<ValueType, Clock>

Definition at line 59 of file MultiLevelTimeSeries.h.

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
using folly::MultiLevelTimeSeries< VT, CT >::TimePoint = typename Clock::time_point

Definition at line 58 of file MultiLevelTimeSeries.h.

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
using folly::MultiLevelTimeSeries< VT, CT >::ValueType = VT

Definition at line 55 of file MultiLevelTimeSeries.h.

Constructor & Destructor Documentation

template<typename VT , typename CT >
folly::MultiLevelTimeSeries< VT, CT >::MultiLevelTimeSeries ( size_t  numBuckets,
size_t  numLevels,
const Duration  levelDurations[] 
)

Definition at line 25 of file MultiLevelTimeSeries-defs.h.

References i, and folly::MultiLevelTimeSeries< VT, CT >::levels_.

29  : cachedTime_(), cachedSum_(0), cachedCount_(0) {
30  CHECK_GT(nLevels, 0u);
31  CHECK(levelDurations);
32 
33  levels_.reserve(nLevels);
34  for (size_t i = 0; i < nLevels; ++i) {
35  if (levelDurations[i] == Duration(0)) {
36  CHECK_EQ(i, nLevels - 1);
37  } else if (i > 0) {
38  CHECK(levelDurations[i - 1] < levelDurations[i]);
39  }
40  levels_.emplace_back(nBuckets, levelDurations[i]);
41  }
42 }
typename Clock::duration Duration
template<typename VT , typename CT >
folly::MultiLevelTimeSeries< VT, CT >::MultiLevelTimeSeries ( size_t  numBuckets,
std::initializer_list< Duration durations 
)

Definition at line 45 of file MultiLevelTimeSeries-defs.h.

References i, and folly::MultiLevelTimeSeries< VT, CT >::levels_.

48  : cachedTime_(), cachedSum_(0), cachedCount_(0) {
49  CHECK_GT(durations.size(), 0u);
50 
51  levels_.reserve(durations.size());
52  size_t i = 0;
53  Duration prev{0};
54  for (auto dur : durations) {
55  if (dur == Duration(0)) {
56  CHECK_EQ(i, durations.size() - 1);
57  } else if (i > 0) {
58  CHECK(prev < dur);
59  }
60  levels_.emplace_back(nBuckets, dur);
61  prev = dur;
62  i++;
63  }
64 }
typename Clock::duration Duration
StatsClock::duration Duration

Member Function Documentation

template<typename VT , typename CT >
void folly::MultiLevelTimeSeries< VT, CT >::addValue ( TimePoint  now,
const ValueType val 
)

Definition at line 67 of file MultiLevelTimeSeries-defs.h.

References folly::MultiLevelTimeSeries< VT, CT >::addValueAggregated().

Referenced by folly::MultiLevelTimeSeries< VT, CT >::addValue(), folly::MultiLevelTimeSeries< VT, CT >::count(), and TEST().

69  {
71 }
void addValueAggregated(TimePoint now, const ValueType &total, uint64_t nsamples)
std::chrono::steady_clock::time_point now()
double val
Definition: String.cpp:273
template<typename VT , typename CT >
void folly::MultiLevelTimeSeries< VT, CT >::addValue ( TimePoint  now,
const ValueType val,
uint64_t  times 
)

Definition at line 74 of file MultiLevelTimeSeries-defs.h.

References folly::MultiLevelTimeSeries< VT, CT >::addValueAggregated().

77  {
79 }
void addValueAggregated(TimePoint now, const ValueType &total, uint64_t nsamples)
std::chrono::steady_clock::time_point now()
double val
Definition: String.cpp:273
Future< Unit > times(const int n, F &&thunk)
Definition: Future-inl.h:2348
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
void folly::MultiLevelTimeSeries< VT, CT >::addValue ( Duration  now,
const ValueType value 
)
inline

Definition at line 418 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::addValue().

418  {
420  }
std::chrono::steady_clock::time_point now()
void addValue(TimePoint now, const ValueType &val)
uint64_t value(const typename LockFreeRingBuffer< T, Atom >::Cursor &rbcursor)
typename Clock::time_point TimePoint
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
void folly::MultiLevelTimeSeries< VT, CT >::addValue ( Duration  now,
const ValueType value,
uint64_t  times 
)
inline

Definition at line 421 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::addValue().

421  {
423  }
std::chrono::steady_clock::time_point now()
void addValue(TimePoint now, const ValueType &val)
uint64_t value(const typename LockFreeRingBuffer< T, Atom >::Cursor &rbcursor)
typename Clock::time_point TimePoint
Future< Unit > times(const int n, F &&thunk)
Definition: Future-inl.h:2348
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
void folly::MultiLevelTimeSeries< VT, CT >::addValueAggregated ( Duration  now,
const ValueType total,
uint64_t  nsamples 
)
inline

Definition at line 425 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::addValueAggregated().

425  {
426  addValueAggregated(TimePoint(now), total, nsamples);
427  }
void addValueAggregated(TimePoint now, const ValueType &total, uint64_t nsamples)
std::chrono::steady_clock::time_point now()
typename Clock::time_point TimePoint
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::avg ( size_t  level) const
inline

Definition at line 178 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevel().

Referenced by TEST().

178  {
179  return getLevel(level).template avg<ReturnType>();
180  }
const Level & getLevel(size_t level) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::avg ( Duration  duration) const
inline

Definition at line 244 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevelByDuration().

244  {
245  return getLevelByDuration(duration).template avg<ReturnType>();
246  }
const Level & getLevelByDuration(Duration duration) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::avg ( TimePoint  start,
TimePoint  end 
) const
inline

Definition at line 327 of file MultiLevelTimeSeries.h.

References folly::test::end(), folly::MultiLevelTimeSeries< VT, CT >::getLevel(), and start.

327  {
328  return getLevel(start).template avg<ReturnType>(start, end);
329  }
auto end(TestAdlIterable &instance)
Definition: ForeachTest.cpp:62
const Level & getLevel(size_t level) const
auto start
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
uint64_t folly::MultiLevelTimeSeries< VT, CT >::count ( size_t  level) const
inline

Definition at line 202 of file MultiLevelTimeSeries.h.

References folly::BucketedTimeSeries< VT, CT >::count(), and folly::MultiLevelTimeSeries< VT, CT >::getLevel().

Referenced by TEST().

202  {
203  return getLevel(level).count();
204  }
const Level & getLevel(size_t level) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
uint64_t folly::MultiLevelTimeSeries< VT, CT >::count ( Duration  duration) const
inline

Definition at line 274 of file MultiLevelTimeSeries.h.

References folly::BucketedTimeSeries< VT, CT >::count(), and folly::MultiLevelTimeSeries< VT, CT >::getLevelByDuration().

274  {
275  return getLevelByDuration(duration).count();
276  }
const Level & getLevelByDuration(Duration duration) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double, typename Interval = Duration>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::countRate ( size_t  level) const
inline

Definition at line 214 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevel().

214  {
215  return getLevel(level).template countRate<ReturnType, Interval>();
216  }
const Level & getLevel(size_t level) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double, typename Interval = Duration>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::countRate ( Duration  duration) const
inline

Definition at line 289 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevelByDuration().

289  {
290  return getLevelByDuration(duration)
291  .template countRate<ReturnType, Interval>();
292  }
const Level & getLevelByDuration(Duration duration) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
const Level& folly::MultiLevelTimeSeries< VT, CT >::getLevel ( size_t  level) const
inline
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
const Level& folly::MultiLevelTimeSeries< VT, CT >::getLevel ( TimePoint  start) const
inline

Definition at line 116 of file MultiLevelTimeSeries.h.

References folly::BucketedTimeSeries< VT, CT >::count(), folly::FATAL, folly::MultiLevelTimeSeries< VT, CT >::levels_, and start.

116  {
117  for (const auto& level : levels_) {
118  if (level.isAllTime()) {
119  return level;
120  }
121  // Note that we use duration() here rather than elapsed().
122  // If duration is large enough to contain the start time then this level
123  // is good enough, even if elapsed() indicates that no data was recorded
124  // before the specified start time.
125  if (level.getLatestTime() - level.duration() <= start) {
126  return level;
127  }
128  }
129  // We should always have an all-time level, so this is never reached.
130  LOG(FATAL) << "No level of timeseries covers internval"
131  << " from " << start.time_since_epoch().count() << " to now";
132  return levels_.back();
133  }
auto start
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
const Level& folly::MultiLevelTimeSeries< VT, CT >::getLevelByDuration ( Duration  duration) const
inline

Definition at line 142 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::levels_.

Referenced by folly::MultiLevelTimeSeries< VT, CT >::avg(), folly::MultiLevelTimeSeries< VT, CT >::count(), folly::MultiLevelTimeSeries< VT, CT >::countRate(), folly::MultiLevelTimeSeries< VT, CT >::rate(), and folly::MultiLevelTimeSeries< VT, CT >::sum().

142  {
143  // since the number of levels is expected to be small (less than 5 in most
144  // cases), a simple linear scan would be efficient and is intentionally
145  // chosen here over other alternatives for lookup.
146  for (const auto& level : levels_) {
147  if (level.duration() == duration) {
148  return level;
149  }
150  }
151  throw std::out_of_range(folly::to<std::string>(
152  "No level of duration ", duration.count(), " found"));
153  }
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
size_t folly::MultiLevelTimeSeries< VT, CT >::numBuckets ( ) const
inline

Definition at line 84 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::levels_.

84  {
85  // The constructor ensures that levels_ has at least one item
86  return levels_[0].numBuckets();
87  }
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
size_t folly::MultiLevelTimeSeries< VT, CT >::numLevels ( ) const
inline

Definition at line 92 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::levels_.

Referenced by TEST().

92  {
93  return levels_.size();
94  }
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double, typename Interval = Duration>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::rate ( size_t  level) const
inline

Definition at line 191 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevel().

Referenced by TEST().

191  {
192  return getLevel(level).template rate<ReturnType, Interval>();
193  }
const Level & getLevel(size_t level) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double, typename Interval = Duration>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::rate ( Duration  duration) const
inline

Definition at line 260 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevelByDuration().

260  {
261  return getLevelByDuration(duration).template rate<ReturnType, Interval>();
262  }
const Level & getLevelByDuration(Duration duration) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
template<typename ReturnType = double>
ReturnType folly::MultiLevelTimeSeries< VT, CT >::rate ( TimePoint  start,
TimePoint  end 
) const
inline

Definition at line 342 of file MultiLevelTimeSeries.h.

References folly::test::end(), folly::MultiLevelTimeSeries< VT, CT >::getLevel(), and start.

342  {
343  return getLevel(start).template rate<ReturnType>(start, end);
344  }
auto end(TestAdlIterable &instance)
Definition: ForeachTest.cpp:62
const Level & getLevel(size_t level) const
auto start
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
ValueType folly::MultiLevelTimeSeries< VT, CT >::sum ( size_t  level) const
inline

Definition at line 162 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevel(), and folly::BucketedTimeSeries< VT, CT >::sum().

Referenced by TEST().

162  {
163  return getLevel(level).sum();
164  }
const ValueType & sum() const
const Level & getLevel(size_t level) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
ValueType folly::MultiLevelTimeSeries< VT, CT >::sum ( Duration  duration) const
inline

Definition at line 228 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevelByDuration(), and folly::BucketedTimeSeries< VT, CT >::sum().

228  {
229  return getLevelByDuration(duration).sum();
230  }
const ValueType & sum() const
const Level & getLevelByDuration(Duration duration) const
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
ValueType folly::MultiLevelTimeSeries< VT, CT >::sum ( TimePoint  start,
TimePoint  end 
) const
inline

Definition at line 312 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::getLevel(), and folly::BucketedTimeSeries< VT, CT >::sum().

312  {
313  return getLevel(start).sum(start, end);
314  }
auto end(TestAdlIterable &instance)
Definition: ForeachTest.cpp:62
const ValueType & sum() const
const Level & getLevel(size_t level) const
auto start
template<typename VT , typename CT >
void folly::MultiLevelTimeSeries< VT, CT >::update ( TimePoint  now)

Definition at line 95 of file MultiLevelTimeSeries-defs.h.

References folly::MultiLevelTimeSeries< VT, CT >::flush(), i, and folly::MultiLevelTimeSeries< VT, CT >::levels_.

Referenced by folly::MultiLevelTimeSeries< VT, CT >::count(), and folly::MultiLevelTimeSeries< VT, CT >::update().

95  {
96  flush();
97  for (size_t i = 0; i < levels_.size(); ++i) {
98  levels_[i].update(now);
99  }
100 }
std::chrono::steady_clock::time_point now()
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
void folly::MultiLevelTimeSeries< VT, CT >::update ( Duration  now)
inline

Definition at line 415 of file MultiLevelTimeSeries.h.

References folly::MultiLevelTimeSeries< VT, CT >::update().

415  {
416  update(TimePoint(now));
417  }
std::chrono::steady_clock::time_point now()
typename Clock::time_point TimePoint

Member Data Documentation

template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
uint64_t folly::MultiLevelTimeSeries< VT, CT >::cachedCount_
private
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
ValueType folly::MultiLevelTimeSeries< VT, CT >::cachedSum_
private
template<typename VT, typename CT = LegacyStatsClock<std::chrono::seconds>>
TimePoint folly::MultiLevelTimeSeries< VT, CT >::cachedTime_
private

The documentation for this class was generated from the following files: