artdaq_utilities  v1_05_02a
MetricPlugin_t.cc
1 #include "artdaq-utilities/Plugins/MetricPlugin.hh"
3 
4 #define BOOST_TEST_MODULES MetricPlugin_t
5 #include "cetlib/quiet_unit_test.hpp"
6 #include "cetlib_except/exception.h"
7 #include "fhiclcpp/make_ParameterSet.h"
8 
9 #include "trace.h"
10 
11 namespace artdaqtest {
16 {
17 public:
22  explicit MetricPluginTestAdapter(fhicl::ParameterSet ps)
23  : artdaq::MetricPlugin(ps, "MetricPlugin_t")
31  {}
32 
36  virtual void sendMetric_(const std::string&, const std::string&, const std::string&) override { sendMetric_string_calls++; }
40  virtual void sendMetric_(const std::string&, const int&, const std::string&) override { sendMetric_int_calls++; }
44  virtual void sendMetric_(const std::string&, const double&, const std::string&) override { sendMetric_double_calls++; }
48  virtual void sendMetric_(const std::string&, const float&, const std::string&) override { sendMetric_float_calls++; }
52  virtual void sendMetric_(const std::string&, const long unsigned int&, const std::string&) override { sendMetric_unsigned_calls++; }
53 
57  virtual void startMetrics_() override { startMetrics_calls++; }
61  virtual 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;
107  fhicl::make_ParameterSet(testConfig, pset);
109  BOOST_REQUIRE_EQUAL(mpta.get_pset().to_string(), pset.to_string());
110  BOOST_REQUIRE_EQUAL(mpta.get_accumulationTime_(), 0.0);
111  BOOST_REQUIRE_EQUAL(mpta.get_level_mask_()[8], true);
112  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
113  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor END";
114 }
115 
116 BOOST_AUTO_TEST_CASE(IsLevelEnabled)
117 {
118  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled BEGIN";
119  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
120  fhicl::ParameterSet pset;
121  fhicl::make_ParameterSet(testConfig, pset);
123 
124  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(0), true);
125  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(1), true);
126  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(2), true);
127  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(3), true);
128  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(4), true);
129  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(5), false);
130  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(6), false);
131  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(7), true);
132  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
133  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(9), true);
134  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(10), false);
135  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(11), true);
136  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(12), false);
137  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(13), true);
138  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(14), true);
139  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(15), true);
140  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(16), false);
141  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(17), true);
142  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(18), false);
143  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(19), true);
144  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(20), true);
145  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(21), true);
146  BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(22), false);
147 
148  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled END";
149 }
150 
151 BOOST_AUTO_TEST_CASE(LibraryName)
152 {
153  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName BEGIN";
154  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
155  fhicl::ParameterSet pset;
156  fhicl::make_ParameterSet(testConfig, pset);
158 
159  BOOST_REQUIRE_EQUAL(mpta.getLibName(), "ERROR");
160  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName END";
161 }
162 
163 BOOST_AUTO_TEST_CASE(AddMetricData)
164 {
165  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData BEGIN";
166  std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
167  fhicl::ParameterSet pset;
168  fhicl::make_ParameterSet(testConfig, pset);
170 
171  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
172  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
173  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
174  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
175  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
176 
177  mpta.addMetricData(smd);
178  mpta.addMetricData(imd);
179  mpta.addMetricData(fmd);
180  mpta.addMetricData(dmd);
181  mpta.addMetricData(umd);
182 
183  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
184  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
185  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
186  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
187  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
188 
189  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData END";
190 }
191 
192 BOOST_AUTO_TEST_CASE(SendMetrics)
193 {
194  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics BEGIN";
195  std::string testConfig = "reporting_interval: 0.01 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
196  fhicl::ParameterSet pset;
197  fhicl::make_ParameterSet(testConfig, pset);
199 
200  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
201  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
202  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
203  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
204  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
205 
206  mpta.addMetricData(smd);
207  mpta.addMetricData(imd);
208  mpta.addMetricData(fmd);
209  mpta.addMetricData(dmd);
210  mpta.addMetricData(umd);
211 
212  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
213  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
214  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
215  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
216  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
217 
218  mpta.sendMetrics();
219 
220  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
221  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
222  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
223  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
224  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
225 
226  mpta.addMetricData(smd);
227  mpta.addMetricData(imd);
228  mpta.addMetricData(fmd);
229  mpta.addMetricData(dmd);
230  mpta.addMetricData(umd);
231 
232  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
233  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
234  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
235  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
236  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
237 
238  mpta.sendMetrics();
239 
240  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
241  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
242  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
243  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
244  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
245 
246  usleep(200000);
247 
248  mpta.sendMetrics();
249 
250  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
251  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
252  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
253  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
254  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
255 
256  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics END";
257 }
258 
259 BOOST_AUTO_TEST_CASE(StartMetrics)
260 {
261  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics BEGIN";
262  std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
263  fhicl::ParameterSet pset;
264  fhicl::make_ParameterSet(testConfig, pset);
266 
267  mpta.startMetrics();
268  BOOST_REQUIRE_EQUAL(mpta.startMetrics_calls, 1);
269  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics END";
270 }
271 
272 BOOST_AUTO_TEST_CASE(StopMetrics)
273 {
274  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics BEGIN";
275  std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
276  fhicl::ParameterSet pset;
277  fhicl::make_ParameterSet(testConfig, pset);
279 
280  auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
281  auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
282  auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
283  auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
284  auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
285 
286  mpta.addMetricData(smd);
287  mpta.addMetricData(imd);
288  mpta.addMetricData(fmd);
289  mpta.addMetricData(dmd);
290  mpta.addMetricData(umd);
291 
292  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
293  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
294  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
295  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
296  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
297 
298  mpta.stopMetrics();
299 
300  BOOST_REQUIRE_EQUAL(mpta.stopMetrics_calls, 1);
301  BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
302  BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
303  BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
304  BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
305  BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
306 
307  TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics END";
308 }
309 
310 BOOST_AUTO_TEST_SUITE_END()
virtual void sendMetric_(const std::string &, const float &, const std::string &) 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:37
virtual void sendMetric_(const std::string &, const std::string &, const std::string &) override
Send a String metric, record the call and discard the metric&#39;s data.
virtual void sendMetric_(const std::string &, const int &, const std::string &) override
Send an int metric, record the call and discard the metric&#39;s data.
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
virtual void sendMetric_(const std::string &, const long unsigned int &, const std::string &) override
Send an unsigned metric, record the call and discard the metric&#39;s data.
fhicl::ParameterSet get_pset()
Get the ParameterSet used to configure the plugin
virtual void startMetrics_() override
Record that a startMetrics call was received.
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.
MetricPlugin(fhicl::ParameterSet const &ps, std::string const &app_name)
MetricPlugin Constructor.
Definition: MetricPlugin.hh:69
size_t startMetrics_calls
The number of startMetrics_ calls received.
Report only the last value recorded. Useful for event counters, run numbers, etc. ...
virtual void sendMetric_(const std::string &, const double &, const std::string &) override
Send a double metric, record the call and discard the metric&#39;s data.
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
virtual void stopMetrics_() override
Record that a stopMetrics call was received.
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