artdaq_utilities  v1_07_02
MetricPlugin_t.cc
1 #include "artdaq-utilities/Plugins/MakeParameterSet.hh"
2 #include "artdaq-utilities/Plugins/MetricPlugin.hh"
4 
5 #define BOOST_TEST_MODULE MetricPlugin_t
6 #include "cetlib/quiet_unit_test.hpp"
7 #include "cetlib_except/exception.h"
8 
9 #include "TRACE/trace.h"
10 
11 namespace artdaqtest {
16 {
17 public:
22  explicit MetricPluginTestAdapter(fhicl::ParameterSet ps)
23  : artdaq::MetricPlugin(ps, "MetricPlugin_t", "plugin_t")
31  {}
32 
36  virtual void sendMetric_(const std::string&, const std::string&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_string_calls++; }
40  virtual void sendMetric_(const std::string&, const int&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_int_calls++; }
44  virtual void sendMetric_(const std::string&, const double&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_double_calls++; }
48  virtual void sendMetric_(const std::string&, const float&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_float_calls++; }
52  virtual void sendMetric_(const std::string&, const uint64_t&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_unsigned_calls++; }
53 
57  void startMetrics_() override { startMetrics_calls++; }
61  void stopMetrics_() override { stopMetrics_calls++; }
62 
70 
71  // Getters for protected members
76  fhicl::ParameterSet get_pset() { return pset; }
86  std::string get_app_name_() { return app_name_; }
91  bool get_inhibit_() { return inhibit_; }
96  std::bitset<64> get_level_mask_() { return level_mask_; }
97 };
98 } // namespace artdaqtest
99 
100 BOOST_AUTO_TEST_SUITE(MetricPlugin_test)
101 
102 BOOST_AUTO_TEST_CASE(Constructor)
103 {
104  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor BEGIN";
105  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
106  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
108  BOOST_REQUIRE_EQUAL(mpta.get_pset().to_string(), pset.to_string());
109  BOOST_REQUIRE_EQUAL(mpta.get_accumulationTime_(), 0.0);
110  BOOST_REQUIRE_EQUAL(mpta.get_level_mask_()[8], true);
111  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
112  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor END";
113 }
114 
115 BOOST_AUTO_TEST_CASE(IsLevelEnabled)
116 {
117  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled BEGIN";
118  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
119  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
121 
122  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(0), true);
123  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(1), true);
124  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(2), true);
125  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(3), true);
126  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(4), true);
127  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(5), false);
128  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(6), false);
129  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(7), true);
130  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
131  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(9), true);
132  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(10), false);
133  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(11), true);
134  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(12), false);
135  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(13), true);
136  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(14), true);
137  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(15), true);
138  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(16), false);
139  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(17), true);
140  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(18), false);
141  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(19), true);
142  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(20), true);
143  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(21), true);
144  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(22), false);
145 
146  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled END";
147 }
148 
149 BOOST_AUTO_TEST_CASE(LibraryName)
150 {
151  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName BEGIN";
152  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
153  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
155 
156  BOOST_REQUIRE_EQUAL(mpta.getLibName(), "ERROR");
157  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName END";
158 }
159 
160 BOOST_AUTO_TEST_CASE(AddMetricData)
161 {
162  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData BEGIN";
163  std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
164  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
166 
167  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
168  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
169  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
170  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
171  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
172 
173  mpta.addMetricData(smd);
174  mpta.addMetricData(imd);
175  mpta.addMetricData(fmd);
176  mpta.addMetricData(dmd);
177  mpta.addMetricData(umd);
178 
179  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
180  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
181  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
182  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
183  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
184 
185  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData END";
186 }
187 
188 BOOST_AUTO_TEST_CASE(SendMetrics)
189 {
190  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics BEGIN";
191  std::string testConfig = "reporting_interval: 0.01 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
192  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
194 
195  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
196  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
197  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
198  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
199  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
200 
201  mpta.addMetricData(smd);
202  mpta.addMetricData(imd);
203  mpta.addMetricData(fmd);
204  mpta.addMetricData(dmd);
205  mpta.addMetricData(umd);
206 
207  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
208  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
209  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
210  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
211  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
212 
213  mpta.sendMetrics();
214 
215  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
216  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
217  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
218  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
219  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
220 
221  mpta.addMetricData(smd);
222  mpta.addMetricData(imd);
223  mpta.addMetricData(fmd);
224  mpta.addMetricData(dmd);
225  mpta.addMetricData(umd);
226 
227  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
228  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
229  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
230  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
231  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
232 
233  mpta.sendMetrics();
234 
235  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
236  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
237  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
238  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
239  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
240 
241  usleep(200000);
242 
243  mpta.sendMetrics();
244 
245  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
246  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
247  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
248  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
249  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
250 
251  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics END";
252 }
253 
254 BOOST_AUTO_TEST_CASE(StartMetrics)
255 {
256  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics BEGIN";
257  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
258  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
260 
261  mpta.startMetrics();
262  BOOST_REQUIRE_EQUAL(mpta.startMetrics_calls, 1);
263  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics END";
264 }
265 
266 BOOST_AUTO_TEST_CASE(StopMetrics)
267 {
268  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics BEGIN";
269  std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
270  fhicl::ParameterSet pset = artdaq::make_pset(testConfig);
272 
273  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
274  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
275  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
276  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
277  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
278 
279  mpta.addMetricData(smd);
280  mpta.addMetricData(imd);
281  mpta.addMetricData(fmd);
282  mpta.addMetricData(dmd);
283  mpta.addMetricData(umd);
284 
285  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
286  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
287  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
288  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
289  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
290 
291  mpta.stopMetrics();
292 
293  BOOST_REQUIRE_EQUAL(mpta.stopMetrics_calls, 1);
294  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
295  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
296  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
297  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
298  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
299 
300  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics END";
301 }
302 
303 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
fhicl::ParameterSet make_pset(std::string const &config_str)
Create a fhicl::ParameterSet from a string.
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.