1 #include "artdaq-core/Core/StatisticsCollection.hh"
9 return singletonInstance;
12 StatisticsCollection::StatisticsCollection()
14 thread_stop_requested_ =
false;
19 snprintf(tname,
sizeof(tname)-1,
"%s",
"StatColl");
20 tname[
sizeof(tname)-1] =
'\0';
21 auto handle = calculation_thread_->native_handle();
22 pthread_setname_np(handle, tname);
24 catch (
const boost::exception& e)
26 std::cerr <<
"Caught boost::exception starting Statistics Collection thread: " << boost::diagnostic_information(e) <<
", errno=" << errno << std::endl;
34 thread_stop_requested_ =
true;
39 if (calculation_thread_ && calculation_thread_->joinable() && calculation_thread_->get_id() != boost::this_thread::get_id())
41 calculation_thread_->join();
54 std::lock_guard<std::mutex> scopedLock(map_mutex_);
55 monitoredQuantityMap_[name] = std::move(mqPtr);
61 std::lock_guard<std::mutex> scopedLock(map_mutex_);
63 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
64 iter = monitoredQuantityMap_.find(name);
65 if (iter == monitoredQuantityMap_.end()) {
return emptyResult; }
71 std::lock_guard<std::mutex> scopedLock(map_mutex_);
72 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
73 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
74 iterEnd = monitoredQuantityMap_.end();
75 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
77 iter->second->reset();
83 thread_stop_requested_ =
true;
88 while (!thread_stop_requested_)
90 auto useconds =
static_cast<uint64_t
>(calculationInterval_ * 1000000);
93 std::lock_guard<std::mutex> scopedLock(map_mutex_);
94 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
95 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
96 iterEnd = monitoredQuantityMap_.end();
97 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
99 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.