1 #include "artdaq-core/Core/StatisticsCollection.hh"
9 return singletonInstance;
12 StatisticsCollection::StatisticsCollection() : calculationInterval_(1.0)
14 thread_stop_requested_ =
false;
18 catch (
const boost::exception& e)
20 std::cerr <<
"Caught boost::exception starting Statistics Collection thread: " << boost::diagnostic_information(e) <<
", errno=" << errno << std::endl;
31 if(calculation_thread_ && calculation_thread_->joinable() && calculation_thread_->get_id() != boost::this_thread::get_id()) calculation_thread_->join();
38 std::lock_guard<std::mutex> scopedLock(map_mutex_);
39 monitoredQuantityMap_[name] = mqPtr;
45 std::lock_guard<std::mutex> scopedLock(map_mutex_);
47 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
48 iter = monitoredQuantityMap_.find(name);
49 if (iter == monitoredQuantityMap_.end()) {
return emptyResult; }
55 std::lock_guard<std::mutex> scopedLock(map_mutex_);
56 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
57 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
58 iterEnd = monitoredQuantityMap_.end();
59 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
61 iter->second->reset();
67 thread_stop_requested_ =
true;
72 while (!thread_stop_requested_)
74 long useconds =
static_cast<long>(calculationInterval_ * 1000000);
77 std::lock_guard<std::mutex> scopedLock(map_mutex_);
78 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
79 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
80 iterEnd = monitoredQuantityMap_.end();
81 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
83 iter->second->calculateStatistics();
void addMonitoredQuantity(const std::string &name, MonitoredQuantityPtr mqPtr)
Registers a new MonitoredQuantity to be tracked by the StatisticsCollection.
static StatisticsCollection & getInstance()
Returns the singleton instance of the StatisticsCollection.
void reset()
Reset all MonitoredQuantity object in this StatisticsCollection.
void requestStop()
Stops the statistics calculation thread.
virtual ~StatisticsCollection() noexcept
StatisticsCollection Destructor.
A collection of MonitoredQuantity instances describing low-level statistics of the artdaq system...
MonitoredQuantityPtr getMonitoredQuantity(const std::string &name) const
Lookup and return a MonitoredQuantity from the StatisticsCollection.
void run()
Start the background thread that performs MonitoredQuantity statistics calculation.
std::shared_ptr< MonitoredQuantity > MonitoredQuantityPtr
A shared_ptr to a MonitoredQuantity instance.