Project
Loading...
Searching...
No Matches
test_DeviceMetricsInfo.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14#include <catch_amalgamated.hpp>
15#include <catch_amalgamated.hpp>
16#include <regex>
17#include <string_view>
18
19TEST_CASE("TestIndexedMetrics")
20{
21 using namespace o2::framework;
22 std::string metricString;
24 bool result;
26 metricString = "[METRIC] array/1-10,0 12 1789372894 hostname=test.cern.chbar";
27 result = DeviceMetricsHelper::parseMetric(metricString, match);
28 REQUIRE(result);
29 REQUIRE(strncmp(match.beginKey, "array", 4) == 0);
30 REQUIRE(match.firstIndex == 1);
31 REQUIRE(match.lastIndex == 10);
32 REQUIRE(match.timestamp == 1789372894);
33 REQUIRE(match.type == MetricType::Int);
34 REQUIRE(match.intValue == 12);
35}
36
37TEST_CASE("TestEnums")
38{
39 using namespace o2::framework;
40 {
41 std::string metricString;
43 bool result;
45 metricString = "[METRIC] data_relayer/1,0 1 1789372894 hostname=test.cern.chbar";
46 result = DeviceMetricsHelper::parseMetric(metricString, match);
47 REQUIRE(result);
48 REQUIRE(strncmp(match.beginKey, "data_relayer/1", strlen("data_relayer/1")) == 0);
49 REQUIRE(match.endKey - match.beginKey == strlen("data_relayer/1"));
50 REQUIRE(match.timestamp == 1789372894);
51 REQUIRE(match.type == MetricType::Enum);
52 REQUIRE(match.intValue == 1);
53 REQUIRE(match.uint64Value == 1);
54 }
55
56 {
57 std::string metricString;
59 bool result;
61 metricString = "[METRIC] data_relayer/h,0 3 1662377068602 hostname=stillwater.dyndns.cern.ch,dataprocessor_id=D,dataprocessor_name=D,dpl_instance=0";
62 result = DeviceMetricsHelper::parseMetric(metricString, match);
63 REQUIRE(result);
64 REQUIRE(strncmp(match.beginKey, "data_relayer/h", strlen("data_relayer/h")) == 0);
65 REQUIRE(match.endKey - match.beginKey == strlen("data_relayer/h"));
66 REQUIRE(match.timestamp == 1662377068602);
67 REQUIRE(match.type == MetricType::Int);
68 REQUIRE(match.intValue == 3);
69 REQUIRE(match.uint64Value == 3);
70 }
71
72 {
73 std::string metricString;
75 bool result;
77 metricString = "[14:00:44][INFO] metric-feedback[0]: in: 0 (0 MB) out: 0 (0";
78 result = DeviceMetricsHelper::parseMetric(metricString, match);
79 REQUIRE(result == false);
80 }
81}
82
83TEST_CASE("TestDeviceMetricsInfo")
84{
85 using namespace o2::framework;
86 std::string metricString;
88 bool result;
90
91 // Parse a simple metric
92 metricString = "foo[METRIC] bkey,0 12 1789372894 hostname=test.cern.chbar";
93 std::string_view metric{metricString.data() + 3, metricString.size() - 6};
94 REQUIRE(metric == std::string_view("[METRIC] bkey,0 12 1789372894 hostname=test.cern.ch"));
95 result = DeviceMetricsHelper::parseMetric(metric, match);
96 REQUIRE(result == true);
97 REQUIRE(strncmp(match.beginKey, "bkey", 4) == 0);
98 REQUIRE(match.timestamp == 1789372894);
99 REQUIRE(match.type == MetricType::Int);
100 REQUIRE(match.intValue == 12);
101 // Add the first metric to the store
102 result = DeviceMetricsHelper::processMetric(match, info);
103 REQUIRE(result == true);
104 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 1);
105 REQUIRE(info.metricLabels.size() == 1);
106 REQUIRE(strncmp(info.metricLabels[0].label, "bkey", 4) == 0);
107 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 0);
108 REQUIRE(info.metricPrefixes.size() == 1);
109 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
110 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 1);
111 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 0);
112 REQUIRE(info.intMetrics.size() == 1);
113 REQUIRE(info.floatMetrics.size() == 0);
114 REQUIRE(info.intTimestamps.size() == 1);
115 REQUIRE(info.metrics.size() == 1);
116 REQUIRE(info.metrics[0].type == MetricType::Int);
117 REQUIRE(info.metrics[0].storeIdx == 0);
118 REQUIRE(info.metrics[0].pos == 1);
119
120 REQUIRE(info.intTimestamps[0][0] == 1789372894);
121 REQUIRE(info.intMetrics[0][0] == 12);
122 REQUIRE(info.intMetrics[0][1] == 0);
123
124 // Parse a second metric with the same key
125 metric = "[METRIC] bkey,0 13 1789372894 hostname=test.cern.ch";
126 result = DeviceMetricsHelper::parseMetric(metric, match);
127 REQUIRE(result == true);
128 REQUIRE(match.intValue == 13);
129 result = DeviceMetricsHelper::processMetric(match, info);
130 REQUIRE(result == true);
131 REQUIRE(info.metricLabels.size() == 1);
132 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 1);
133 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 0);
134 REQUIRE(info.metricPrefixes.size() == 1);
135 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
136 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 1);
137 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 0);
138 REQUIRE(info.intMetrics.size() == 1);
139 REQUIRE(info.intMetrics[0][0] == 12);
140 REQUIRE(info.intMetrics[0][1] == 13);
141 REQUIRE(info.intMetrics[0][2] == 0);
142 REQUIRE(info.metrics[0].pos == 2);
143
144 // Parse a third metric with a different key
145 metric = "[METRIC] akey,0 14 1789372894 hostname=test.cern.ch";
146 result = DeviceMetricsHelper::parseMetric(metric, match);
147 REQUIRE(result == true);
148 result = DeviceMetricsHelper::processMetric(match, info);
149 REQUIRE(result == true);
150 REQUIRE(info.metricLabels.size() == 2);
151 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 2);
152 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 1);
153 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[1].index == 0);
154 REQUIRE(info.metricPrefixes.size() == 2);
155 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
156 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
157 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 2);
158 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
159 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 0);
160 REQUIRE(info.intMetrics.size() == 2);
161 REQUIRE(info.intMetrics[0][0] == 12);
162 REQUIRE(info.intMetrics[0][1] == 13);
163 REQUIRE(info.intMetrics[0][2] == 0);
164 REQUIRE(info.intMetrics[1][0] == 14);
165 REQUIRE(info.metrics.size() == 2);
166 REQUIRE(info.metrics[1].type == MetricType::Int);
167 REQUIRE(info.metrics[1].storeIdx == 1);
168 REQUIRE(info.metrics[1].pos == 1);
169
170 // Parse a fourth metric, now a float one
171 metric = "[METRIC] key3,2 16.0 1789372894 hostname=test.cern.ch";
172 result = DeviceMetricsHelper::parseMetric(metric, match);
173 REQUIRE(result == true);
174 result = DeviceMetricsHelper::processMetric(match, info);
175 REQUIRE(result == true);
176 REQUIRE(info.metricLabels.size() == 3);
177 REQUIRE(info.metricPrefixes.size() == 3);
178 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 3);
179 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 1);
180 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[1].index == 0);
181 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[2].index == 2);
182 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
183 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
184 REQUIRE(strcmp(info.metricPrefixes[2].prefix, "k") == 0);
185 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 3);
186 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
187 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 0);
188 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 2);
189 REQUIRE(info.intMetrics.size() == 2);
190 REQUIRE(info.floatMetrics.size() == 1);
191 REQUIRE(info.metrics.size() == 3);
192 REQUIRE(info.floatMetrics[0][0] == 16.0);
193 REQUIRE(info.floatMetrics[0][1] == 0);
194 REQUIRE(info.metrics[2].type == MetricType::Float);
195 REQUIRE(info.metrics[2].storeIdx == 0);
196 REQUIRE(info.metrics[2].pos == 1);
197
198 // Parse a fifth metric, same float one
199 metric = "[METRIC] key3,2 17.0 1789372895 hostname=test.cern.ch";
200 result = DeviceMetricsHelper::parseMetric(metric, match);
201 REQUIRE(result == true);
202 result = DeviceMetricsHelper::processMetric(match, info);
203 REQUIRE(result == true);
204 REQUIRE(info.metricLabels.size() == 3);
205 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 3);
206 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 1);
207 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[1].index == 0);
208 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[2].index == 2);
209 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 3);
210 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
211 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 0);
212 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 2);
213 REQUIRE(info.intMetrics.size() == 2);
214 REQUIRE(info.floatMetrics.size() == 1);
215 REQUIRE(info.metrics.size() == 3);
216 REQUIRE(info.floatMetrics[0][0] == 16.0);
217 REQUIRE(info.floatMetrics[0][1] == 17.0);
218 REQUIRE(info.floatMetrics[0][2] == 0);
219 REQUIRE(info.metrics[2].type == MetricType::Float);
220 REQUIRE(info.metrics[2].storeIdx == 0);
221 REQUIRE(info.metrics[2].pos == 2);
222
223 REQUIRE(DeviceMetricsHelper::metricIdxByName("akey", info) == 1);
224 REQUIRE(DeviceMetricsHelper::metricIdxByName("bkey", info) == 0);
225 REQUIRE(DeviceMetricsHelper::metricIdxByName("key3", info) == 2);
226 REQUIRE(DeviceMetricsHelper::metricIdxByName("foo", info) == 3);
227
228 // Parse a string metric
229 metric = "[METRIC] key4,1 some_string 1789372895 hostname=test.cern.ch";
230 result = DeviceMetricsHelper::parseMetric(metric, match);
231 REQUIRE(result == true);
232 result = DeviceMetricsHelper::processMetric(match, info);
233 REQUIRE(result == true);
234 REQUIRE(info.metricLabels.size() == 4);
235 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 4);
236 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 1);
237 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[1].index == 0);
238 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[2].index == 2);
239 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[3].index == 3);
240 REQUIRE(info.metricPrefixes.size() == 3);
241 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
242 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
243 REQUIRE(strcmp(info.metricPrefixes[2].prefix, "k") == 0);
244 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 3);
245 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
246 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 0);
247 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 2);
248 REQUIRE(info.metrics.size() == 4);
249 REQUIRE(info.stringMetrics.size() == 1);
250 REQUIRE(info.metrics[3].type == MetricType::String);
251 REQUIRE(info.metrics[3].storeIdx == 0);
252 REQUIRE(info.metrics[3].pos == 1);
253
254 // Parse a string metric with a file description in it
255 memset(&match, 0, sizeof(match));
256 metric = "[METRIC] alien-file-name,1 alien:///alice/data/2015/LHC15o/000244918/pass5_lowIR/PWGZZ/Run3_Conversion/96_20201013-1346_child_1/0028/AO2D.root:/,631838549,ALICE::CERN::EOS 1789372895 hostname=test.cern.ch";
257 result = DeviceMetricsHelper::parseMetric(metric, match);
258 REQUIRE(result == true);
259 result = DeviceMetricsHelper::processMetric(match, info);
260 REQUIRE(result == true);
261 REQUIRE(info.metricLabels.size() == 5);
262 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 5);
263 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 1);
264 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[1].index == 4);
265 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[2].index == 0);
266 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[3].index == 2);
267 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[4].index == 3);
268 REQUIRE(info.metricPrefixes.size() == 3);
269 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
270 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
271 REQUIRE(strcmp(info.metricPrefixes[2].prefix, "k") == 0);
272 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 3);
273 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
274 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 0);
275 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 2);
276 REQUIRE(info.metrics.size() == 5);
277 REQUIRE(info.stringMetrics.size() == 2);
278 REQUIRE(info.metrics[4].type == MetricType::String);
279 REQUIRE(info.metrics[4].storeIdx == 1);
280 REQUIRE(info.metrics[4].pos == 1);
281 REQUIRE(std::string(info.stringMetrics[1][0].data) == std::string("alien:///alice/data/2015/LHC15o/000244918/pass5_lowIR/PWGZZ/Run3_Conversion/96_20201013-1346_child_1/0028/AO2D.root:/,631838549,ALICE::CERN::EOS"));
282
283 // Parse a vector metric
284 memset(&match, 0, sizeof(match));
285 metric = "[METRIC] array/w,0 2 1789372895 hostname=test.cern.ch";
286 result = DeviceMetricsHelper::parseMetric(metric, match);
287 REQUIRE(result == true);
288 result = DeviceMetricsHelper::processMetric(match, info);
289 REQUIRE(result == true);
290 REQUIRE(info.metricLabels.size() == 6);
291 REQUIRE(info.metricPrefixes.size() == 4);
292 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
293 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
294 REQUIRE(strcmp(info.metricPrefixes[2].prefix, "k") == 0);
295 REQUIRE(strcmp(info.metricPrefixes[3].prefix, "array") == 0);
296 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 4);
297 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
298 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 3);
299 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 0);
300 REQUIRE(info.metricLabelsPrefixesSortedIdx[3].index == 2);
301 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 6);
302 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[0].index == 1);
303 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[1].index == 4);
304 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[2].index == 5);
305 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[3].index == 0);
306 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[4].index == 2);
307 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[5].index == 3);
308 REQUIRE(info.metrics.size() == 6);
309 REQUIRE(info.intMetrics.size() == 3);
310
311 memset(&match, 0, sizeof(match));
312 metric = "[METRIC] array/h,0 3 1789372895 hostname=test.cern.ch";
313 result = DeviceMetricsHelper::parseMetric(metric, match);
314 REQUIRE(result == true);
315 result = DeviceMetricsHelper::processMetric(match, info);
316 REQUIRE(result == true);
317 REQUIRE(info.metricLabels.size() == 7);
318 REQUIRE(info.metricPrefixes.size() == 4);
319 REQUIRE(info.metricLabelsAlphabeticallySortedIdx.size() == 7);
320 REQUIRE(info.metrics.size() == 7);
321 REQUIRE(info.intMetrics.size() == 4);
322
323 memset(&match, 0, sizeof(match));
324 metric = "[METRIC] array/0,0 0 1789372895 hostname=test.cern.ch";
325 result = DeviceMetricsHelper::parseMetric(metric, match);
326 REQUIRE(result == true);
327 result = DeviceMetricsHelper::processMetric(match, info);
328 REQUIRE(result == true);
329 REQUIRE(info.metricLabels.size() == 8);
330 REQUIRE(info.metricPrefixes.size() == 4);
331
332 memset(&match, 0, sizeof(match));
333 metric = "[METRIC] array/1,0 1 1789372895 hostname=test.cern.ch";
334 result = DeviceMetricsHelper::parseMetric(metric, match);
335 REQUIRE(result == true);
336 result = DeviceMetricsHelper::processMetric(match, info);
337 REQUIRE(result == true);
338 REQUIRE(info.metricLabels.size() == 9);
339 REQUIRE(info.metricPrefixes.size() == 4);
340
341 memset(&match, 0, sizeof(match));
342 metric = "[METRIC] array/2,0 2 1789372895 hostname=test.cern.ch";
343 result = DeviceMetricsHelper::parseMetric(metric, match);
344 REQUIRE(result == true);
345 result = DeviceMetricsHelper::processMetric(match, info);
346 REQUIRE(result == true);
347 REQUIRE(info.metricLabels.size() == 10);
348 REQUIRE(info.metricPrefixes.size() == 4);
349
350 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
351 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
352 REQUIRE(strcmp(info.metricPrefixes[2].prefix, "k") == 0);
353 REQUIRE(strcmp(info.metricPrefixes[3].prefix, "array") == 0);
354 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 4);
355 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
356 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 3);
357 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 0);
358 REQUIRE(info.metricLabelsPrefixesSortedIdx[3].index == 2);
359
360 REQUIRE(info.metricPrefixes[0].begin == 7);
361 REQUIRE(info.metricPrefixes[0].end == 8);
362 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[7].index == 0);
363 REQUIRE(info.metricLabels[info.metricLabelsAlphabeticallySortedIdx[7].index].size == 4);
364 REQUIRE(std::string_view(info.metricLabels[info.metricLabelsAlphabeticallySortedIdx[7].index].label, 4) == std::string_view("bkey"));
365 REQUIRE(info.metricPrefixes[1].begin == 0);
366 REQUIRE(info.metricPrefixes[1].end == 2);
367 REQUIRE(info.metricPrefixes[2].begin == 8);
368 REQUIRE(info.metricPrefixes[2].end == 10);
369 REQUIRE(info.metricPrefixes[3].begin == 2);
370 REQUIRE(info.metricPrefixes[3].end == 7);
371
372 memset(&match, 0, sizeof(match));
373 metric = "[METRIC] array/2,0 2 1789372895 hostname=test.cern.ch";
374 result = DeviceMetricsHelper::parseMetric(metric, match);
375 REQUIRE(result == true);
376 result = DeviceMetricsHelper::processMetric(match, info);
377 REQUIRE(result == true);
378 REQUIRE(info.metricLabels.size() == 10);
379 REQUIRE(info.metricPrefixes.size() == 4);
380
381 auto array3 = DeviceMetricsHelper::createNumericMetric<int>(info, "array/3");
382
383 REQUIRE(info.metricLabels.size() == 11);
384 REQUIRE(info.metricPrefixes.size() == 4);
385
386 REQUIRE(strcmp(info.metricPrefixes[0].prefix, "b") == 0);
387 REQUIRE(strcmp(info.metricPrefixes[1].prefix, "a") == 0);
388 REQUIRE(strcmp(info.metricPrefixes[2].prefix, "k") == 0);
389 REQUIRE(strcmp(info.metricPrefixes[3].prefix, "array") == 0);
390 REQUIRE(info.metricLabelsPrefixesSortedIdx.size() == 4);
391 REQUIRE(info.metricLabelsPrefixesSortedIdx[0].index == 1);
392 REQUIRE(info.metricLabelsPrefixesSortedIdx[1].index == 3);
393 REQUIRE(info.metricLabelsPrefixesSortedIdx[2].index == 0);
394 REQUIRE(info.metricLabelsPrefixesSortedIdx[3].index == 2);
395
396 REQUIRE(info.metricPrefixes[0].begin == 8);
397 REQUIRE(info.metricPrefixes[0].end == 9);
398 REQUIRE(info.metricLabelsAlphabeticallySortedIdx[8].index == 0);
399 REQUIRE(info.metricLabels[info.metricLabelsAlphabeticallySortedIdx[8].index].size == 4);
400 REQUIRE(std::string_view(info.metricLabels[info.metricLabelsAlphabeticallySortedIdx[8].index].label, 4) == std::string_view("bkey"));
401 REQUIRE(info.metricPrefixes[1].begin == 0);
402 REQUIRE(info.metricPrefixes[1].end == 2);
403 REQUIRE(info.metricPrefixes[2].begin == 9);
404 REQUIRE(info.metricPrefixes[2].end == 11);
405 REQUIRE(info.metricPrefixes[3].begin == 2);
406 REQUIRE(info.metricPrefixes[3].end == 8);
407
408 memset(&match, 0, sizeof(match));
409 metric = "[METRIC] data_relayer/w,0 1 1789372895 hostname=test.cern.ch";
410 result = DeviceMetricsHelper::parseMetric(metric, match);
411 REQUIRE(result);
412 REQUIRE(match.type == MetricType::Int);
413
414 memset(&match, 0, sizeof(match));
415 metric = "[METRIC] data_relayer/h,0 1 1789372895 hostname=test.cern.ch";
416 result = DeviceMetricsHelper::parseMetric(metric, match);
417 REQUIRE(result);
418 REQUIRE(match.type == MetricType::Int);
419
420 memset(&match, 0, sizeof(match));
421 metric = "[METRIC] data_relayer/1,0 8 1789372895 hostname=test.cern.ch";
422 result = DeviceMetricsHelper::parseMetric(metric, match);
423 REQUIRE(result);
424 REQUIRE(match.type == MetricType::Enum);
425}
426
427TEST_CASE("TestDeviceMetricsInfo2")
428{
429 using namespace o2::framework;
431 auto bkey = DeviceMetricsHelper::createNumericMetric<int>(info, "bkey");
432 REQUIRE(info.metricLabels.size() == 1);
433 REQUIRE(info.metricPrefixes.size() == 1);
434 auto akey = DeviceMetricsHelper::createNumericMetric<float>(info, "akey");
435 REQUIRE(info.metricLabels.size() == 2);
436 REQUIRE(info.metricPrefixes.size() == 2);
437 auto ckey = DeviceMetricsHelper::createNumericMetric<uint64_t>(info, "ckey");
438 REQUIRE(info.metricLabels.size() == 3);
439 REQUIRE(info.metricPrefixes.size() == 3);
440 REQUIRE(DeviceMetricsHelper::metricIdxByName("akey", info) == 1);
441 REQUIRE(DeviceMetricsHelper::metricIdxByName("bkey", info) == 0);
442 REQUIRE(DeviceMetricsHelper::metricIdxByName("ckey", info) == 2);
443 REQUIRE(info.changed.size() == 3);
444 REQUIRE(info.changed.at(0) == false);
445 size_t t = 1000;
446 bkey(info, 0, t++);
447 bkey(info, 1, t++);
448 bkey(info, 2, t++);
449 bkey(info, 3, t++);
450 bkey(info, 4, t++);
451 bkey(info, 5, t++);
452 REQUIRE(info.metrics[0].filledMetrics == 6);
453 REQUIRE(info.metrics[1].filledMetrics == 0);
454 REQUIRE(info.metrics[2].filledMetrics == 0);
455 REQUIRE(info.changed[0] == true);
456 REQUIRE(info.intMetrics[0][0] == 0);
457 REQUIRE(info.intMetrics[0][1] == 1);
458 REQUIRE(info.intMetrics[0][2] == 2);
459 REQUIRE(info.intMetrics[0][3] == 3);
460 REQUIRE(info.intMetrics[0][4] == 4);
461 REQUIRE(info.intMetrics[0][5] == 5);
462 REQUIRE(info.changed[1] == false);
463 info.changed[0] = 0;
464 bkey(info, 5., t++);
465 REQUIRE(info.changed[0] == true);
466 REQUIRE(info.changed[1] == false);
467 akey(info, 1., t++);
468 akey(info, 2., t++);
469 akey(info, 3., t++);
470 akey(info, 4., t++);
471 REQUIRE(info.changed[0] == true);
472 REQUIRE(info.changed[1] == true);
473 REQUIRE(info.changed[2] == false);
474 REQUIRE(info.metrics[0].filledMetrics == 7);
475 REQUIRE(info.metrics[1].filledMetrics == 4);
476 REQUIRE(info.metrics[2].filledMetrics == 0);
477 REQUIRE(info.intMetrics[0][6] == 5);
478 REQUIRE(info.floatMetrics[0][0] == 1.);
479 REQUIRE(info.floatMetrics[0][1] == 2.);
480 REQUIRE(info.floatMetrics[0][2] == 3.);
481 REQUIRE(info.floatMetrics[0][3] == 4.);
482 REQUIRE(info.intTimestamps.size() == 1);
483 REQUIRE(info.floatTimestamps.size() == 1);
484 REQUIRE(info.uint64Timestamps.size() == 1);
485 REQUIRE(info.intTimestamps[0][0] == 1000);
486 REQUIRE(info.intTimestamps[0][1] == 1001);
487 REQUIRE(info.intTimestamps[0][2] == 1002);
488 REQUIRE(info.intTimestamps[0][3] == 1003);
489 REQUIRE(info.intTimestamps[0][4] == 1004);
490 REQUIRE(info.intTimestamps[0][5] == 1005);
491 REQUIRE(info.floatTimestamps[0][0] == 1007);
492 REQUIRE(info.floatTimestamps[0][1] == 1008);
493 REQUIRE(info.floatTimestamps[0][2] == 1009);
494 REQUIRE(info.floatTimestamps[0][3] == 1010);
495 REQUIRE(info.changed.size() == 3);
496 for (int i = 0; i < 1026; ++i) {
497 ckey(info, i, t++);
498 }
499 REQUIRE(info.uint64Metrics[0][0] == 1024);
500 REQUIRE(info.uint64Metrics[0][1] == 1025);
501 REQUIRE(info.uint64Metrics[0][2] == 2);
502 REQUIRE(info.metrics[0].filledMetrics == 7);
503 REQUIRE(info.metrics[1].filledMetrics == 4);
504 REQUIRE(info.metrics[2].filledMetrics == 1026);
505}
506
507TEST_CASE("TestHelpers")
508{
509 using namespace o2::framework;
511 auto metric1 = DeviceMetricsHelper::bookMetricInfo(info, "bkey", MetricType::Int);
512 auto metric2 = DeviceMetricsHelper::bookMetricInfo(info, "bkey", MetricType::Int);
513 auto metric3 = DeviceMetricsHelper::bookMetricInfo(info, "akey", MetricType::Int);
514 REQUIRE(metric1 == 0);
515 REQUIRE(metric2 == 0);
516 REQUIRE(metric3 == 1);
517}
int32_t i
bool match(const std::vector< std::string > &queries, const char *pattern)
Definition dcs-ccdb.cxx:229
GLuint64EXT * result
Definition glcorearb.h:5662
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
std::vector< MetricsStorage< float > > floatMetrics
std::vector< MetricsStorage< StringMetric > > stringMetrics
std::vector< MetricsStorage< uint64_t > > uint64Metrics
std::vector< MetricsStorage< int > > intMetrics
std::vector< MetricPrefix > metricPrefixes
std::vector< std::array< size_t, metricStorageSize< float >()> > floatTimestamps
std::vector< MetricLabel > metricLabels
std::vector< std::array< size_t, metricStorageSize< uint64_t >()> > uint64Timestamps
std::vector< MetricPrefixIndex > metricLabelsPrefixesSortedIdx
std::vector< MetricLabelIndex > metricLabelsAlphabeticallySortedIdx
std::vector< MetricInfo > metrics
std::vector< std::array< size_t, metricStorageSize< int >()> > intTimestamps
Temporary struct to hold a metric after it has been parsed.
TEST_CASE("TestIndexedMetrics")