1 #include "artdaq-core/Core/StatisticsCollection.hh"
9 return singletonInstance;
12 StatisticsCollection::StatisticsCollection()
14 thread_stop_requested_ =
false;
19 catch (
const boost::exception& e)
21 std::cerr <<
"Caught boost::exception starting Statistics Collection thread: " << boost::diagnostic_information(e) <<
", errno=" << errno << std::endl;
29 thread_stop_requested_ =
true;
34 if (calculation_thread_ && calculation_thread_->joinable() && calculation_thread_->get_id() != boost::this_thread::get_id())
36 calculation_thread_->join();
49 std::lock_guard<std::mutex> scopedLock(map_mutex_);
50 monitoredQuantityMap_[name] = std::move(mqPtr);
56 std::lock_guard<std::mutex> scopedLock(map_mutex_);
58 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
59 iter = monitoredQuantityMap_.find(name);
60 if (iter == monitoredQuantityMap_.end()) {
return emptyResult; }
66 std::lock_guard<std::mutex> scopedLock(map_mutex_);
67 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
68 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
69 iterEnd = monitoredQuantityMap_.end();
70 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
72 iter->second->reset();
78 thread_stop_requested_ =
true;
83 while (!thread_stop_requested_)
85 auto useconds =
static_cast<uint64_t
>(calculationInterval_ * 1000000);
88 std::lock_guard<std::mutex> scopedLock(map_mutex_);
89 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
90 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
91 iterEnd = monitoredQuantityMap_.end();
92 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
94 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.