]> git.ipfire.org Git - thirdparty/squid.git/blame - src/FadingCounter.h
Prep for 3.3.12 and 3.4.4
[thirdparty/squid.git] / src / FadingCounter.h
CommitLineData
8277060a
CT
1#ifndef SQUID_FADING_COUNTER_H
2#define SQUID_FADING_COUNTER_H
3
c8ea3cc0 4#include <vector>
8277060a
CT
5
6/// Counts events, forgetting old ones. Usefull for "3 errors/minute" limits.
a459e80a
A
7class FadingCounter
8{
9public:
10 FadingCounter();
8277060a 11
a459e80a
A
12 /// 0=remember nothing; -1=forget nothing; new value triggers clear()
13 void configure(double horizonSeconds);
8277060a 14
a459e80a 15 void clear(); ///< forgets all events
8277060a 16
a459e80a
A
17 int count(int howMany); ///< count fresh, return #events remembered
18 int remembered() const { return total; } ///< possibly stale #events
8277060a 19
a459e80a
A
20 /// read-only memory horizon in seconds; older events are forgotten
21 double horizon;
8277060a 22
a459e80a
A
23private:
24 const int precision; ///< #counting slots, controls measur. occuracy
25 double delta; ///< sub-interval duration = horizon/precision
8277060a 26
a459e80a 27 double lastTime; ///< time of the last update
c8ea3cc0 28 std::vector<int> counters; ///< events per delta (possibly stale)
a459e80a 29 int total; ///< number of remembered events (possibly stale)
8277060a
CT
30};
31
32#endif /* SQUID_FADING_COUNTER_H */