$treeview $search $mathjax $extrastylesheet
artdaq
v3_04_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #include "artdaq-utilities/Plugins/MetricManager.hh" 00002 #include "artdaq-core/Utilities/TimeUtils.hh" 00003 #include "artdaq-core/Utilities/configureMessageFacility.hh" 00004 00005 #define BOOST_TEST_MODULES MetricManager_t 00006 #include "cetlib/quiet_unit_test.hpp" 00007 #include "cetlib_except/exception.h" 00008 #include "fhiclcpp/make_ParameterSet.h" 00009 00010 #include "tracemf.h" 00011 00012 BOOST_AUTO_TEST_SUITE(MetricManager_test) 00013 00014 BOOST_AUTO_TEST_CASE(Construct) 00015 { 00016 artdaq::configureMessageFacility("MetricManager_t", true, true); 00017 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST Construct" << TLOG_ENDL; 00018 artdaq::MetricManager mm; 00019 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00020 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00021 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00022 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00023 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00024 TLOG_DEBUG("MetricManager_t") << "END TEST Construct" << TLOG_ENDL; 00025 } 00026 00027 BOOST_AUTO_TEST_CASE(Initialize) 00028 { 00029 00030 artdaq::configureMessageFacility("MetricManager_t", true, true); 00031 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST Initialize" << TLOG_ENDL; 00032 artdaq::MetricManager mm; 00033 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00034 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00035 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00036 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00037 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00038 00039 std::string testConfig = "msgFac: { level: 5 metricPluginType: msgFacility reporting_interval: 1.0}"; 00040 fhicl::ParameterSet pset; 00041 fhicl::make_ParameterSet(testConfig, pset); 00042 00043 mm.initialize(pset, "MetricManager_t"); 00044 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00045 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00046 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00047 00048 00049 mm.do_start(); 00050 BOOST_REQUIRE_EQUAL(mm.Running(), true); 00051 BOOST_REQUIRE_EQUAL(mm.Active(), true); 00052 TLOG_DEBUG("MetricManager_t") << "END TEST Initialize" << TLOG_ENDL; 00053 } 00054 00055 BOOST_AUTO_TEST_CASE(Initialize_WithError) 00056 { 00057 00058 artdaq::configureMessageFacility("MetricManager_t", true, true); 00059 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST Initialize_WithError" << TLOG_ENDL; 00060 artdaq::MetricManager mm; 00061 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00062 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00063 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00064 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00065 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00066 00067 std::string testConfig = "err: { level: 5 metricPluginType: nonExistentPluginType reporting_interval: 1.0}"; 00068 fhicl::ParameterSet pset; 00069 fhicl::make_ParameterSet(testConfig, pset); 00070 00071 mm.initialize(pset, "MetricManager_t"); 00072 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00073 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00074 00075 mm.do_start(); 00076 BOOST_REQUIRE_EQUAL(mm.Running(), true); 00077 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00078 TLOG_DEBUG("MetricManager_t") << "END TEST Initialize_WithError" << TLOG_ENDL; 00079 } 00080 00081 BOOST_AUTO_TEST_CASE(Shutdown) 00082 { 00083 artdaq::configureMessageFacility("MetricManager_t", true, true); 00084 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST Shutdown" << TLOG_ENDL; 00085 artdaq::MetricManager mm; 00086 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00087 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00088 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00089 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00090 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00091 00092 std::string testConfig = "msgFac: { level: 5 metricPluginType: msgFacility reporting_interval: 1.0}"; 00093 fhicl::ParameterSet pset; 00094 fhicl::make_ParameterSet(testConfig, pset); 00095 00096 mm.initialize(pset, "MetricManager_t"); 00097 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00098 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00099 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00100 00101 00102 mm.do_start(); 00103 BOOST_REQUIRE_EQUAL(mm.Running(), true); 00104 BOOST_REQUIRE_EQUAL(mm.Active(), true); 00105 00106 mm.do_stop(); 00107 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00108 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00109 00110 mm.shutdown(); 00111 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00112 TLOG_DEBUG("MetricManager_t") << "END TEST Shutdown" << TLOG_ENDL; 00113 } 00114 00115 BOOST_AUTO_TEST_CASE(SendMetric_String) 00116 { 00117 00118 artdaq::configureMessageFacility("MetricManager_t", true, true); 00119 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST SendMetric_String" << TLOG_ENDL; 00120 artdaq::MetricManager mm; 00121 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00122 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00123 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00124 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00125 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00126 00127 std::string testConfig = "msgFac: { level: 5 metricPluginType: msgFacility reporting_interval: 1.0}"; 00128 fhicl::ParameterSet pset; 00129 fhicl::make_ParameterSet(testConfig, pset); 00130 00131 mm.initialize(pset, "MetricManager_t"); 00132 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00133 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00134 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00135 00136 00137 mm.do_start(); 00138 BOOST_REQUIRE_EQUAL(mm.Running(), true); 00139 BOOST_REQUIRE_EQUAL(mm.Active(), true); 00140 00141 00142 mm.sendMetric("Test Metric", "This is a test", "Units", 2, artdaq::MetricMode::LastPoint); 00143 00144 00145 mm.do_stop(); 00146 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00147 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00148 00149 mm.shutdown(); 00150 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00151 TLOG_DEBUG("MetricManager_t") << "END TEST SendMetric_String" << TLOG_ENDL; 00152 } 00153 00154 BOOST_AUTO_TEST_CASE(SendMetrics) 00155 { 00156 artdaq::configureMessageFacility("MetricManager_t", true, true); 00157 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST SendMetrics" << TLOG_ENDL; 00158 artdaq::MetricManager mm; 00159 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00160 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00161 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00162 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00163 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00164 00165 std::string testConfig = "msgFac: { level: 5 metricPluginType: msgFacility reporting_interval: 1.0}"; 00166 fhicl::ParameterSet pset; 00167 fhicl::make_ParameterSet(testConfig, pset); 00168 00169 mm.initialize(pset, "MetricManager_t"); 00170 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00171 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00172 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00173 00174 00175 mm.do_start(); 00176 BOOST_REQUIRE_EQUAL(mm.Running(), true); 00177 BOOST_REQUIRE_EQUAL(mm.Active(), true); 00178 00179 00180 mm.sendMetric("Test Metric LastPoint", 1, "Units", 2, artdaq::MetricMode::LastPoint); 00181 mm.sendMetric("Test Metric LastPoint", 5, "Units", 2, artdaq::MetricMode::LastPoint); 00182 TLOG_INFO("MetricManager_t") << "LastPoint Metric should have value 5" << TLOG_ENDL; 00183 00184 mm.sendMetric("Test Metric Accumulate", 4, "Units", 2, artdaq::MetricMode::Accumulate); 00185 mm.sendMetric("Test Metric Accumulate", 5, "Units", 2, artdaq::MetricMode::Accumulate); 00186 TLOG_INFO("MetricManager_t") << "Accumulate metric should have value 9" << TLOG_ENDL; 00187 mm.sendMetric("Test Metric Average", 1, "Units", 2, artdaq::MetricMode::Average); 00188 mm.sendMetric("Test Metric Average", 3, "Units", 2, artdaq::MetricMode::Average); 00189 TLOG_INFO("MetricManager_t") << "Average metric should have value 2" << TLOG_ENDL; 00190 00191 00192 00193 mm.do_stop(); 00194 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00195 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00196 00197 mm.shutdown(); 00198 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00199 TLOG_DEBUG("MetricManager_t") << "END TEST SendMetrics" << TLOG_ENDL; 00200 } 00201 00202 BOOST_AUTO_TEST_CASE(MetricFlood) 00203 { 00204 00205 artdaq::configureMessageFacility("MetricManager_t", true, true); 00206 TLOG_DEBUG("MetricManager_t") << "BEGIN TEST MetricFlood" << TLOG_ENDL; 00207 artdaq::MetricManager mm; 00208 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00209 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00210 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00211 BOOST_REQUIRE_EQUAL(mm.metricQueueEmpty(), true); 00212 BOOST_REQUIRE_EQUAL(mm.metricQueueSize(), 0); 00213 00214 std::string testConfig = "msgFac: { level: 5 metricPluginType: msgFacility reporting_interval: 1.0}"; 00215 fhicl::ParameterSet pset; 00216 fhicl::make_ParameterSet(testConfig, pset); 00217 00218 mm.initialize(pset, "MetricManager_t"); 00219 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00220 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00221 BOOST_REQUIRE_EQUAL(mm.Active(), false); 00222 00223 00224 mm.do_start(); 00225 BOOST_REQUIRE_EQUAL(mm.Running(), true); 00226 BOOST_REQUIRE_EQUAL(mm.Active(), true); 00227 00228 auto beforeOne = std::chrono::steady_clock::now(); 00229 mm.sendMetric("Test Metric 1", 1, "Units", 2, artdaq::MetricMode::Accumulate); 00230 auto afterOne = std::chrono::steady_clock::now(); 00231 00232 sleep(2); 00233 00234 auto beforeTen = std::chrono::steady_clock::now(); 00235 for (auto ii = 1; ii <= 10; ++ii) 00236 { 00237 mm.sendMetric("Test Metric 10", ii, "Units", 2, artdaq::MetricMode::Accumulate); 00238 } 00239 auto afterTen = std::chrono::steady_clock::now(); 00240 00241 sleep(2); 00242 00243 auto beforeOneHundred = std::chrono::steady_clock::now(); 00244 for (auto ii = 1; ii <= 100; ++ii) 00245 { 00246 mm.sendMetric("Test Metric 100", ii, "Units", 2, artdaq::MetricMode::Accumulate); 00247 } 00248 auto afterOneHundred = std::chrono::steady_clock::now(); 00249 00250 sleep(2); 00251 00252 auto beforeOneThousand = std::chrono::steady_clock::now(); 00253 for (auto ii = 1; ii <= 1000; ++ii) 00254 { 00255 mm.sendMetric("Test Metric 1000", ii, "Units", 2, artdaq::MetricMode::Accumulate); 00256 } 00257 auto afterOneThousand = std::chrono::steady_clock::now(); 00258 00259 sleep(2); 00260 00261 auto beforeTenThousand = std::chrono::steady_clock::now(); 00262 for (auto ii = 1; ii <= 10000; ++ii) 00263 { 00264 mm.sendMetric("Test Metric 10000", ii, "Units", 2, artdaq::MetricMode::Accumulate); 00265 } 00266 auto afterTenThousand = std::chrono::steady_clock::now(); 00267 00268 00269 auto beforeStop = std::chrono::steady_clock::now(); 00270 mm.do_stop(); 00271 BOOST_REQUIRE_EQUAL(mm.Running(), false); 00272 BOOST_REQUIRE_EQUAL(mm.Initialized(), true); 00273 auto afterStop = std::chrono::steady_clock::now(); 00274 00275 TLOG_INFO("MetricManager_t") << "Time for One Metric: " << artdaq::TimeUtils::GetElapsedTime(beforeOne, afterOne) << " s." << TLOG_ENDL; 00276 TLOG_INFO("MetricManager_t") << "Time for Ten Metrics: " << artdaq::TimeUtils::GetElapsedTime(beforeTen, afterTen) << " s." << TLOG_ENDL; 00277 TLOG_INFO("MetricManager_t") << "Time for One Hundred Metrics: " << artdaq::TimeUtils::GetElapsedTime(beforeOneHundred, afterOneHundred) << " s." << TLOG_ENDL; 00278 TLOG_INFO("MetricManager_t") << "Time for One Thousand Metrics: " << artdaq::TimeUtils::GetElapsedTime(beforeOneThousand, afterOneThousand) << " s." << TLOG_ENDL; 00279 TLOG_INFO("MetricManager_t") << "Time for Ten Thousand Metrics: " << artdaq::TimeUtils::GetElapsedTime(beforeTenThousand, afterTenThousand) << " s." << TLOG_ENDL; 00280 TLOG_INFO("MetricManager_t") << "Time for Stop Metrics: " << artdaq::TimeUtils::GetElapsedTime(beforeStop, afterStop) << " s." << TLOG_ENDL; 00281 00282 mm.shutdown(); 00283 BOOST_REQUIRE_EQUAL(mm.Initialized(), false); 00284 TLOG_DEBUG("MetricManager_t") << "END TEST MetricFlood" << TLOG_ENDL; 00285 } 00286 00287 BOOST_AUTO_TEST_SUITE_END()