1 #ifndef artdaq_DAQrate_MetricManager_hh
2 #define artdaq_DAQrate_MetricManager_hh
12 #include "artdaq-utilities/Plugins/MetricPlugin.hh"
13 #include "fhiclcpp/fwd.h"
14 #include "messagefacility/MessageLogger/MessageLogger.h"
19 #include <condition_variable>
66 void initialize(fhicl::ParameterSet
const& pset, std::string prefix =
"");
95 void reinitialize(fhicl::ParameterSet
const& pset, std::string prefix =
"");
112 void sendMetric(std::string
const& name, std::string
const& value, std::string
const& unit,
int level,
bool accumulate =
true, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
124 void sendMetric(std::string
const& name,
int const& value, std::string
const& unit,
int level,
bool accumulate =
true, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
136 void sendMetric(std::string
const& name,
double const& value, std::string
const& unit,
int level,
bool accumulate =
true, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
148 void sendMetric(std::string
const& name,
float const& value, std::string
const& unit,
int level,
bool accumulate =
true, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
160 void sendMetric(std::string
const& name,
long unsigned int const& value, std::string
const& unit,
int level,
bool accumulate =
true, std::string
const& metricPrefix =
"",
bool useNameOverride =
false);
166 void setPrefix(std::string prefix) { prefix_ = prefix; }
169 void sendMetricLoop_();
171 void startMetricLoop_();
173 std::vector<std::unique_ptr<artdaq::MetricPlugin>> metric_plugins_;
174 std::thread metric_sending_thread_;
175 std::mutex metric_mutex_;
176 std::condition_variable metric_cv_;
186 MetricData(
const MetricData&) =
default;
188 MetricData(MetricData&&) noexcept = default;
190 MetricData& operator=(const MetricData&) = default;
192 MetricData& operator=(MetricData&&) noexcept = default;
195 std::
string stringValue_;
202 long unsigned int unsignedValue_;
219 std::string metricPrefix_;
220 bool useNameOverride_;
222 MetricData(std::string
const& name, std::string
const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
224 , stringValue_(value)
225 , type_(StringMetric)
228 , accumulate_(accumulate)
229 , metricPrefix_(metricPrefix)
230 , useNameOverride_(useNameOverride) {}
232 MetricData(std::string
const& name,
int const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
238 , accumulate_(accumulate)
239 , metricPrefix_(metricPrefix)
240 , useNameOverride_(useNameOverride) {}
242 MetricData(std::string
const& name,
double const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
244 , doubleValue_(value)
245 , type_(DoubleMetric)
248 , accumulate_(accumulate)
249 , metricPrefix_(metricPrefix)
250 , useNameOverride_(useNameOverride) {}
252 MetricData(std::string
const& name,
float const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
258 , accumulate_(accumulate)
259 , metricPrefix_(metricPrefix)
260 , useNameOverride_(useNameOverride) {}
262 MetricData(std::string
const& name,
long unsigned int const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
264 , unsignedValue_(value)
265 , type_(UnsignedMetric)
268 , accumulate_(accumulate)
269 , metricPrefix_(metricPrefix)
270 , useNameOverride_(useNameOverride) {}
272 MetricData() : name_(
"")
273 , type_(InvalidMetric) {}
276 std::list<std::unique_ptr<MetricData>> metric_queue_;
277 std::mutex metric_queue_mutex_;
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.
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 sendMetric(std::string const &name, std::string const &value, std::string const &unit, int level, bool accumulate=true, std::string const &metricPrefix="", bool useNameOverride=false)
Send a metric with the given parameters to any MetricPlugins with a threshold level >= to level...
void do_pause()
Pause metric sending. Currently a No-Op.