00001 #ifndef artdaq_core_Core_StatisticsCollection_hh
00002 #define artdaq_core_Core_StatisticsCollection_hh
00003
00004 #include "artdaq-core/Core/MonitoredQuantity.hh"
00005 #include <map>
00006 #include <memory>
00007 #include <mutex>
00008 #include <thread>
00009
00010 namespace artdaq {
00011 typedef std::shared_ptr<MonitoredQuantity> MonitoredQuantityPtr;
00012
00013 class StatisticsCollection {
00014
00015 public:
00016
00017 static StatisticsCollection & getInstance();
00018 ~StatisticsCollection();
00019
00020 void addMonitoredQuantity(const std::string & name,
00021 MonitoredQuantityPtr mqPtr);
00022 MonitoredQuantityPtr getMonitoredQuantity(const std::string & name) const;
00023 void reset();
00024
00025 void requestStop();
00026 void run();
00027
00028 private:
00029
00030 explicit StatisticsCollection();
00031
00032
00033 StatisticsCollection(StatisticsCollection const &);
00034 void operator= (StatisticsCollection const &);
00035
00036 double calculationInterval_;
00037 std::map<std::string, MonitoredQuantityPtr> monitoredQuantityMap_;
00038
00039 bool thread_stop_requested_;
00040 std::thread * calculation_thread_;
00041 mutable std::mutex map_mutex_;
00042 };
00043
00044 }
00045
00046 #endif