]>
Commit | Line | Data |
---|---|---|
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 |
7 | class FadingCounter |
8 | { | |
9 | public: | |
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 |
23 | private: |
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 */ |