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>
38 void initialize(fhicl::ParameterSet
const&, std::string prefix =
"");
48 void reinitialize(fhicl::ParameterSet
const&, std::string prefix =
"");
52 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);
54 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);
56 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);
58 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);
60 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);
62 void setPrefix(std::string prefix) { prefix_ = prefix; }
65 void sendMetricLoop_();
67 void startMetricLoop_();
69 std::vector<std::unique_ptr<artdaq::MetricPlugin>> metric_plugins_;
70 std::thread metric_sending_thread_;
71 std::mutex metric_mutex_;
72 std::condition_variable metric_cv_;
82 MetricData(
const MetricData&) =
default;
84 MetricData(MetricData&&) noexcept =
default;
86 MetricData& operator=(
const MetricData&) =
default;
88 MetricData& operator=(MetricData&&) noexcept =
default;
91 std::string stringValue_;
98 long unsigned int unsignedValue_;
115 std::string metricPrefix_;
116 bool useNameOverride_;
118 MetricData(std::string
const& name, std::string
const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
120 , stringValue_(value)
121 , type_(StringMetric)
124 , accumulate_(accumulate)
125 , metricPrefix_(metricPrefix)
126 , useNameOverride_(useNameOverride) {}
128 MetricData(std::string
const& name,
int const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
134 , accumulate_(accumulate)
135 , metricPrefix_(metricPrefix)
136 , useNameOverride_(useNameOverride) {}
138 MetricData(std::string
const& name,
double const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
140 , doubleValue_(value)
141 , type_(DoubleMetric)
144 , accumulate_(accumulate)
145 , metricPrefix_(metricPrefix)
146 , useNameOverride_(useNameOverride) {}
148 MetricData(std::string
const& name,
float const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
154 , accumulate_(accumulate)
155 , metricPrefix_(metricPrefix)
156 , useNameOverride_(useNameOverride) {}
158 MetricData(std::string
const& name,
long unsigned int const& value, std::string
const& unit,
int level,
bool accumulate, std::string
const& metricPrefix,
bool useNameOverride)
160 , unsignedValue_(value)
161 , type_(UnsignedMetric)
164 , accumulate_(accumulate)
165 , metricPrefix_(metricPrefix)
166 , useNameOverride_(useNameOverride) {}
168 MetricData() : name_(
"")
169 , type_(InvalidMetric) {}
172 std::list<std::unique_ptr<MetricData>> metric_queue_;
173 std::mutex metric_queue_mutex_;