1 #include "artdaq-core/Core/StatisticsCollection.hh"
8 return singletonInstance;
11 StatisticsCollection::StatisticsCollection()
12 : calculationInterval_(1.0)
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;
32 if (calculation_thread_ && calculation_thread_->joinable() && calculation_thread_->get_id() != boost::this_thread::get_id()) calculation_thread_->join();
39 std::lock_guard<std::mutex> scopedLock(map_mutex_);
40 monitoredQuantityMap_[name] = mqPtr;
46 std::lock_guard<std::mutex> scopedLock(map_mutex_);
48 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
49 iter = monitoredQuantityMap_.find(name);
50 if (iter == monitoredQuantityMap_.end()) {
return emptyResult; }
56 std::lock_guard<std::mutex> scopedLock(map_mutex_);
57 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
58 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
59 iterEnd = monitoredQuantityMap_.end();
60 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
62 iter->second->reset();
68 thread_stop_requested_ =
true;
73 while (!thread_stop_requested_)
75 long useconds =
static_cast<long>(calculationInterval_ * 1000000);
78 std::lock_guard<std::mutex> scopedLock(map_mutex_);
79 std::map<std::string, MonitoredQuantityPtr>::const_iterator iter;
80 std::map<std::string, MonitoredQuantityPtr>::const_iterator iterEnd;
81 iterEnd = monitoredQuantityMap_.end();
82 for (iter = monitoredQuantityMap_.begin(); iter != iterEnd; ++iter)
84 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.