1313#include " ../src/VariantVisitorAdd.h"
1414#include " ../src/VariantVisitorRate.h"
1515#include < chrono>
16- #include < thread>
1716#include < vector>
1817#include < iostream>
1918
@@ -28,100 +27,134 @@ namespace monitoring
2827namespace Test
2928{
3029
31- BOOST_AUTO_TEST_CASE (derivedRateInt)
30+ using namespace o2 ::monitoring;
31+
32+ struct ResultsKv {
33+ unsigned short int value;
34+ unsigned short int result;
35+ };
36+
37+ BOOST_AUTO_TEST_CASE (testDerivedRateForInts)
3238{
33- struct RateResults {
34- int value;
35- int rate;
36- };
37- std::vector<RateResults> results = {{10 , 0 }, {20 , 100 }, {30 , 100 }, {50 , 200 }, {60 , 100 }, {65 , 50 }, {70 , 50 }, {80 , 100 }, {90 , 100 }, {100 , 100 }};
38- o2::monitoring::DerivedMetrics derivedHandler;
39+ auto timestamp = std::chrono::system_clock::now ();
40+ std::vector<ResultsKv> valResKv = {{10 , 0 }, {20 , 10 }, {30 , 10 }, {50 , 20 }, {60 , 10 }, {65 , 5 }, {70 , 5 }, {80 , 10 }, {90 , 10 }};
41+ DerivedMetrics derivedHandler;
3942 std::string name (" metricInt" );
4043
41- for (auto const result : results ) {
44+ for (auto const valRes : valResKv ) {
4245 try {
43- std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) );
44- o2::monitoring::Metric metric (result .value , name );
46+ Metric metric (name, Metric::DefaultVerbosity, timestamp );
47+ metric. addValue (valRes .value , " value " );
4548 derivedHandler.process (metric, DerivedMetricMode::RATE);
4649 BOOST_CHECK_EQUAL (metric.getName (), " metricInt" );
4750 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_rate" );
48- BOOST_WARN_CLOSE (std::get<double >(metric.getValues ().back ().second ), result.rate , 1.0 );
51+ BOOST_CHECK_EQUAL (std::get<double >(metric.getValues ().back ().second ), valRes.result );
52+ timestamp += std::chrono::seconds (1 );
4953 } catch (MonitoringException& e) {
5054 BOOST_CHECK_EQUAL (e.what (), std::string (" Not enough values" ));
5155 }
5256 }
5357}
5458
55- BOOST_AUTO_TEST_CASE (derivedRateInt_newRun )
59+ BOOST_AUTO_TEST_CASE (testDerivedRateForIntsAndResetValue )
5660{
57- struct RateResults {
58- int value;
59- int rate;
60- };
61- std::vector<RateResults> results = {{10 , 0 }, {20 , 100 }, {30 , 100 }, {50 , 200 }, {0 , 0 }, {10 , 100 }, {20 , 100 }, {30 , 100 }, {50 , 200 }};
62- o2::monitoring::DerivedMetrics derivedHandler;
61+ std::vector<ResultsKv> valResKv = {{10 , 0 }, {20 , 10 }, {30 , 10 }, {50 , 20 }, {0 , 0 }, {10 , 10 }, {20 , 10 }, {30 , 10 }, {50 , 20 }};
62+ DerivedMetrics derivedHandler;
6363 std::string name (" metricInt" );
64+ auto timestamp = std::chrono::system_clock::now ();
6465
65- for (auto const result : results ) {
66+ for (auto const valRes : valResKv ) {
6667 try {
67- std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) );
68- o2::monitoring::Metric metric (result .value , name );
68+ Metric metric (name, Metric::DefaultVerbosity, timestamp );
69+ metric. addValue (valRes .value , " value " );
6970 derivedHandler.process (metric, DerivedMetricMode::RATE);
7071 BOOST_CHECK_EQUAL (metric.getName (), " metricInt" );
7172 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_rate" );
72- BOOST_WARN_CLOSE (std::get<double >(metric.getValues ().back ().second ), result.rate , 1.0 );
73+ BOOST_CHECK_EQUAL (std::get<double >(metric.getValues ().back ().second ), valRes.result );
74+ timestamp += std::chrono::seconds (1 );
7375 } catch (MonitoringException& e) {
7476 BOOST_CHECK_EQUAL (e.what (), std::string (" Not enough values" ));
7577 }
7678 }
7779}
7880
79- BOOST_AUTO_TEST_CASE (derivedRateDouble)
81+ struct ResultsKvDouble {
82+ double value;
83+ double result;
84+ };
85+
86+ BOOST_AUTO_TEST_CASE (testDerivedRateForDoubles)
8087{
81- struct RateResults {
82- double value;
83- double rate;
84- };
85- std::vector<RateResults> results = {{1.2 , 0 }, {11.2 , 100 }, {21.2 , 100 }, {41.2 , 200 }, {51.2 , 100 }, {61 , 98 }};
86- std::vector<RateResults> resultsTagged = {{0.5 , 0 }, {5.5 , 50 }, {10.5 , 50 }, {20.5 , 100 }, {40.5 , 200 }, {45.5 , 50 }};
88+ std::vector<ResultsKvDouble> valResKv = {{1.2 , 0 }, {11.2 , 10 }, {21.2 , 10 }, {41.2 , 20 }, {51.2 , 10 }, {61 , 9.8 }};
8789 o2::monitoring::DerivedMetrics derivedHandler;
8890 std::string name (" metricDouble" );
89- for (std::size_t i = 0 ; i < results.size (); i++) {
91+ auto timestamp = std::chrono::system_clock::now ();
92+
93+ for (auto const valRes : valResKv) {
9094 try {
91- std::this_thread::sleep_for (std::chrono::milliseconds (100 ));
92- o2::monitoring::Metric metric (results[i].value , name);
93- o2::monitoring::Metric metricTagged = Metric{resultsTagged[i].value , name}.addTag (o2::monitoring::tags::Key::Subsystem, o2::monitoring::tags::Value::Readout);
95+ Metric metric (name, Metric::DefaultVerbosity, timestamp);
96+ metric.addValue (valRes.value , " value" );
9497 derivedHandler.process (metric, DerivedMetricMode::RATE);
95- derivedHandler.process (metricTagged, DerivedMetricMode::RATE);
9698 BOOST_CHECK_EQUAL (metric.getName (), " metricDouble" );
97- BOOST_WARN_CLOSE (std::get<double >(metric.getValues ().back ().second ), results[i]. rate , 1.0 );
99+ BOOST_CHECK_CLOSE (std::get<double >(metric.getValues ().back ().second ), valRes. result , 0.1 );
98100 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_rate" );
99- BOOST_WARN_CLOSE (std::get<double >(metricTagged.getValues ().back ().second ), resultsTagged[i].rate , 1.0 );
100- BOOST_CHECK_EQUAL (metricTagged.getValues ().back ().first , " value_rate" );
101+ timestamp += std::chrono::seconds (1 );
101102 } catch (MonitoringException& e) {
102103 BOOST_CHECK_EQUAL (e.what (), std::string (" Not enough values" ));
103104 }
104105 }
105106}
106107
107- BOOST_AUTO_TEST_CASE (derivedRateUint64_t )
108+ BOOST_AUTO_TEST_CASE (testDerivedRateForDoublesWhenUsingTags )
108109{
109- struct RateResults {
110- uint64_t value;
111- uint64_t rate;
112- };
113- std::vector<RateResults> results = {{165535 , 0 }, {165545 , 100 }, {165555 , 100 }, {165575 , 200 }, {165585 , 100 }, {165590 , 50 }};
110+ std::vector<ResultsKvDouble> valResKv1 = {{1.2 , 0 }, {11.2 , 10 }, {21.2 , 10 }, {41.2 , 20 }, {51.2 , 10 }, {61 , 9.8 }};
111+ std::vector<ResultsKvDouble> valResKv2 = {{0.5 , 0 }, {5.5 , 5 }, {10.5 , 5 }, {20.5 , 10 }, {40.5 , 20 }, {45.5 , 5 }};
114112 o2::monitoring::DerivedMetrics derivedHandler;
113+ std::string name (" metricDouble" );
114+ auto timestamp = std::chrono::system_clock::now ();
115+
116+ for (std::size_t i = 0 ; i < valResKv1.size (); i++) {
117+ try {
118+ Metric metric1 (name, Metric::DefaultVerbosity, timestamp);
119+ metric1.addValue (valResKv1[i].value , " value" );
120+
121+ Metric metric2 (name, Metric::DefaultVerbosity, timestamp);
122+ metric2.addValue (valResKv2[i].value , " value" );
123+ metric2.addTag (o2::monitoring::tags::Key::Subsystem, o2::monitoring::tags::Value::Readout);
124+
125+ derivedHandler.process (metric1, DerivedMetricMode::RATE);
126+ derivedHandler.process (metric2, DerivedMetricMode::RATE);
127+
128+ BOOST_CHECK_CLOSE (std::get<double >(metric1.getValues ().back ().second ), valResKv1[i].result , 0.1 );
129+ BOOST_CHECK_CLOSE (std::get<double >(metric2.getValues ().back ().second ), valResKv2[i].result , 0.1 );
130+ timestamp += std::chrono::seconds (1 );
131+ } catch (MonitoringException& e) {
132+ BOOST_CHECK_EQUAL (e.what (), std::string (" Not enough values" ));
133+ }
134+ }
135+ }
136+
137+ struct ResultsKvUint64_t {
138+ uint64_t value;
139+ uint64_t result;
140+ };
141+
142+ BOOST_AUTO_TEST_CASE (testDerivedRateForUint64_t)
143+ {
144+ std::vector<ResultsKvUint64_t> valResKv = {{165535 , 0 }, {165545 , 10 }, {165555 , 10 }, {165575 , 20 }, {165585 , 10 }, {165590 , 5 }};
145+ DerivedMetrics derivedHandler;
115146 std::string name (" metricUint64_t" );
147+ auto timestamp = std::chrono::system_clock::now ();
116148
117- for (auto const result : results ) {
149+ for (auto const valRes : valResKv ) {
118150 try {
119- std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) );
120- o2::monitoring::Metric metric (result .value , name );
151+ Metric metric (name, Metric::DefaultVerbosity, timestamp );
152+ metric. addValue (valRes .value , " value " );
121153 derivedHandler.process (metric, DerivedMetricMode::RATE);
122154 BOOST_CHECK_EQUAL (metric.getName (), " metricUint64_t" );
123155 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_rate" );
124- BOOST_WARN_CLOSE (std::get<double >(metric.getValues ().back ().second ), result.rate , 1.0 );
156+ BOOST_CHECK_EQUAL (std::get<double >(metric.getValues ().back ().second ), valRes.result );
157+ timestamp += std::chrono::seconds (1 );
125158 } catch (MonitoringException& e) {
126159 BOOST_CHECK_EQUAL (e.what (), std::string (" Not enough values" ));
127160 }
@@ -149,51 +182,39 @@ BOOST_AUTO_TEST_CASE(divisionByZero)
149182
150183BOOST_AUTO_TEST_CASE (derivedIncrementInt)
151184{
152- struct IncrementResults {
153- int value;
154- int increment;
155- };
156- std::vector<IncrementResults> results = {{10 , 10 }, {20 , 30 }, {30 , 60 }, {50 , 110 }, {60 , 170 }, {65 , 235 }, {70 , 305 }, {80 , 385 }, {90 , 475 }, {100 , 575 }};
157- o2::monitoring::DerivedMetrics derivedHandler;
185+ std::vector<ResultsKv> results = {{10 , 10 }, {20 , 30 }, {30 , 60 }, {50 , 110 }, {60 , 170 }, {65 , 235 }, {70 , 305 }, {80 , 385 }, {90 , 475 }, {100 , 575 }};
186+ DerivedMetrics derivedHandler;
158187 std::string name (" metricInt" );
159188 for (auto const result : results) {
160- o2::monitoring:: Metric metric (result.value , name);
189+ Metric metric (result.value , name);
161190 derivedHandler.process (metric, DerivedMetricMode::INCREMENT);
162- BOOST_CHECK_EQUAL (std::get<int >(metric.getValues ().back ().second ), result.increment );
191+ BOOST_CHECK_EQUAL (std::get<int >(metric.getValues ().back ().second ), result.result );
163192 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_increment" );
164193 }
165194}
166195
167196BOOST_AUTO_TEST_CASE (derivedIncrementUint64_t)
168197{
169- struct IncrementResults {
170- uint64_t value;
171- uint64_t rate;
172- };
173- std::vector<IncrementResults> results = {{5 , 5 }, {165535 , 165540 }, {15 , 165555 }, {50 , 165605 }, {165590 , 331195 }};
174- o2::monitoring::DerivedMetrics derivedHandler;
198+ std::vector<ResultsKvUint64_t> results = {{5 , 5 }, {165535 , 165540 }, {15 , 165555 }, {50 , 165605 }, {165590 , 331195 }};
199+ DerivedMetrics derivedHandler;
175200 std::string name (" metricUint64_t" );
176201 for (auto const result : results) {
177- o2::monitoring:: Metric metric (result.value , name);
202+ Metric metric (result.value , name);
178203 derivedHandler.process (metric, DerivedMetricMode::INCREMENT);
179- BOOST_CHECK_EQUAL (std::get<uint64_t >(metric.getValues ().back ().second ), result.rate );
204+ BOOST_CHECK_EQUAL (std::get<uint64_t >(metric.getValues ().back ().second ), result.result );
180205 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_increment" );
181206 }
182207}
183208
184209BOOST_AUTO_TEST_CASE (derivedIncrementDouble)
185210{
186- struct IncrementResults {
187- double value;
188- double rate;
189- };
190- std::vector<IncrementResults> results = {{1.2 , 1.2 }, {11.2 , 12.4 }, {21.2 , 33.6 }, {41.2 , 74.8 }, {51.2 , 126 }, {61 , 187 }};
191- o2::monitoring::DerivedMetrics derivedHandler;
211+ std::vector<ResultsKvDouble> results = {{1.2 , 1.2 }, {11.2 , 12.4 }, {21.2 , 33.6 }, {41.2 , 74.8 }, {51.2 , 126 }, {61 , 187 }};
212+ DerivedMetrics derivedHandler;
192213 std::string name (" metricDouble" );
193214 for (auto const result : results) {
194- o2::monitoring:: Metric metric (result.value , name);
215+ Metric metric (result.value , name);
195216 derivedHandler.process (metric, DerivedMetricMode::INCREMENT);
196- BOOST_CHECK_CLOSE (std::get<double >(metric.getValues ().back ().second ), result.rate , 0.01 );
217+ BOOST_CHECK_CLOSE (std::get<double >(metric.getValues ().back ().second ), result.result , 0.01 );
197218 BOOST_CHECK_EQUAL (metric.getValues ().back ().first , " value_increment" );
198219 }
199220}
0 commit comments