artdaq_utilities  v1_04_00
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 <queue>
19 #include <condition_variable>
20 #include <atomic>
21 #include <boost/thread.hpp>
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 
69  void initialize(fhicl::ParameterSet const& pset, std::string prefix = "");
70 
74  void do_start();
75 
79  void do_stop();
80 
84  void do_pause();
85 
89  void do_resume();
90 
98  void reinitialize(fhicl::ParameterSet const& pset, std::string prefix = "");
99 
103  void shutdown();
104 
118  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);
119 
133  void sendMetric(std::string const& name, int const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
134 
148  void sendMetric(std::string const& name, double const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
149 
163  void sendMetric(std::string const& name, float const& value, std::string const& unit, int level, MetricMode mode, std::string const& metricPrefix = "", bool useNameOverride = false);
164 
178  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);
179 
184  void setPrefix(std::string prefix) { prefix_ = prefix; }
185 
186 private:
187  void sendMetricLoop_();
188 
189  void startMetricLoop_();
190 
191  std::vector<std::unique_ptr<artdaq::MetricPlugin>> metric_plugins_;
192  boost::thread metric_sending_thread_;
193  std::mutex metric_mutex_;
194  std::condition_variable metric_cv_;
195  int metric_send_interval_ms_;
196 
197  bool initialized_;
198  bool running_;
199  bool active_;
200  std::string prefix_;
201 
202  std::queue<std::unique_ptr<MetricData>> metric_queue_;
203  std::mutex metric_queue_mutex_;
204  std::atomic<size_t> missed_metric_calls_;
205  size_t metric_queue_max_size_;
206 };
207 
208 #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...
MetricMode
The Mode of the metric indicates how multiple metric values should be combined within a reporting int...
Definition: MetricData.hh:31
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.