CMSDK  2.0.1
MovingAverage.h
1 #if !defined(_MOVINGAVERAGE_H_)
2 #define _MOVINGAVERAGE_H_
3 
4 #include "Stats.h"
5 #include "PsyTime.h"
6 
7 namespace cmlabs {
8 
9 struct StatEntry {
10  uint64 count;
11  double value;
12 };
13 
15 public:
16  static bool UnitTest();
17 
18  MovingAverage(uint32 binTimeMS = 100, uint16 binCount = 600);
19  ~MovingAverage();
20 
21  bool add(double val, uint32 count = 1, uint64 time = GetTimeNow());
22 
23  bool getThroughput(uint32 ms, double& valPerSec, double& countPerSec, uint64 now = GetTimeNow());
24  bool getThroughputMulti(
25  uint32 ms1, uint32 ms2, uint32 ms3,
26  double& valPerSec1, double& countPerSec1,
27  double& valPerSec2, double& countPerSec2,
28  double& valPerSec3, double& countPerSec3, uint64 now = GetTimeNow() );
29 
30  bool getAverage(uint32 ms, double& val, uint64& count, uint64 now = GetTimeNow());
31  bool getAverageMulti(
32  uint32 ms1, uint32 ms2, uint32 ms3,
33  double& avg1, uint64& count1,
34  double& avg2, uint64& count2,
35  double& avg3, uint64& count3, uint64 now = GetTimeNow());
36 
37  bool getSum(uint32 ms, double& val, uint64& count, uint64 now = GetTimeNow());
38  bool getSumMulti(
39  uint32 ms1, uint32 ms2, uint32 ms3,
40  double& sum1, uint64& count1,
41  double& sum2, uint64& count2,
42  double& sum3, uint64& count3, uint64 now = GetTimeNow());
43 
44  bool getTotal(double& val, uint64& count);
45 
46  std::string getPerfXML(uint32 binMS = 1000, uint32 binNum = 60);
47  std::string getPerfJSON(uint32 binMS = 1000, uint32 binNum = 60);
48 
49 protected:
50  StatEntry* entries;
51  utils::Mutex mutex;
52 
53  uint32 binTime;
54  uint32 binCount;
55  uint32 currentBin;
56  uint64 currentBinStart;
57  double totalValue;
58  uint64 totalCount;
59  // uint64 totalTime;
60 
61  bool shiftBins(uint64 now);
62 };
63 
64 
65 } // namespace cmlabs
66 
67 #endif //_MOVINGAVERAGE_H_
68 
Definition: Bitmap.h:7
Definition: MovingAverage.h:9
Definition: MovingAverage.h:14
Definition: Utils.h:276