From 0f541769e12fd1f29fcbd15fafdd21a0eda642a0 Mon Sep 17 00:00:00 2001 From: Piotr Konopka Date: Fri, 5 Dec 2025 10:53:08 +0100 Subject: [PATCH] Add userCodeName and dataSources to UserCodeConfig Since all of the UserCodeConfig children share a name and data sources, we can brings them to the parent. --- .../include/QualityControl/AggregatorConfig.h | 1 - Framework/include/QualityControl/CheckConfig.h | 1 - .../include/QualityControl/TaskRunnerConfig.h | 1 - .../include/QualityControl/UserCodeConfig.h | 3 +++ Framework/src/Aggregator.cxx | 3 ++- Framework/src/Check.cxx | 3 ++- Framework/src/TaskFactory.cxx | 2 +- Framework/src/TaskRunner.cxx | 18 +++++++++--------- Framework/src/TaskRunnerFactory.cxx | 3 ++- Framework/test/testCheck.cxx | 5 +++-- Framework/test/testTaskInterface.cxx | 9 +++++---- Modules/Example/test/testFactory.cxx | 10 +++++----- Modules/Example/test/testQcExample.cxx | 4 ++-- Modules/Skeleton/test/testQcSkeleton.cxx | 4 ++-- 14 files changed, 36 insertions(+), 31 deletions(-) diff --git a/Framework/include/QualityControl/AggregatorConfig.h b/Framework/include/QualityControl/AggregatorConfig.h index 83230948bc..7e928d4210 100644 --- a/Framework/include/QualityControl/AggregatorConfig.h +++ b/Framework/include/QualityControl/AggregatorConfig.h @@ -31,7 +31,6 @@ namespace o2::quality_control::checker /// \brief Container for the configuration of an Aggregator. struct AggregatorConfig : public o2::quality_control::core::UserCodeConfig { - std::string name; UpdatePolicyType policyType = UpdatePolicyType::OnAny; std::vector objectNames{}; // fixme: if object names are empty, allObjects are true, consider reducing to one var // fixme: duplicates "sources" bool allObjects = false; diff --git a/Framework/include/QualityControl/CheckConfig.h b/Framework/include/QualityControl/CheckConfig.h index 1b70dfae77..02f56eb202 100644 --- a/Framework/include/QualityControl/CheckConfig.h +++ b/Framework/include/QualityControl/CheckConfig.h @@ -29,7 +29,6 @@ namespace o2::quality_control::checker /// \brief Container for the configuration of a Check. struct CheckConfig : public o2::quality_control::core::UserCodeConfig { - std::string name; UpdatePolicyType policyType = UpdatePolicyType::OnAny; std::vector objectNames{}; // fixme: if object names are empty, allObjects are true, consider reducing to one var bool allObjects = false; diff --git a/Framework/include/QualityControl/TaskRunnerConfig.h b/Framework/include/QualityControl/TaskRunnerConfig.h index eefb5f88d2..7c5bfb54f3 100644 --- a/Framework/include/QualityControl/TaskRunnerConfig.h +++ b/Framework/include/QualityControl/TaskRunnerConfig.h @@ -42,7 +42,6 @@ namespace o2::quality_control::core /// \brief Container for the configuration of a Task struct TaskRunnerConfig : public UserCodeConfig { std::string deviceName; - std::string taskName; std::vector> cycleDurations = {}; int maxNumberCycles; bool critical; diff --git a/Framework/include/QualityControl/UserCodeConfig.h b/Framework/include/QualityControl/UserCodeConfig.h index b57241fdad..dc2a789cf8 100644 --- a/Framework/include/QualityControl/UserCodeConfig.h +++ b/Framework/include/QualityControl/UserCodeConfig.h @@ -19,12 +19,14 @@ #include "QualityControl/CustomParameters.h" #include "QualityControl/stringUtils.h" +#include "QualityControl/DataSourceSpec.h" namespace o2::quality_control::core { /// \brief Container for the configuration of a Task struct UserCodeConfig { + std::string name; // task name, check name, etc... std::string moduleName; std::string className; std::string detectorName = "MISC"; // intended to be the 3 letters code; @@ -32,6 +34,7 @@ struct UserCodeConfig { CustomParameters customParameters; std::string ccdbUrl; std::unordered_map repository; // we need the full config of the database to build the database in the subclasses + std::vector dataSources; }; } // namespace o2::quality_control::core diff --git a/Framework/src/Aggregator.cxx b/Framework/src/Aggregator.cxx index 57d20cc7b4..42551ea064 100644 --- a/Framework/src/Aggregator.cxx +++ b/Framework/src/Aggregator.cxx @@ -240,6 +240,7 @@ AggregatorConfig Aggregator::extractConfig(const core::CommonSpec& commonSpec, c } return { + aggregatorSpec.aggregatorName, aggregatorSpec.moduleName, aggregatorSpec.className, aggregatorSpec.detectorName, @@ -247,7 +248,7 @@ AggregatorConfig Aggregator::extractConfig(const core::CommonSpec& commonSpec, c aggregatorSpec.customParameters, commonSpec.conditionDBUrl, commonSpec.database, - aggregatorSpec.aggregatorName, + aggregatorSpec.dataSources, updatePolicy, std::move(objectNames), checkAllObjects, diff --git a/Framework/src/Check.cxx b/Framework/src/Check.cxx index 9c0859cb6f..f9d12ad2d3 100644 --- a/Framework/src/Check.cxx +++ b/Framework/src/Check.cxx @@ -267,6 +267,7 @@ CheckConfig Check::extractConfig(const CommonSpec& commonSpec, const CheckSpec& } return { + checkSpec.checkName, checkSpec.moduleName, checkSpec.className, checkSpec.detectorName, @@ -274,7 +275,7 @@ CheckConfig Check::extractConfig(const CommonSpec& commonSpec, const CheckSpec& checkSpec.customParameters, commonSpec.conditionDBUrl, commonSpec.database, - checkSpec.checkName, + checkSpec.dataSources, updatePolicy, std::move(objectNames), checkAllObjects, diff --git a/Framework/src/TaskFactory.cxx b/Framework/src/TaskFactory.cxx index ea77ca5356..cf62fd1ea4 100644 --- a/Framework/src/TaskFactory.cxx +++ b/Framework/src/TaskFactory.cxx @@ -24,7 +24,7 @@ namespace o2::quality_control::core TaskInterface* TaskFactory::create(const TaskRunnerConfig& taskConfig, std::shared_ptr objectsManager) { auto* result = root_class_factory::create(taskConfig.moduleName, taskConfig.className); - result->setName(taskConfig.taskName); + result->setName(taskConfig.name); result->setObjectsManager(objectsManager); result->setCustomParameters(taskConfig.customParameters); result->setCcdbUrl(taskConfig.ccdbUrl); diff --git a/Framework/src/TaskRunner.cxx b/Framework/src/TaskRunner.cxx index 372ab19962..3c16548207 100644 --- a/Framework/src/TaskRunner.cxx +++ b/Framework/src/TaskRunner.cxx @@ -85,7 +85,7 @@ TaskRunner::~TaskRunner() void TaskRunner::init(InitContext& iCtx) { - core::initInfologger(iCtx, mTaskConfig.infologgerDiscardParameters, "task/" + mTaskConfig.taskName, mTaskConfig.detectorName); + core::initInfologger(iCtx, mTaskConfig.infologgerDiscardParameters, "task/" + mTaskConfig.name, mTaskConfig.detectorName); ILOG(Info, Devel) << "Initializing TaskRunner" << ENDM; printTaskConfig(); @@ -103,11 +103,11 @@ void TaskRunner::init(InitContext& iCtx) // setup monitoring mCollector = MonitoringFactory::Get(mTaskConfig.monitoringUrl); mCollector->addGlobalTag(tags::Key::Subsystem, tags::Value::QC); - mCollector->addGlobalTag("TaskName", mTaskConfig.taskName); + mCollector->addGlobalTag("TaskName", mTaskConfig.name); mCollector->addGlobalTag("DetectorName", mTaskConfig.detectorName); // setup publisher - mObjectsManager = std::make_shared(mTaskConfig.taskName, mTaskConfig.className, mTaskConfig.detectorName, mTaskConfig.parallelTaskID); + mObjectsManager = std::make_shared(mTaskConfig.name, mTaskConfig.className, mTaskConfig.detectorName, mTaskConfig.parallelTaskID); mObjectsManager->setMovingWindowsList(mTaskConfig.movingWindows); // setup timekeeping @@ -374,11 +374,11 @@ bool TaskRunner::isDataReady(const framework::InputRecord& inputs) void TaskRunner::printTaskConfig() const { - ILOG(Info, Devel) << "Configuration loaded > Task name : " << mTaskConfig.taskName // - << " / Module name : " << mTaskConfig.moduleName // - << " / Detector name : " << mTaskConfig.detectorName // - << " / Max number cycles : " << mTaskConfig.maxNumberCycles // - << " / critical : " << mTaskConfig.critical // + ILOG(Info, Devel) << "Configuration loaded > Task name : " << mTaskConfig.name // + << " / Module name : " << mTaskConfig.moduleName // + << " / Detector name : " << mTaskConfig.detectorName // + << " / Max number cycles : " << mTaskConfig.maxNumberCycles // + << " / critical : " << mTaskConfig.critical // << " / Save to file : " << mTaskConfig.saveToFile << " / Cycle duration seconds : "; for (auto& [cycleDuration, period] : mTaskConfig.cycleDurations) { @@ -437,7 +437,7 @@ void TaskRunner::registerToBookkeeping() if (!gSystem->Getenv("O2_QC_DONT_REGISTER_IN_BK")) { // Set this variable to disable the registration // register ourselves to the BK at the first cycle ILOG(Debug, Devel) << "Registering taskRunner to BookKeeping" << ENDM; - Bookkeeping::getInstance().registerProcess(mActivity.mId, mTaskConfig.taskName, mTaskConfig.detectorName, bkp::DplProcessType::QC_TASK, ""); + Bookkeeping::getInstance().registerProcess(mActivity.mId, mTaskConfig.name, mTaskConfig.detectorName, bkp::DplProcessType::QC_TASK, ""); } } diff --git a/Framework/src/TaskRunnerFactory.cxx b/Framework/src/TaskRunnerFactory.cxx index 60a6696a40..b08a6d5cf2 100644 --- a/Framework/src/TaskRunnerFactory.cxx +++ b/Framework/src/TaskRunnerFactory.cxx @@ -169,6 +169,7 @@ TaskRunnerConfig TaskRunnerFactory::extractConfig(const CommonSpec& globalConfig o2::globaltracking::RecoContainer rd; return { + taskSpec.taskName, taskSpec.moduleName, taskSpec.className, InfrastructureSpecReader::validateDetectorName(taskSpec.detectorName), @@ -176,8 +177,8 @@ TaskRunnerConfig TaskRunnerFactory::extractConfig(const CommonSpec& globalConfig taskSpec.customParameters, globalConfig.conditionDBUrl, globalConfig.database, + taskSpec.dataSources, deviceName, - taskSpec.taskName, multipleCycleDurations, taskSpec.maxNumberCycles, taskSpec.critical, diff --git a/Framework/test/testCheck.cxx b/Framework/test/testCheck.cxx index 31a6b1ceb8..fc68d5236c 100644 --- a/Framework/test/testCheck.cxx +++ b/Framework/test/testCheck.cxx @@ -144,14 +144,15 @@ TEST_CASE("test_check_postprocessing") TEST_CASE("test_check_activity") { - Check check({ "QcSkeleton", + Check check({ "test", + "QcSkeleton", "o2::quality_control_modules::skeleton::SkeletonCheck", "TST", "", {}, "something", { { "implementation", "CCDB" }, { "host", "something" } }, - "test", + {}, UpdatePolicyType::OnAny, {}, true }); diff --git a/Framework/test/testTaskInterface.cxx b/Framework/test/testTaskInterface.cxx index e20772c73e..c44351aedb 100644 --- a/Framework/test/testTaskInterface.cxx +++ b/Framework/test/testTaskInterface.cxx @@ -132,7 +132,7 @@ TEST_CASE("test_invoke_all_TaskRunnerConfig_methods") { // This is maximum that we can do until we are able to test the DPL algorithms in isolation. TaskRunnerConfig taskConfig; - auto* objectsManager = new ObjectsManager(taskConfig.taskName, taskConfig.className, taskConfig.detectorName, 0); + auto* objectsManager = new ObjectsManager(taskConfig.name, taskConfig.className, taskConfig.detectorName, 0); test::TestTask testTask(objectsManager); CHECK(testTask.test == 0); @@ -167,6 +167,7 @@ TEST_CASE("test_invoke_all_TaskRunnerConfig_methods") TEST_CASE("test_task_factory") { TaskRunnerConfig config{ + "skeletonTask", "QcSkeleton", "o2::quality_control_modules::skeleton::SkeletonTask", "TST", @@ -174,15 +175,15 @@ TEST_CASE("test_task_factory") {}, "something", {}, + {}, "SkeletonTaskRunner", - "skeletonTask", { { 10, 1 } }, -1, true, "" }; - auto objectsManager = make_shared(config.taskName, config.className, config.detectorName, 0); + auto objectsManager = make_shared(config.name, config.className, config.detectorName, 0); TaskFactory taskFactory; auto task = taskFactory.create(config, objectsManager); @@ -205,7 +206,7 @@ TEST_CASE("retrieveCondition") // retrieve it TaskRunnerConfig taskConfig; - auto* objectsManager = new ObjectsManager(taskConfig.taskName, taskConfig.className, taskConfig.detectorName, 0); + auto* objectsManager = new ObjectsManager(taskConfig.name, taskConfig.className, taskConfig.detectorName, 0); test::TestTask testTask(objectsManager); testTask.setCcdbUrl("ccdb-test.cern.ch:8080"); o2::emcal::BadChannelMap* bcm = testTask.testRetrieveCondition(); diff --git a/Modules/Example/test/testFactory.cxx b/Modules/Example/test/testFactory.cxx index 17e18c68f5..e211673e98 100644 --- a/Modules/Example/test/testFactory.cxx +++ b/Modules/Example/test/testFactory.cxx @@ -26,12 +26,12 @@ BOOST_AUTO_TEST_CASE(Task_Factory) { TaskFactory factory; TaskRunnerConfig config; - config.taskName = "task"; + config.name = "task"; config.moduleName = "QcCommon"; config.className = "o2::quality_control_modules::example::ExampleTask"; config.detectorName = "DAQ"; config.ccdbUrl = "something"; - auto manager = make_shared(config.taskName, config.className, config.detectorName, 0); + auto manager = make_shared(config.name, config.className, config.detectorName, 0); try { gSystem->AddDynamicPath("lib:../../lib:../../../lib:.:"); // add local paths for the test factory.create(config, manager); @@ -46,15 +46,15 @@ BOOST_AUTO_TEST_CASE(Task_Factory_failures, *utf::depends_on("Task_Factory") /* { TaskFactory factory; TaskRunnerConfig config; - auto manager = make_shared(config.taskName, config.className, config.detectorName, 0); + auto manager = make_shared(config.name, config.className, config.detectorName, 0); - config.taskName = "task"; + config.name = "task"; config.moduleName = "WRONGNAME"; config.className = "o2::quality_control_modules::example::ExampleTask"; BOOST_CHECK_EXCEPTION(factory.create(config, manager), AliceO2::Common::FatalException, is_critical); gSystem->AddDynamicPath("lib:../../lib:../../../lib:"); // add local paths for the test - config.taskName = "task"; + config.name = "task"; config.moduleName = "QcCommon"; config.className = "WRONGCLASS"; BOOST_CHECK_EXCEPTION(factory.create(config, manager), AliceO2::Common::FatalException, is_critical); diff --git a/Modules/Example/test/testQcExample.cxx b/Modules/Example/test/testQcExample.cxx index 2193668e0b..0fa375a7f5 100644 --- a/Modules/Example/test/testQcExample.cxx +++ b/Modules/Example/test/testQcExample.cxx @@ -25,9 +25,9 @@ BOOST_AUTO_TEST_CASE(insantiate_task) ExampleTask task; TaskRunnerConfig config; config.consulUrl = ""; - config.taskName = "qcExampleTest"; + config.name = "qcExampleTest"; config.detectorName = "TST"; - auto manager = make_shared(config.taskName, "ExampleTask", config.detectorName, 0); + auto manager = make_shared(config.name, "ExampleTask", config.detectorName, 0); task.setObjectsManager(manager); // task.initialize();// TODO diff --git a/Modules/Skeleton/test/testQcSkeleton.cxx b/Modules/Skeleton/test/testQcSkeleton.cxx index 2345baa0ea..af04a503ed 100644 --- a/Modules/Skeleton/test/testQcSkeleton.cxx +++ b/Modules/Skeleton/test/testQcSkeleton.cxx @@ -36,9 +36,9 @@ BOOST_AUTO_TEST_CASE(instantiate_task) SkeletonTask task; TaskRunnerConfig config; config.consulUrl = ""; - config.taskName = "qcSkeletonTest"; + config.name = "qcSkeletonTest"; config.detectorName = "TST"; - auto manager = make_shared(config.taskName, "SkeletonTask", config.detectorName, 0); + auto manager = make_shared(config.name, "SkeletonTask", config.detectorName, 0); task.setObjectsManager(manager); // o2::framework::InitContext ctx; // task.initialize(ctx);