1 #ifndef artdaq_DAQrate_MetricManager_hh
2 #define artdaq_DAQrate_MetricManager_hh
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"
19 #include <condition_variable>
21 #include <boost/thread.hpp>
71 void initialize(fhicl::ParameterSet
const& pset, std::string prefix =
"");
100 void reinitialize(fhicl::ParameterSet
const& pset, std::string prefix =
"");
120 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);
135 void sendMetric(std::string
const& name,
int const& value, std::string
const& unit,
int level,
MetricMode mode, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
150 void sendMetric(std::string
const& name,
double const& value, std::string
const& unit,
int level,
MetricMode mode, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
165 void sendMetric(std::string
const& name,
float const& value, std::string
const& unit,
int level,
MetricMode mode, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
180 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);
186 void setPrefix(std::string prefix) { prefix_ = prefix; }
220 void sendMetricLoop_();
222 void startMetricLoop_();
224 std::vector<std::unique_ptr<artdaq::MetricPlugin>> metric_plugins_;
225 boost::thread metric_sending_thread_;
226 std::mutex metric_mutex_;
227 std::condition_variable metric_cv_;
228 int metric_send_interval_ms_;
237 typedef std::unique_ptr<MetricData> metric_data_ptr;
238 typedef std::pair<size_t, std::list<metric_data_ptr>> queue_entry;
240 std::unordered_map<std::string, queue_entry> metric_queue_;
241 std::mutex metric_queue_mutex_;
242 std::atomic<size_t> missed_metric_calls_;
243 size_t metric_queue_max_size_;
244 size_t metric_queue_notify_size_;
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.
bool Initialized()
Returns whether the MetricManager has been initialized (configured)
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 >= to level...
MetricMode
The Mode of the metric indicates how multiple metric values should be combined within a reporting int...
size_t metricQueueSize(std::string name="")
Return the size of the named metric queue
MetricManager()
Construct an instance of the MetricManager class.
void do_start()
Perform startup actions for each configured MetricPlugin.
bool Running()
Returns whether the MetricManager is running (accepting metric calls)
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.
bool Active()
Returns whether any Metric Plugins are defined and configured
void do_resume()
Resume metric sending. Currently a No-Op.
bool metricQueueEmpty()
Returns whether the metric queue is completely empty
void do_pause()
Pause metric sending. Currently a No-Op.