1 #include "artdaq-core/Core/StatisticsCollection.hh"
13 return singletonInstance;
19 StatisticsCollection::StatisticsCollection() : calculationInterval_(1.0)
21 thread_stop_requested_ =
false;
22 calculation_thread_ =
new std::thread(std::bind(&StatisticsCollection::run,
this));
25 StatisticsCollection::~StatisticsCollection()
29 calculation_thread_->join();
30 delete calculation_thread_;
33 void StatisticsCollection::
34 addMonitoredQuantity(
const std::string & name,
35 MonitoredQuantityPtr mqPtr)
37 std::lock_guard<std::mutex> scopedLock(map_mutex_);
38 monitoredQuantityMap_[name] = mqPtr;
42 StatisticsCollection::getMonitoredQuantity(
const std::string & name)
const
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;}
52 void StatisticsCollection::reset()
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();
63 void StatisticsCollection::requestStop()
65 thread_stop_requested_ =
true;
68 void StatisticsCollection::run()
70 while (! thread_stop_requested_) {
71 long useconds =
static_cast<long>(calculationInterval_ * 1000000);
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();
static StatisticsCollection & getInstance()