artdaq_utilities  1.08.06
MetricPlugin_t.cc
1 #include "artdaq-utilities/Plugins/MetricPlugin.hh"
3 
4 #define BOOST_TEST_MODULE MetricPlugin_t
5 #include "cetlib/quiet_unit_test.hpp"
6 #include "cetlib_except/exception.h"
7 
8 #include "TRACE/trace.h"
9 
10 namespace artdaqtest {
15 {
16 public:
21  explicit MetricPluginTestAdapter(fhicl::ParameterSet ps)
22  : artdaq::MetricPlugin(ps, "MetricPlugin_t", "plugin_t")
30  {}
31 
35  virtual void sendMetric_(const std::string&, const std::string&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_string_calls++; }
39  virtual void sendMetric_(const std::string&, const int&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_int_calls++; }
43  virtual void sendMetric_(const std::string&, const double&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_double_calls++; }
47  virtual void sendMetric_(const std::string&, const float&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_float_calls++; }
51  virtual void sendMetric_(const std::string&, const uint64_t&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_unsigned_calls++; }
52 
56  void startMetrics_() override { startMetrics_calls++; }
60  void stopMetrics_() override { stopMetrics_calls++; }
61 
69 
70  // Getters for protected members
75  fhicl::ParameterSet get_pset() { return pset; }
85  std::string get_app_name_() { return app_name_; }
90  bool get_inhibit_() { return inhibit_; }
95  std::bitset<64> get_level_mask_() { return level_mask_; }
96 };
97 } // namespace artdaqtest
98 
99 BOOST_AUTO_TEST_SUITE(MetricPlugin_test)
100 
101 BOOST_AUTO_TEST_CASE(Constructor)
102 {
103  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor BEGIN";
104  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
105  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
107  BOOST_REQUIRE_EQUAL(mpta.get_pset().to_string(), pset.to_string());
108  BOOST_REQUIRE_EQUAL(mpta.get_accumulationTime_(), 0.0);
109  BOOST_REQUIRE_EQUAL(mpta.get_level_mask_()[8], true);
110  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
111  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor END";
112 }
113 
114 BOOST_AUTO_TEST_CASE(IsLevelEnabled)
115 {
116  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled BEGIN";
117  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
118  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
120 
121  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(0), true);
122  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(1), true);
123  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(2), true);
124  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(3), true);
125  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(4), true);
126  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(5), false);
127  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(6), false);
128  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(7), true);
129  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
130  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(9), true);
131  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(10), false);
132  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(11), true);
133  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(12), false);
134  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(13), true);
135  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(14), true);
136  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(15), true);
137  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(16), false);
138  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(17), true);
139  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(18), false);
140  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(19), true);
141  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(20), true);
142  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(21), true);
143  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(22), false);
144 
145  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled END";
146 }
147 
148 BOOST_AUTO_TEST_CASE(LibraryName)
149 {
150  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName BEGIN";
151  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
152  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
154 
155  BOOST_REQUIRE_EQUAL(mpta.getLibName(), "ERROR");
156  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName END";
157 }
158 
159 BOOST_AUTO_TEST_CASE(AddMetricData)
160 {
161  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData BEGIN";
162  std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
163  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
165 
166  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
167  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
168  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
169  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
170  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
171 
172  mpta.addMetricData(smd);
173  mpta.addMetricData(imd);
174  mpta.addMetricData(fmd);
175  mpta.addMetricData(dmd);
176  mpta.addMetricData(umd);
177 
178  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
179  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
180  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
181  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
182  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
183 
184  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData END";
185 }
186 
187 BOOST_AUTO_TEST_CASE(SendMetrics)
188 {
189  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics BEGIN";
190  std::string testConfig = "reporting_interval: 0.01 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
191  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
193 
194  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
195  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
196  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
197  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
198  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
199 
200  mpta.addMetricData(smd);
201  mpta.addMetricData(imd);
202  mpta.addMetricData(fmd);
203  mpta.addMetricData(dmd);
204  mpta.addMetricData(umd);
205 
206  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
207  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
208  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
209  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
210  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
211 
212  mpta.sendMetrics();
213 
214  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
215  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
216  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
217  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
218  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
219 
220  mpta.addMetricData(smd);
221  mpta.addMetricData(imd);
222  mpta.addMetricData(fmd);
223  mpta.addMetricData(dmd);
224  mpta.addMetricData(umd);
225 
226  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
227  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
228  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
229  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
230  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
231 
232  mpta.sendMetrics();
233 
234  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
235  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
236  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
237  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
238  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
239 
240  usleep(200000);
241 
242  mpta.sendMetrics();
243 
244  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
245  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
246  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
247  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
248  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
249 
250  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics END";
251 }
252 
253 BOOST_AUTO_TEST_CASE(StartMetrics)
254 {
255  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics BEGIN";
256  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
257  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
259 
260  mpta.startMetrics();
261  BOOST_REQUIRE_EQUAL(mpta.startMetrics_calls, 1);
262  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics END";
263 }
264 
265 BOOST_AUTO_TEST_CASE(StopMetrics)
266 {
267  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics BEGIN";
268  std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
269  fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
271 
272  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
273  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
274  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
275  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
276  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
277 
278  mpta.addMetricData(smd);
279  mpta.addMetricData(imd);
280  mpta.addMetricData(fmd);
281  mpta.addMetricData(dmd);
282  mpta.addMetricData(umd);
283 
284  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
285  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
286  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
287  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
288  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
289 
290  mpta.stopMetrics();
291 
292  BOOST_REQUIRE_EQUAL(mpta.stopMetrics_calls, 1);
293  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
294  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
295  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
296  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
297  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
298 
299  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics END";
300 }
301 
302 BOOST_AUTO_TEST_SUITE_END()
virtual void sendMetric_(const std::string &, const float &, const std::string &, const std::chrono::system_clock::time_point &) override
Send a float metric, record the call and discard the metric&#39;s data.
MetricPluginTestAdapter(fhicl::ParameterSet ps)
Constructor
size_t sendMetric_string_calls
The number of string metric calls received.
The MetricPlugin class defines the interface that MetricManager uses to send metric data to the vario...
Definition: MetricPlugin.hh:41
virtual void sendMetric_(const std::string &, const uint64_t &, const std::string &, const std::chrono::system_clock::time_point &) override
Send an unsigned metric, record the call and discard the metric&#39;s data.
void stopMetrics_() override
Record that a stopMetrics call was received.
bool get_inhibit_()
Get the MetricPlugin&#39;s inhibit_ variable
fhicl::ParameterSet pset
The ParameterSet used to configure the MetricPlugin.
double get_accumulationTime_()
Get the MetricPlugin&#39;s accumulationTime variable
MetricPlugin(fhicl::ParameterSet const &ps, std::string const &app_name, std::string const &metric_name)
MetricPlugin Constructor.
Definition: MetricPlugin.hh:74
fhicl::ParameterSet get_pset()
Get the ParameterSet used to configure the plugin
std::string app_name_
Name of the application which is sending metrics to this plugin.
size_t sendMetric_int_calls
The number of int metric calls received.
size_t startMetrics_calls
The number of startMetrics_ calls received.
Report only the last value recorded. Useful for event counters, run numbers, etc. ...
size_t stopMetrics_calls
The number of stopMetrics_ calls received.
std::string get_app_name_()
Get the MetricPlugin&#39;s app_name_ variable
std::bitset< 64 > level_mask_
Bitset indicating for each possible metric level, whether this plugin will receive those metrics...
std::bitset< 64 > get_level_mask_()
Get the MetricPlugin&#39;s level_mask_ variable
void startMetrics_() override
Record that a startMetrics call was received.
virtual void sendMetric_(const std::string &, const double &, const std::string &, const std::chrono::system_clock::time_point &) override
Send a double metric, record the call and discard the metric&#39;s data.
virtual void sendMetric_(const std::string &, const std::string &, const std::string &, const std::chrono::system_clock::time_point &) override
Send a String metric, record the call and discard the metric&#39;s data.
double accumulationTime_
The amount of time to average metric values; except for accumulate=false metrics, will be the interva...
size_t sendMetric_double_calls
The number of double metric calls received.
size_t sendMetric_unsigned_calls
The numberof unsigned metric calls received.
size_t sendMetric_float_calls
The number of float metric calls received.
bool inhibit_
Flag to indicate that the MetricPlugin is being stopped, and any metric back-ends which do not have a...
Metric plugin which stores metric call counts for testing
virtual void sendMetric_(const std::string &, const int &, const std::string &, const std::chrono::system_clock::time_point &) override
Send an int metric, record the call and discard the metric&#39;s data.