artdaq_core  v1_05_07
 All Classes Namespaces Functions
StatisticsCollection.cc
1 #include "artdaq-core/Core/StatisticsCollection.hh"
2 
3 namespace artdaq {
4 
11  {
12  static StatisticsCollection singletonInstance;
13  return singletonInstance;
14  }
15 
19  StatisticsCollection::StatisticsCollection() : calculationInterval_(1.0)
20  {
21  thread_stop_requested_ = false;
22  calculation_thread_ = new std::thread(std::bind(&StatisticsCollection::run, this));
23  }
24 
25  StatisticsCollection::~StatisticsCollection()
26  {
27  // stop and clean up the thread
28  requestStop();
29  calculation_thread_->join();
30  delete calculation_thread_;
31  }
32 
33  void StatisticsCollection::
34  addMonitoredQuantity(const std::string & name,
35  MonitoredQuantityPtr mqPtr)
36  {
37  std::lock_guard<std::mutex> scopedLock(map_mutex_);
38  monitoredQuantityMap_[name] = mqPtr;
39  }
40 
41  MonitoredQuantityPtr
42  StatisticsCollection::getMonitoredQuantity(const std::string & name) const
43  {
44  std::lock_guard<std::mutex> scopedLock(map_mutex_);
45  MonitoredQuantityPtr emptyResult;
46  std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
47  iter = monitoredQuantityMap_.find(name);
48  if (iter == monitoredQuantityMap_.end()) {return emptyResult;}
49  return iter->second;
50  }
51 
52  void StatisticsCollection::reset()
53  {
54  std::lock_guard<std::mutex> scopedLock(map_mutex_);
55  std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
56  std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
57  iterEnd = monitoredQuantityMap_.end();
58  for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter) {
59  iter->second->reset();
60  }
61  }
62 
63  void StatisticsCollection::requestStop()
64  {
65  thread_stop_requested_ = true;
66  }
67 
68  void StatisticsCollection::run()
69  {
70  while (! thread_stop_requested_) {
71  long useconds = static_cast<long>(calculationInterval_ * 1000000);
72  usleep(useconds);
73  {
74  std::lock_guard<std::mutex> scopedLock(map_mutex_);
75  std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
76  std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
77  iterEnd = monitoredQuantityMap_.end();
78  for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter) {
79  iter->second->calculateStatistics();
80  }
81  }
82  }
83  }
84 
85 }
static StatisticsCollection & getInstance()