artdaq_utilities  v1_03_00
 All Classes Namespaces Functions Variables Typedefs
MetricManager.hh
1 #ifndef artdaq_DAQrate_MetricManager_hh
2 #define artdaq_DAQrate_MetricManager_hh
3 
4 // MetricManager class definition file
5 // Author: Eric Flumerfelt
6 // Last Modified: 11/14/2014
7 //
8 // MetricManager loads a user-specified set of plugins, sends them their configuration,
9 // and sends them data as it is recieved. It also maintains the state of the plugins
10 // relative to the application state.
11 
12 #include "artdaq-utilities/Plugins/MetricPlugin.hh"
13 #include "artdaq-utilities/Plugins/MetricData.hh"
14 #include "fhiclcpp/fwd.h"
15 #include "messagefacility/MessageLogger/MessageLogger.h"
16 
17 #include <sstream>
18 #include <list>
19 #include <thread>
20 #include <condition_variable>
21 #include <atomic>
22 
23 namespace artdaq
24 {
25  class MetricManager;
26 }
27 
34 {
35 public:
39  MetricManager();
40 
44  MetricManager(MetricManager const&) = delete;
45 
51  virtual ~MetricManager() noexcept;
52 
57  MetricManager& operator=(MetricManager const&) = delete;
58 
67  void initialize(fhicl::ParameterSet const& pset, std::string prefix = "");
68 
72  void do_start();
73 
77  void do_stop();
78 
82  void do_pause();
83 
87  void do_resume();
88 
96  void reinitialize(fhicl::ParameterSet const& pset, std::string prefix = "");
97 
101  void shutdown();
102 
116  void sendMetric(std::string const& name, std::string const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
117 
131  void sendMetric(std::string const& name, int const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
132 
146  void sendMetric(std::string const& name, double const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
147 
161  void sendMetric(std::string const& name, float const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
162 
176  void sendMetric(std::string const& name, long unsigned int const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
177 
182  void setPrefix(std::string prefix) { prefix_ = prefix; }
183 
184 private:
185  void sendMetricLoop_();
186 
187  void startMetricLoop_();
188 
189  std::vector<std::unique_ptr<artdaq::MetricPlugin>> metric_plugins_;
190  std::thread metric_sending_thread_;
191  std::mutex metric_mutex_;
192  std::condition_variable metric_cv_;
193  int metric_send_interval_ms_;
194 
195  bool initialized_;
196  bool running_;
197  bool active_;
198  std::string prefix_;
199 
200  std::list<std::unique_ptr<MetricData>> metric_queue_;
201  std::mutex metric_queue_mutex_;
202 };
203 
204 #endif /* artdaq_DAQrate_MetricManager_hh */
void reinitialize(fhicl::ParameterSet const &pset, std::string prefix="")
Reinitialize all MetricPlugin Instances.
void shutdown()
Call the destructors for all configured MetricPlugin instances.
void initialize(fhicl::ParameterSet const &pset, std::string prefix="")
Initialize the MetricPlugin instances.
void sendMetric(std::string const &name, std::string const &value, std::string const &unit, int level, MetricMode mode, std::string const &metricPrefix="", bool useNameOverride=false)
Send a metric with the given parameters to any MetricPlugins with a threshold level &gt;= to level...
MetricManager()
Construct an instance of the MetricManager class.
void do_start()
Perform startup actions for each configured MetricPlugin.
void do_stop()
Stop sending metrics to the MetricPlugin instances.
virtual ~MetricManager() noexcept
MetricManager destructor.
The MetricManager class handles loading metric plugins and asynchronously sending metric data to them...
MetricManager & operator=(MetricManager const &)=delete
Copy Assignment operator is deleted.
void setPrefix(std::string prefix)
Sets the prefix prepended to all metrics without useNameOverride set.
void do_resume()
Resume metric sending. Currently a No-Op.
void do_pause()
Pause metric sending. Currently a No-Op.