1 #include "otsdaq-core/CoreSupervisors/CoreSupervisorBase.h"
2 #include "otsdaq-core/XmlUtilities/HttpXmlDocument.h"
3 #include "otsdaq-core/SOAPUtilities/SOAPUtilities.h"
4 #include "otsdaq-core/SOAPUtilities/SOAPCommand.h"
5 #include "otsdaq-core/CgiDataUtilities/CgiDataUtilities.h"
8 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationGroupKey.h"
9 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h"
10 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h"
11 #include "otsdaq-core/ConfigurationPluginDataFormats/XDAQContextConfiguration.h"
12 #include "otsdaq-core/MessageFacility/MessageFacility.h"
13 #include "otsdaq-core/Macros/CoutHeaderMacros.h"
14 #include "otsdaq-core/FiniteStateMachine/VStateMachine.h"
15 #include "otsdaq-core/FECore/FEVInterfacesManager.h"
18 #include <toolbox/fsm/FailedEvent.h>
20 #include <xdaq/NamespaceURI.h>
21 #include <xoap/Method.h>
30 CoreSupervisorBase::CoreSupervisorBase(xdaq::ApplicationStub * s)
31 throw (xdaq::exception::Exception)
32 : xdaq::Application (s)
34 , stateMachineWorkLoopManager_ (toolbox::task::bind(
this, &CoreSupervisorBase::stateMachineThread,
"StateMachine"))
35 , stateMachineSemaphore_ (toolbox::BSem::FULL)
37 , XDAQContextConfigurationName_ (theConfigurationManager_->__GET_CONFIG__(
XDAQContextConfiguration)->getConfigurationName())
38 , supervisorConfigurationPath_ (
"INITIALIZED INSIDE THE CONTRUCTOR BECAUSE IT NEEDS supervisorContextUID_ and supervisorApplicationUID_")
39 , supervisorContextUID_ (
"INITIALIZED INSIDE THE CONTRUCTOR TO LAUNCH AN EXCEPTION")
40 , supervisorApplicationUID_ (
"INITIALIZED INSIDE THE CONTRUCTOR TO LAUNCH AN EXCEPTION")
41 , supervisorClass_ (getApplicationDescriptor()->getClassName())
42 , supervisorClassNoNamespace_ (supervisorClass_.substr(supervisorClass_.find_last_of(
":")+1, supervisorClass_.length()-supervisorClass_.find_last_of(
":")))
44 __MOUT__ <<
"Begin!" << std::endl;
45 __MOUT__ <<
"Begin!" << std::endl;
46 __MOUT__ <<
"Begin!" << std::endl;
47 __MOUT__ <<
"Begin!" << std::endl;
48 __MOUT__ <<
"Begin!" << std::endl;
49 xgi::bind (
this, &CoreSupervisorBase::Default,
"Default" );
50 xgi::bind (
this, &CoreSupervisorBase::stateMachineXgiHandler,
"StateMachineXgiHandler");
51 xgi::bind (
this, &CoreSupervisorBase::request,
"Request");
53 xoap::bind(
this, &CoreSupervisorBase::stateMachineStateRequest,
"StateMachineStateRequest", XDAQ_NS_URI );
54 xoap::bind(
this, &CoreSupervisorBase::stateMachineErrorMessageRequest,
"StateMachineErrorMessageRequest", XDAQ_NS_URI );
55 xoap::bind(
this, &CoreSupervisorBase::macroMakerSupervisorRequest,
"MacroMakerSupervisorRequest", XDAQ_NS_URI );
59 supervisorContextUID_ = theConfigurationManager_->__GET_CONFIG__(
XDAQContextConfiguration)->getContextUID(getApplicationContext()->getContextDescriptor()->getURL());
63 __MOUT_ERR__ <<
"XDAQ Supervisor could not access it's configuration through the Configuration Context Group." <<
64 " The XDAQContextConfigurationName = " << XDAQContextConfigurationName_ <<
65 ". The supervisorApplicationUID = " << supervisorApplicationUID_ << std::endl;
72 getApplicationContext()->getContextDescriptor()->getURL(),
73 getApplicationDescriptor()->getLocalId()
78 __MOUT_ERR__ <<
"XDAQ Supervisor could not access it's configuration through the Configuration Application Group."
79 <<
" The supervisorApplicationUID = " << supervisorApplicationUID_ << std::endl;
82 supervisorConfigurationPath_ =
"/" + supervisorContextUID_ +
"/LinkToApplicationConfiguration/" + supervisorApplicationUID_ +
"/LinkToSupervisorConfiguration";
84 setStateMachineName(supervisorApplicationUID_);
85 __MOUT__ <<
"Done!" << std::endl;
86 __MOUT__ <<
"Done!" << std::endl;
87 __MOUT__ <<
"Done!" << std::endl;
88 __MOUT__ <<
"Done!" << std::endl;
94 CoreSupervisorBase::~CoreSupervisorBase(
void)
99 void CoreSupervisorBase::init(
void)
102 __MOUT__ <<
"CONTEXT!" << std::endl;
103 __MOUT__ <<
"CONTEXT!" << std::endl;
104 __MOUT__ <<
"CONTEXT!" << std::endl;
105 supervisorDescriptorInfo_.init(getApplicationContext());
106 __MOUT__ <<
"Done!" << std::endl;
107 __MOUT__ <<
"Done!" << std::endl;
108 __MOUT__ <<
"Done!" << std::endl;
113 void CoreSupervisorBase::destroy(
void)
115 for(
auto& it: theStateMachineImplementation_)
117 theStateMachineImplementation_.clear();
121 void CoreSupervisorBase::Default(xgi::Input * in, xgi::Output * out )
122 throw (xgi::exception::Exception)
126 __MOUT__<<
"Supervisor class " << supervisorClass_ << std::endl;
128 *out <<
"<!DOCTYPE HTML><html lang='en'><frameset col='100%' row='100%'><frame src='/WebPath/html/" << supervisorClassNoNamespace_ <<
"Supervisor.html?urn=" <<
129 this->getApplicationDescriptor()->getLocalId() <<
130 "'></frameset></html>";
134 void CoreSupervisorBase::request(xgi::Input * in, xgi::Output * out )
135 throw (xgi::exception::Exception)
139 cgicc::Cgicc cgi(in);
140 std::string write = CgiDataUtilities::getOrPostData(cgi,
"write");
141 std::string addr = CgiDataUtilities::getOrPostData(cgi,
"addr");
142 std::string data = CgiDataUtilities::getOrPostData(cgi,
"data");
144 __MOUT__<<
"write " << write <<
" addr: " << addr <<
" data: " << data << std::endl;
146 unsigned long long int addr64,data64;
147 sscanf(addr.c_str(),
"%llu",&addr64);
148 sscanf(data.c_str(),
"%llu",&data64);
149 __MOUT__<<
"write " << write <<
" addr: " << addr64 <<
" data: " << data64 << std::endl;
155 void CoreSupervisorBase::stateMachineXgiHandler(xgi::Input * in, xgi::Output * out )
156 throw (xgi::exception::Exception)
160 void CoreSupervisorBase::stateMachineResultXgiHandler(xgi::Input* in, xgi::Output* out )
161 throw (xgi::exception::Exception)
165 xoap::MessageReference CoreSupervisorBase::stateMachineXoapHandler(xoap::MessageReference message )
166 throw (xoap::exception::Exception)
168 __MOUT__<<
"Soap Handler!" << std::endl;
169 stateMachineWorkLoopManager_.removeProcessedRequests();
170 stateMachineWorkLoopManager_.processRequest(message);
171 __MOUT__<<
"Done - Soap Handler!" << std::endl;
176 xoap::MessageReference CoreSupervisorBase::stateMachineResultXoapHandler(xoap::MessageReference message )
177 throw (xoap::exception::Exception)
179 __MOUT__<<
"Soap Handler!" << std::endl;
182 __MOUT__<<
"Done - Soap Handler!" << std::endl;
187 bool CoreSupervisorBase::stateMachineThread(toolbox::task::WorkLoop* workLoop)
189 stateMachineSemaphore_.take();
190 __MOUT__<<
"Re-sending message..." << SOAPUtilities::translate(stateMachineWorkLoopManager_.getMessage(workLoop)).getCommand() << std::endl;
191 std::string reply = send(this->getApplicationDescriptor(),stateMachineWorkLoopManager_.getMessage(workLoop));
192 stateMachineWorkLoopManager_.report(workLoop, reply, 100,
true);
193 __MOUT__<<
"Done with message" << std::endl;
194 stateMachineSemaphore_.give();
200 xoap::MessageReference CoreSupervisorBase::stateMachineStateRequest(xoap::MessageReference message)
201 throw (xoap::exception::Exception)
203 __MOUT__<<
"theStateMachine_.getCurrentStateName() = " << theStateMachine_.getCurrentStateName() << std::endl;
204 return SOAPUtilities::makeSOAPMessageReference(theStateMachine_.getCurrentStateName());
208 xoap::MessageReference CoreSupervisorBase::stateMachineErrorMessageRequest(xoap::MessageReference message)
209 throw (xoap::exception::Exception)
211 __MOUT__<<
"theStateMachine_.getErrorMessage() = " << theStateMachine_.getErrorMessage() << std::endl;
214 retParameters.addParameter(
"ErrorMessage",theStateMachine_.getErrorMessage());
215 return SOAPUtilities::makeSOAPMessageReference(
"stateMachineErrorMessageRequestReply",retParameters);
225 xoap::MessageReference CoreSupervisorBase::macroMakerSupervisorRequest(
226 xoap::MessageReference message)
227 throw (xoap::exception::Exception)
229 __MOUT__<<
"$$$$$$$$$$$$$$$$$" << std::endl;
233 for(
unsigned int i = 0; i<theStateMachineImplementation_.size();++i)
237 theFEInterfacesManager =
239 if(!theFEInterfacesManager)
throw std::runtime_error(
"");
240 __MOUT__ <<
"State Machine " << i <<
" WAS of type FEVInterfacesManager" << std::endl;
246 __MOUT__ <<
"State Machine " << i <<
" was NOT of type FEVInterfacesManager" << std::endl;
251 __MOUT__ <<
"theFEInterfacesManager pointer = " << theFEInterfacesManager << std::endl;
255 parameters.addParameter(
"Request");
256 parameters.addParameter(
"InterfaceID");
259 parameters.addParameter(
"Address");
260 parameters.addParameter(
"Data");
263 parameters.addParameter(
"feMacroName");
264 parameters.addParameter(
"inputArgs");
265 parameters.addParameter(
"outputArgs");
267 SOAPMessenger::receive(message, parameters);
268 std::string request = parameters.getValue(
"Request");
269 std::string addressStr = parameters.getValue(
"Address");
270 std::string dataStr = parameters.getValue(
"Data");
271 std::string InterfaceID = parameters.getValue(
"InterfaceID");
273 __MOUT__<<
"request: " << request << std::endl;
275 __MOUT__<<
"Address: " << addressStr <<
" Data: "
276 << dataStr <<
" InterfaceID: " << InterfaceID << std::endl;
280 if(request ==
"GetInterfaces")
282 if(theFEInterfacesManager)
283 retParameters.addParameter(
"FEList",theFEInterfacesManager->getFEListString(
284 std::to_string(getApplicationDescriptor()->getLocalId())));
286 retParameters.addParameter(
"FEList",
"");
288 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
291 else if(request ==
"UniversalWrite")
293 if(!theFEInterfacesManager)
295 __MOUT_INFO__ <<
"No FE Interface Manager! (So no write occurred)" << std::endl;
296 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"DataWritten",retParameters);
304 __MOUT__<<
"theFEInterfacesManager->getInterfaceUniversalAddressSize(index) " <<
305 theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) << std::endl;
306 __MOUT__<<
"theFEInterfacesManager->getInterfaceUniversalDataSize(index) " <<
307 theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) << std::endl;
316 __MOUT__<<
"Translating address: ";
318 char address[theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID)];
320 if(addressStr.size()%2)
321 addressStr =
"0" + addressStr;
323 for(;i<addressStr.size() &&
324 i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
326 tmpHex[0] = addressStr[addressStr.size()-1-i-1];
327 tmpHex[1] = addressStr[addressStr.size()-1-i];
328 sscanf(tmpHex,
"%hhX",(
unsigned char*)&address[i/2]);
329 printf(
"%2.2X",(
unsigned char)address[i/2]);
332 for(;i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
335 printf(
"%2.2X",(
unsigned char)address[i/2]);
338 std::cout << std::endl;
340 __MOUT__<<
"Translating data: ";
342 char data[theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID)];
345 dataStr =
"0" + dataStr;
348 for(;i<dataStr.size() &&
349 i/2 < theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) ; i+=2)
351 tmpHex[0] = dataStr[dataStr.size()-1-i-1];
352 tmpHex[1] = dataStr[dataStr.size()-1-i];
353 sscanf(tmpHex,
"%hhX",(
unsigned char*)&data[i/2]);
354 printf(
"%2.2X",(
unsigned char)data[i/2]);
357 for(;i/2 < theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) ; i+=2)
360 printf(
"%2.2X",(
unsigned char)data[i/2]);
363 std::cout << std::endl;
372 theFEInterfacesManager->universalWrite(InterfaceID,address,data);
377 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"DataWritten",retParameters);
379 else if(request ==
"UniversalRead")
381 if(!theFEInterfacesManager)
383 __MOUT_INFO__ <<
"No FE Interface Manager! (So no read occurred)" << std::endl;
384 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
391 __MOUT__<<
"theFEInterfacesManager->getInterfaceUniversalAddressSize(index) "
392 << theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) << std::endl;
393 __MOUT__<<
"theFEInterfacesManager->getInterfaceUniversalDataSize(index) "
394 <<theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) << std::endl;
400 __MOUT__<<
"Translating address: ";
402 char address[theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID)];
404 if(addressStr.size()%2)
405 addressStr =
"0" + addressStr;
408 for(;i<addressStr.size() &&
409 i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
411 tmpHex[0] = addressStr[addressStr.size()-1-i-1];
412 tmpHex[1] = addressStr[addressStr.size()-1-i];
413 sscanf(tmpHex,
"%hhX",(
unsigned char*)&address[i/2]);
414 printf(
"%2.2X",(
unsigned char)address[i/2]);
417 for(;i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
420 printf(
"%2.2X",(
unsigned char)address[i/2]);
423 std::cout << std::endl;
425 unsigned int dataSz = theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID);
432 if(theFEInterfacesManager->universalRead(InterfaceID, address, data) < 0)
434 retParameters.addParameter(
"dataResult",
"Time Out Error");
435 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
441 std::string str8(data);
443 __MOUT__<<
"decResult[" << dataSz <<
" bytes]: " <<
444 *((
unsigned long long *)(&str8[0])) << std::endl;
448 char hexResult[dataSz*2+1];
452 for(
unsigned int i=0;i<dataSz;++i)
454 sprintf(&hexResult[i*2],
"%2.2X", (
unsigned char)data[dataSz-1-i]);
457 __MOUT__<<
"hexResult[" << strlen(hexResult) <<
" nibbles]: " << std::string(hexResult) << std::endl;
461 retParameters.addParameter(
"dataResult",hexResult);
462 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
465 else if(request ==
"GetInterfaceMacros")
467 if(theFEInterfacesManager)
468 retParameters.addParameter(
"FEMacros",theFEInterfacesManager->getFEMacrosString(
469 std::to_string(getApplicationDescriptor()->getLocalId())));
471 retParameters.addParameter(
"FEMacros",
"");
473 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
476 else if(request ==
"RunInterfaceMacro")
478 if(!theFEInterfacesManager)
480 retParameters.addParameter(
"success",
"0");
481 retParameters.addParameter(
"outputArgs",
"");
482 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
486 std::string feMacroName = parameters.getValue(
"feMacroName");
487 std::string inputArgs = parameters.getValue(
"inputArgs");
488 std::string outputArgs = parameters.getValue(
"outputArgs");
495 theFEInterfacesManager->runFEMacro(InterfaceID,feMacroName,inputArgs,outputArgs);
497 catch(std::runtime_error &e)
499 __SS__ <<
"In Supervisor with LID=" << getApplicationDescriptor()->getLocalId()
500 <<
" the FE Macro named '" << feMacroName <<
"' with tartget FE '"
501 << InterfaceID <<
"' failed. Here is the error:\n\n" << e.what() << std::endl;
502 __MOUT_ERR__ <<
"\n" << ss.str();
504 outputArgs = ss.str();
508 retParameters.addParameter(
"success",success?
"1":
"0");
509 retParameters.addParameter(
"outputArgs",outputArgs);
511 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
516 __MOUT_WARN__ <<
"Unrecognized request received! '" << request <<
"'" << std::endl;
520 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"FailRequest",retParameters);
524 void CoreSupervisorBase::stateInitial(toolbox::fsm::FiniteStateMachine& fsm)
525 throw (toolbox::fsm::exception::Exception)
527 __MOUT__ <<
"CoreSupervisorBase::stateInitial" << std::endl;
531 void CoreSupervisorBase::stateHalted(toolbox::fsm::FiniteStateMachine& fsm)
532 throw (toolbox::fsm::exception::Exception)
534 __MOUT__ <<
"CoreSupervisorBase::stateHalted" << std::endl;
538 void CoreSupervisorBase::stateRunning(toolbox::fsm::FiniteStateMachine& fsm)
539 throw (toolbox::fsm::exception::Exception)
541 __MOUT__ <<
"CoreSupervisorBase::stateRunning" << std::endl;
545 void CoreSupervisorBase::stateConfigured(toolbox::fsm::FiniteStateMachine& fsm)
546 throw (toolbox::fsm::exception::Exception)
548 __MOUT__ <<
"CoreSupervisorBase::stateConfigured" << std::endl;
552 void CoreSupervisorBase::statePaused(toolbox::fsm::FiniteStateMachine& fsm)
553 throw (toolbox::fsm::exception::Exception)
555 __MOUT__ <<
"CoreSupervisorBase::statePaused" << std::endl;
559 void CoreSupervisorBase::inError (toolbox::fsm::FiniteStateMachine & fsm)
560 throw (toolbox::fsm::exception::Exception)
562 __MOUT__<<
"Fsm current state: " << theStateMachine_.getCurrentStateName()<< std::endl;
567 void CoreSupervisorBase::enteringError (toolbox::Event::Reference e)
568 throw (toolbox::fsm::exception::Exception)
570 __MOUT__<<
"Fsm current state: " << theStateMachine_.getCurrentStateName()
571 <<
"\n\nError Message: " <<
572 theStateMachine_.getErrorMessage() << std::endl;
573 toolbox::fsm::FailedEvent& failedEvent =
dynamic_cast<toolbox::fsm::FailedEvent&
>(*e);
574 std::ostringstream error;
575 error <<
"Failure performing transition from "
576 << failedEvent.getFromState()
578 << failedEvent.getToState()
579 <<
" exception: " << failedEvent.getException().what();
580 __MOUT_ERR__<< error.str() << std::endl;
586 void CoreSupervisorBase::transitionConfiguring(toolbox::Event::Reference e)
587 throw (toolbox::fsm::exception::Exception)
589 __MOUT__ <<
"transitionConfiguring" << std::endl;
592 SOAPUtilities::translate(theStateMachine_.getCurrentMessage()).
593 getParameters().getValue(
"ConfigurationGroupName"),
595 getParameters().getValue(
"ConfigurationGroupKey")));
597 __MOUT__ <<
"Configuration group name: " << theGroup.first <<
" key: " <<
598 theGroup.second << std::endl;
600 theConfigurationManager_->loadConfigurationGroup(
602 theGroup.second,
true);
609 for(
auto& it: theStateMachineImplementation_)
612 catch(
const std::runtime_error& e)
614 __SS__ <<
"Error was caught while configuring: " << e.what() << std::endl;
615 __MOUT_ERR__ <<
"\n" << ss.str();
616 theStateMachine_.setErrorMessage(ss.str());
617 throw toolbox::fsm::exception::Exception(
620 "CoreSupervisorBase::transitionConfiguring" ,
631 void CoreSupervisorBase::transitionHalting(toolbox::Event::Reference e)
632 throw (toolbox::fsm::exception::Exception)
634 __MOUT__ <<
"transitionHalting" << std::endl;
636 for(
auto& it: theStateMachineImplementation_)
642 catch(
const std::runtime_error& e)
645 if(theStateMachine_.getProvenanceStateName() ==
646 RunControlStateMachine::FAILED_STATE_NAME)
648 __MOUT_INFO__ <<
"Error was caught while halting (but ignoring because previous state was '" <<
649 RunControlStateMachine::FAILED_STATE_NAME <<
"'): " << e.what() << std::endl;
653 __SS__ <<
"Error was caught while halting: " << e.what() << std::endl;
654 __MOUT_ERR__ <<
"\n" << ss.str();
655 theStateMachine_.setErrorMessage(ss.str());
656 throw toolbox::fsm::exception::Exception(
659 "CoreSupervisorBase::transitionHalting" ,
669 void CoreSupervisorBase::transitionInitializing(toolbox::Event::Reference e)
670 throw (toolbox::fsm::exception::Exception)
672 __MOUT__ <<
"transitionInitializing" << std::endl;
679 void CoreSupervisorBase::transitionPausing(toolbox::Event::Reference e)
680 throw (toolbox::fsm::exception::Exception)
682 __MOUT__ <<
"transitionPausing" << std::endl;
686 for(
auto& it: theStateMachineImplementation_)
689 catch(
const std::runtime_error& e)
691 __SS__ <<
"Error was caught while pausing: " << e.what() << std::endl;
692 __MOUT_ERR__ <<
"\n" << ss.str();
693 theStateMachine_.setErrorMessage(ss.str());
694 throw toolbox::fsm::exception::Exception(
697 "CoreSupervisorBase::transitionPausing" ,
705 void CoreSupervisorBase::transitionResuming(toolbox::Event::Reference e)
706 throw (toolbox::fsm::exception::Exception)
711 __MOUT__ <<
"transitionResuming" << std::endl;
715 for(
auto& it: theStateMachineImplementation_)
718 catch(
const std::runtime_error& e)
720 __SS__ <<
"Error was caught while resuming: " << e.what() << std::endl;
721 __MOUT_ERR__ <<
"\n" << ss.str();
722 theStateMachine_.setErrorMessage(ss.str());
723 throw toolbox::fsm::exception::Exception(
726 "CoreSupervisorBase::transitionResuming" ,
734 void CoreSupervisorBase::transitionStarting(toolbox::Event::Reference e)
735 throw (toolbox::fsm::exception::Exception)
740 __MOUT__ <<
"transitionStarting" << std::endl;
744 for(
auto& it: theStateMachineImplementation_)
745 it->start(SOAPUtilities::translate(theStateMachine_.getCurrentMessage()).getParameters().getValue(
"RunNumber"));
747 catch(
const std::runtime_error& e)
749 __SS__ <<
"Error was caught while starting: " << e.what() << std::endl;
750 __MOUT_ERR__ <<
"\n" << ss.str();
751 theStateMachine_.setErrorMessage(ss.str());
752 throw toolbox::fsm::exception::Exception(
755 "CoreSupervisorBase::transitionStarting" ,
763 void CoreSupervisorBase::transitionStopping(toolbox::Event::Reference e)
764 throw (toolbox::fsm::exception::Exception)
766 __MOUT__ <<
"transitionStopping" << std::endl;
770 for(
auto& it: theStateMachineImplementation_)
773 catch(
const std::runtime_error& e)
775 __SS__ <<
"Error was caught while pausing: " << e.what() << std::endl;
776 __MOUT_ERR__ <<
"\n" << ss.str();
777 theStateMachine_.setErrorMessage(ss.str());
778 throw toolbox::fsm::exception::Exception(
781 "CoreSupervisorBase::transitionStopping" ,