@@ -56,17 +56,19 @@ using namespace o2::monitoring;
5656namespace o2 ::quality_control::core
5757{
5858
59- LateTaskRunner::LateTaskRunner (const LateTaskRunnerConfig & config)
60- : mTaskConfig (config)
59+ LateTaskRunner::LateTaskRunner (const ServicesConfig& servicesConfig, const LateTaskConfig & config)
60+ : Actor<LateTaskRunner>(servicesConfig), mTaskConfig (config)
6161{
62+ // fixme: this should be moved to Actor
6263 o2::ccdb::BasicCCDBManager::instance ().setFatalWhenNull (false );
6364}
6465
65- void LateTaskRunner::init (InitContext& iCtx)
66+ void LateTaskRunner::onInit (InitContext& iCtx)
6667{
68+ // fixme: move exception handling to Actor
6769 try {
6870 // setup publisher
69- mObjectsManager = std::make_shared<ObjectsManager>(mTaskConfig .taskName , mTaskConfig .className , mTaskConfig .detectorName , 0 );
71+ mObjectsManager = std::make_shared<ObjectsManager>(mTaskConfig .name , mTaskConfig .className , mTaskConfig .detectorName , 0 );
7072
7173 // setup user's task
7274 mTask .reset (LateTaskFactory::create (mTaskConfig , mObjectsManager ));
@@ -78,14 +80,15 @@ void LateTaskRunner::init(InitContext& iCtx)
7880 mValidity = gInvalidValidityInterval ;
7981
8082 // todo move to start
81- mTask ->startOfActivity ({});
83+ mTask ->startOfActivity (getActivity ());
84+ mObjectsManager ->setActivity (getActivity ());
8285 } catch (boost::exception& e) {
8386 ILOG (Info, Devel) << " exception during init " << diagnostic_information (e) << ENDM;
8487 throw ;
8588 }
8689}
8790
88- void LateTaskRunner::run (ProcessingContext& pCtx)
91+ void LateTaskRunner::onProcess (ProcessingContext& pCtx)
8992{
9093 // todo: derive from received objects
9194 mValidity .update (getCurrentTimestamp ());
@@ -101,7 +104,7 @@ void LateTaskRunner::run(ProcessingContext& pCtx)
101104
102105 // fixme: come up with an elegant way for this. LateTask should be probably aware of the requested user inputs aside from just InputSpecs
103106 // also, we should filter only expect objects from the received collections
104- if (dataOrigin.str [0 ] == ' Q' || dataOrigin.str [0 ] == ' W' ) { // main MOs and moving windows from QC tasks
107+ if (dataOrigin.str [0 ] == ' Q' || dataOrigin.str [0 ] == ' W' || dataOrigin. str [ 0 ] == ' L ' ) { // main MOs and moving windows from QC tasks, and outputs of late tasks
105108 auto moc = DataRefUtils::as<MonitorObjectCollection>(ref);
106109 moc->postDeserialization ();
107110
@@ -124,51 +127,15 @@ void LateTaskRunner::run(ProcessingContext& pCtx)
124127 }
125128 }
126129
127-
128-
129130 // run the task
130131 mTask ->process (taskInputs);
131132
132133 // publish objects
133134 mObjectsManager ->setValidity (mValidity );
134135 std::unique_ptr<MonitorObjectCollection> array (mObjectsManager ->getNonOwningArray ());
135- auto concreteOutput = framework::DataSpecUtils::asConcreteDataMatcher (mTaskConfig .moSpec );
136- pCtx.outputs ().snapshot (Output{ concreteOutput.origin , concreteOutput.description , concreteOutput.subSpec }, *array);
136+ pCtx.outputs ().snapshot (mTaskConfig .name , *array);
137137 mObjectsManager ->stopPublishing (PublicationPolicy::Once);
138138}
139139
140- // / \brief ID string for all LateTaskRunner devices
141- std::string LateTaskRunner::createIdString ()
142- {
143- return { " qc-late-task" };
144- }
145- // / \brief Unified DataOrigin for Quality Control tasks
146- header::DataOrigin LateTaskRunner::createDataOrigin (const std::string& detectorCode)
147- {
148- std::string originStr = " L" ;
149- if (detectorCode.empty ()) {
150- ILOG (Warning, Support) << " empty detector code for a task data origin, trying to survive with: DET" << ENDM;
151- originStr += " DET" ;
152- } else if (detectorCode.size () > 3 ) {
153- ILOG (Warning, Support) << " too long detector code for a task data origin: " + detectorCode + " , trying to survive with: " + detectorCode.substr (0 , 3 ) << ENDM;
154- originStr += detectorCode.substr (0 , 3 );
155- } else {
156- originStr += detectorCode;
157- }
158- o2::header::DataOrigin origin;
159- origin.runtimeInit (originStr.c_str ());
160- return origin;
161- }
162-
163- // / \brief Unified DataDescription naming scheme for all tasks
164- header::DataDescription LateTaskRunner::createDataDescription (const std::string& lateTaskName)
165- {
166- if (lateTaskName.empty ()) {
167- BOOST_THROW_EXCEPTION (FatalException () << errinfo_details (" Empty lateTaskName for task's data description" ));
168- }
169-
170- return quality_control::core::createDataDescription (lateTaskName, LateTaskRunner::taskDescriptionHashLength);
171- }
172-
173140
174141} // namespace o2::quality_control::core
0 commit comments