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 INIT_MF(
"CoreSupervisorBase");
46 __COUT__ <<
"Begin!" << std::endl;
48 xgi::bind (
this, &CoreSupervisorBase::Default,
"Default" );
49 xgi::bind (
this, &CoreSupervisorBase::stateMachineXgiHandler,
"StateMachineXgiHandler");
50 xgi::bind (
this, &CoreSupervisorBase::request,
"Request");
52 xoap::bind(
this, &CoreSupervisorBase::stateMachineStateRequest,
"StateMachineStateRequest", XDAQ_NS_URI );
53 xoap::bind(
this, &CoreSupervisorBase::stateMachineErrorMessageRequest,
"StateMachineErrorMessageRequest", XDAQ_NS_URI );
54 xoap::bind(
this, &CoreSupervisorBase::macroMakerSupervisorRequest,
"MacroMakerSupervisorRequest", XDAQ_NS_URI );
55 xoap::bind(
this, &CoreSupervisorBase::workLoopStatusRequest,
"WorkLoopStatusRequest", XDAQ_NS_URI );
59 supervisorContextUID_ = theConfigurationManager_->__GET_CONFIG__(
XDAQContextConfiguration)->getContextUID(getApplicationContext()->getContextDescriptor()->getURL());
63 __COUT_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 __COUT_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_);
86 __COUT__ <<
"Done!" << std::endl;
92 CoreSupervisorBase::~CoreSupervisorBase(
void)
97 void CoreSupervisorBase::init(
void)
100 __COUT__ <<
"init CONTEXT!" << std::endl;
102 supervisorDescriptorInfo_.init(getApplicationContext());
104 __COUT__ <<
"Done!" << std::endl;
109 void CoreSupervisorBase::destroy(
void)
111 for(
auto& it: theStateMachineImplementation_)
113 theStateMachineImplementation_.clear();
117 void CoreSupervisorBase::Default(xgi::Input * in, xgi::Output * out )
118 throw (xgi::exception::Exception)
122 __COUT__<<
"Supervisor class " << supervisorClass_ << std::endl;
124 *out <<
"<!DOCTYPE HTML><html lang='en'><frameset col='100%' row='100%'><frame src='/WebPath/html/" << supervisorClassNoNamespace_ <<
"Supervisor.html?urn=" <<
125 this->getApplicationDescriptor()->getLocalId() <<
126 "'></frameset></html>";
130 void CoreSupervisorBase::request(xgi::Input * in, xgi::Output * out )
131 throw (xgi::exception::Exception)
135 cgicc::Cgicc cgi(in);
136 std::string write = CgiDataUtilities::getOrPostData(cgi,
"write");
137 std::string addr = CgiDataUtilities::getOrPostData(cgi,
"addr");
138 std::string data = CgiDataUtilities::getOrPostData(cgi,
"data");
140 __COUT__<<
"write " << write <<
" addr: " << addr <<
" data: " << data << std::endl;
142 unsigned long long int addr64,data64;
143 sscanf(addr.c_str(),
"%llu",&addr64);
144 sscanf(data.c_str(),
"%llu",&data64);
145 __COUT__<<
"write " << write <<
" addr: " << addr64 <<
" data: " << data64 << std::endl;
151 void CoreSupervisorBase::stateMachineXgiHandler(xgi::Input * in, xgi::Output * out )
152 throw (xgi::exception::Exception)
156 void CoreSupervisorBase::stateMachineResultXgiHandler(xgi::Input* in, xgi::Output* out )
157 throw (xgi::exception::Exception)
161 xoap::MessageReference CoreSupervisorBase::stateMachineXoapHandler(xoap::MessageReference message )
162 throw (xoap::exception::Exception)
164 __COUT__<<
"Soap Handler!" << std::endl;
165 stateMachineWorkLoopManager_.removeProcessedRequests();
166 stateMachineWorkLoopManager_.processRequest(message);
167 __COUT__<<
"Done - Soap Handler!" << std::endl;
172 xoap::MessageReference CoreSupervisorBase::stateMachineResultXoapHandler(xoap::MessageReference message )
173 throw (xoap::exception::Exception)
175 __COUT__<<
"Soap Handler!" << std::endl;
178 __COUT__<<
"Done - Soap Handler!" << std::endl;
183 bool CoreSupervisorBase::stateMachineThread(toolbox::task::WorkLoop* workLoop)
185 stateMachineSemaphore_.take();
186 __COUT__<<
"Re-sending message..." << SOAPUtilities::translate(stateMachineWorkLoopManager_.getMessage(workLoop)).getCommand() << std::endl;
187 std::string reply = send(this->getApplicationDescriptor(),stateMachineWorkLoopManager_.getMessage(workLoop));
188 stateMachineWorkLoopManager_.report(workLoop, reply, 100,
true);
189 __COUT__<<
"Done with message" << std::endl;
190 stateMachineSemaphore_.give();
196 xoap::MessageReference CoreSupervisorBase::stateMachineStateRequest(xoap::MessageReference message)
197 throw (xoap::exception::Exception)
199 __COUT__<<
"theStateMachine_.getCurrentStateName() = " << theStateMachine_.getCurrentStateName() << std::endl;
200 return SOAPUtilities::makeSOAPMessageReference(theStateMachine_.getCurrentStateName());
204 xoap::MessageReference CoreSupervisorBase::stateMachineErrorMessageRequest(xoap::MessageReference message)
205 throw (xoap::exception::Exception)
207 __COUT__<<
"theStateMachine_.getErrorMessage() = " << theStateMachine_.getErrorMessage() << std::endl;
210 retParameters.addParameter(
"ErrorMessage",theStateMachine_.getErrorMessage());
211 return SOAPUtilities::makeSOAPMessageReference(
"stateMachineErrorMessageRequestReply",retParameters);
221 xoap::MessageReference CoreSupervisorBase::macroMakerSupervisorRequest(
222 xoap::MessageReference message)
223 throw (xoap::exception::Exception)
225 __COUT__<<
"$$$$$$$$$$$$$$$$$" << std::endl;
232 parameters.addParameter(
"Request");
233 parameters.addParameter(
"InterfaceID");
236 parameters.addParameter(
"Address");
237 parameters.addParameter(
"Data");
240 parameters.addParameter(
"feMacroName");
241 parameters.addParameter(
"inputArgs");
242 parameters.addParameter(
"outputArgs");
244 SOAPMessenger::receive(message, parameters);
245 std::string request = parameters.getValue(
"Request");
246 std::string addressStr = parameters.getValue(
"Address");
247 std::string dataStr = parameters.getValue(
"Data");
248 std::string InterfaceID = parameters.getValue(
"InterfaceID");
250 __COUT__<<
"request: " << request << std::endl;
252 __COUT__<<
"Address: " << addressStr <<
" Data: "
253 << dataStr <<
" InterfaceID: " << InterfaceID << std::endl;
257 if(request ==
"GetInterfaces")
259 if(theFEInterfacesManager)
260 retParameters.addParameter(
"FEList",theFEInterfacesManager->getFEListString(
261 std::to_string(getApplicationDescriptor()->getLocalId())));
263 retParameters.addParameter(
"FEList",
"");
265 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
268 else if(request ==
"UniversalWrite")
270 if(!theFEInterfacesManager)
272 __COUT_INFO__ <<
"No FE Interface Manager! (So no write occurred)" << std::endl;
273 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"DataWritten",retParameters);
281 __COUT__<<
"theFEInterfacesManager->getInterfaceUniversalAddressSize(index) " <<
282 theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) << std::endl;
283 __COUT__<<
"theFEInterfacesManager->getInterfaceUniversalDataSize(index) " <<
284 theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) << std::endl;
293 __COUT__<<
"Translating address: ";
295 char address[theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID)];
297 if(addressStr.size()%2)
298 addressStr =
"0" + addressStr;
300 for(;i<addressStr.size() &&
301 i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
303 tmpHex[0] = addressStr[addressStr.size()-1-i-1];
304 tmpHex[1] = addressStr[addressStr.size()-1-i];
305 sscanf(tmpHex,
"%hhX",(
unsigned char*)&address[i/2]);
306 printf(
"%2.2X",(
unsigned char)address[i/2]);
309 for(;i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
312 printf(
"%2.2X",(
unsigned char)address[i/2]);
315 std::cout << std::endl;
317 __COUT__<<
"Translating data: ";
319 char data[theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID)];
322 dataStr =
"0" + dataStr;
325 for(;i<dataStr.size() &&
326 i/2 < theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) ; i+=2)
328 tmpHex[0] = dataStr[dataStr.size()-1-i-1];
329 tmpHex[1] = dataStr[dataStr.size()-1-i];
330 sscanf(tmpHex,
"%hhX",(
unsigned char*)&data[i/2]);
331 printf(
"%2.2X",(
unsigned char)data[i/2]);
334 for(;i/2 < theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) ; i+=2)
337 printf(
"%2.2X",(
unsigned char)data[i/2]);
340 std::cout << std::endl;
349 theFEInterfacesManager->universalWrite(InterfaceID,address,data);
354 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"DataWritten",retParameters);
356 else if(request ==
"UniversalRead")
358 if(!theFEInterfacesManager)
360 __COUT_INFO__ <<
"No FE Interface Manager! (So no read occurred)" << std::endl;
361 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
368 __COUT__<<
"theFEInterfacesManager->getInterfaceUniversalAddressSize(index) "
369 << theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) << std::endl;
370 __COUT__<<
"theFEInterfacesManager->getInterfaceUniversalDataSize(index) "
371 <<theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID) << std::endl;
377 __COUT__<<
"Translating address: ";
379 char address[theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID)];
381 if(addressStr.size()%2)
382 addressStr =
"0" + addressStr;
385 for(;i<addressStr.size() &&
386 i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
388 tmpHex[0] = addressStr[addressStr.size()-1-i-1];
389 tmpHex[1] = addressStr[addressStr.size()-1-i];
390 sscanf(tmpHex,
"%hhX",(
unsigned char*)&address[i/2]);
391 printf(
"%2.2X",(
unsigned char)address[i/2]);
394 for(;i/2 < theFEInterfacesManager->getInterfaceUniversalAddressSize(InterfaceID) ; i+=2)
397 printf(
"%2.2X",(
unsigned char)address[i/2]);
400 std::cout << std::endl;
402 unsigned int dataSz = theFEInterfacesManager->getInterfaceUniversalDataSize(InterfaceID);
411 if(theFEInterfacesManager->universalRead(InterfaceID, address, data) < 0)
413 retParameters.addParameter(
"dataResult",
"Time Out Error");
414 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
417 catch(
const std::runtime_error& e)
420 __MOUT_ERR__ <<
"Exception caught during read: " << e.what() << std::endl;
421 __COUT_ERR__ <<
"Exception caught during read: " << e.what() << std::endl;
422 retParameters.addParameter(
"dataResult",
"Time Out Error");
423 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
428 __MOUT_ERR__ <<
"Exception caught during read." << std::endl;
429 __COUT_ERR__ <<
"Exception caught during read." << std::endl;
430 retParameters.addParameter(
"dataResult",
"Time Out Error");
431 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
437 std::string str8(data);
439 __COUT__<<
"decResult[" << dataSz <<
" bytes]: " <<
440 *((
unsigned long long *)(&str8[0])) << std::endl;
444 char hexResult[dataSz*2+1];
448 for(
unsigned int i=0;i<dataSz;++i)
450 sprintf(&hexResult[i*2],
"%2.2X", (
unsigned char)data[dataSz-1-i]);
453 __COUT__<<
"hexResult[" << strlen(hexResult) <<
" nibbles]: " << std::string(hexResult) << std::endl;
457 retParameters.addParameter(
"dataResult",hexResult);
458 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"aa",retParameters);
461 else if(request ==
"GetInterfaceMacros")
463 if(theFEInterfacesManager)
464 retParameters.addParameter(
"FEMacros",theFEInterfacesManager->getFEMacrosString(
465 std::to_string(getApplicationDescriptor()->getLocalId())));
467 retParameters.addParameter(
"FEMacros",
"");
469 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
472 else if(request ==
"RunInterfaceMacro")
474 if(!theFEInterfacesManager)
476 retParameters.addParameter(
"success",
"0");
477 retParameters.addParameter(
"outputArgs",
"");
478 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
482 std::string feMacroName = parameters.getValue(
"feMacroName");
483 std::string inputArgs = parameters.getValue(
"inputArgs");
484 std::string outputArgs = parameters.getValue(
"outputArgs");
491 theFEInterfacesManager->runFEMacro(InterfaceID,feMacroName,inputArgs,outputArgs);
493 catch(std::runtime_error &e)
495 __SS__ <<
"In Supervisor with LID=" << getApplicationDescriptor()->getLocalId()
496 <<
" the FE Macro named '" << feMacroName <<
"' with tartget FE '"
497 << InterfaceID <<
"' failed. Here is the error:\n\n" << e.what() << std::endl;
498 __COUT_ERR__ <<
"\n" << ss.str();
500 outputArgs = ss.str();
504 retParameters.addParameter(
"success",success?
"1":
"0");
505 retParameters.addParameter(
"outputArgs",outputArgs);
507 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"Response",
512 __COUT_WARN__ <<
"Unrecognized request received! '" << request <<
"'" << std::endl;
516 return SOAPUtilities::makeSOAPMessageReference(supervisorClassNoNamespace_ +
"FailRequest",retParameters);
520 xoap::MessageReference CoreSupervisorBase::workLoopStatusRequest(xoap::MessageReference message)
521 throw (xoap::exception::Exception)
526 if(!theFEInterfacesManager)
528 __SS__ <<
"Invalid request for front-end workloop status from Supervisor without a FEVInterfacesManager."
530 __COUT_ERR__ << ss.str();
531 throw std::runtime_error(ss.str());
534 return SOAPUtilities::makeSOAPMessageReference(
535 (theFEInterfacesManager->allFEWorkloopsAreDone()?
"Done":
"Working"));
550 for(
unsigned int i = 0; i<theStateMachineImplementation_.size();++i)
554 theFEInterfacesManager =
556 if(!theFEInterfacesManager)
559 __SS__ <<
"Dynamic cast failure!" << std::endl;
560 __COUT_ERR__ << ss.str();
561 throw std::runtime_error(ss.str());
563 __COUT__ <<
"State Machine " << i <<
" WAS of type FEVInterfacesManager" << std::endl;
569 __COUT__ <<
"State Machine " << i <<
" was NOT of type FEVInterfacesManager" << std::endl;
573 __COUT__ <<
"theFEInterfacesManager pointer = " << theFEInterfacesManager << std::endl;
575 return theFEInterfacesManager;
579 void CoreSupervisorBase::stateInitial(toolbox::fsm::FiniteStateMachine& fsm)
580 throw (toolbox::fsm::exception::Exception)
582 __COUT__ <<
"CoreSupervisorBase::stateInitial" << std::endl;
586 void CoreSupervisorBase::stateHalted(toolbox::fsm::FiniteStateMachine& fsm)
587 throw (toolbox::fsm::exception::Exception)
589 __COUT__ <<
"CoreSupervisorBase::stateHalted" << std::endl;
593 void CoreSupervisorBase::stateRunning(toolbox::fsm::FiniteStateMachine& fsm)
594 throw (toolbox::fsm::exception::Exception)
596 __COUT__ <<
"CoreSupervisorBase::stateRunning" << std::endl;
600 void CoreSupervisorBase::stateConfigured(toolbox::fsm::FiniteStateMachine& fsm)
601 throw (toolbox::fsm::exception::Exception)
603 __COUT__ <<
"CoreSupervisorBase::stateConfigured" << std::endl;
607 void CoreSupervisorBase::statePaused(toolbox::fsm::FiniteStateMachine& fsm)
608 throw (toolbox::fsm::exception::Exception)
610 __COUT__ <<
"CoreSupervisorBase::statePaused" << std::endl;
614 void CoreSupervisorBase::inError (toolbox::fsm::FiniteStateMachine & fsm)
615 throw (toolbox::fsm::exception::Exception)
617 __COUT__<<
"Fsm current state: " << theStateMachine_.getCurrentStateName()<< std::endl;
622 void CoreSupervisorBase::enteringError (toolbox::Event::Reference e)
623 throw (toolbox::fsm::exception::Exception)
625 __COUT__<<
"Fsm current state: " << theStateMachine_.getCurrentStateName()
626 <<
"\n\nError Message: " <<
627 theStateMachine_.getErrorMessage() << std::endl;
628 toolbox::fsm::FailedEvent& failedEvent =
dynamic_cast<toolbox::fsm::FailedEvent&
>(*e);
629 std::ostringstream error;
630 error <<
"Failure performing transition from "
631 << failedEvent.getFromState()
633 << failedEvent.getToState()
634 <<
" exception: " << failedEvent.getException().what();
635 __COUT_ERR__<< error.str() << std::endl;
641 void CoreSupervisorBase::transitionConfiguring(toolbox::Event::Reference e)
642 throw (toolbox::fsm::exception::Exception)
644 __COUT__ <<
"transitionConfiguring" << std::endl;
647 SOAPUtilities::translate(theStateMachine_.getCurrentMessage()).
648 getParameters().getValue(
"ConfigurationGroupName"),
650 getParameters().getValue(
"ConfigurationGroupKey")));
652 __COUT__ <<
"Configuration group name: " << theGroup.first <<
" key: " <<
653 theGroup.second << std::endl;
655 theConfigurationManager_->loadConfigurationGroup(
657 theGroup.second,
true);
664 for(
auto& it: theStateMachineImplementation_)
667 catch(
const std::runtime_error& e)
669 __SS__ <<
"Error was caught while configuring: " << e.what() << std::endl;
670 __COUT_ERR__ <<
"\n" << ss.str();
671 theStateMachine_.setErrorMessage(ss.str());
672 throw toolbox::fsm::exception::Exception(
675 "CoreSupervisorBase::transitionConfiguring" ,
686 void CoreSupervisorBase::transitionHalting(toolbox::Event::Reference e)
687 throw (toolbox::fsm::exception::Exception)
689 __COUT__ <<
"transitionHalting" << std::endl;
691 for(
auto& it: theStateMachineImplementation_)
697 catch(
const std::runtime_error& e)
700 if(theStateMachine_.getProvenanceStateName() ==
701 RunControlStateMachine::FAILED_STATE_NAME)
703 __COUT_INFO__ <<
"Error was caught while halting (but ignoring because previous state was '" <<
704 RunControlStateMachine::FAILED_STATE_NAME <<
"'): " << e.what() << std::endl;
708 __SS__ <<
"Error was caught while halting: " << e.what() << std::endl;
709 __COUT_ERR__ <<
"\n" << ss.str();
710 theStateMachine_.setErrorMessage(ss.str());
711 throw toolbox::fsm::exception::Exception(
714 "CoreSupervisorBase::transitionHalting" ,
724 void CoreSupervisorBase::transitionInitializing(toolbox::Event::Reference e)
725 throw (toolbox::fsm::exception::Exception)
727 __COUT__ <<
"transitionInitializing" << std::endl;
734 void CoreSupervisorBase::transitionPausing(toolbox::Event::Reference e)
735 throw (toolbox::fsm::exception::Exception)
737 __COUT__ <<
"transitionPausing" << std::endl;
741 for(
auto& it: theStateMachineImplementation_)
744 catch(
const std::runtime_error& e)
746 __SS__ <<
"Error was caught while pausing: " << e.what() << std::endl;
747 __COUT_ERR__ <<
"\n" << ss.str();
748 theStateMachine_.setErrorMessage(ss.str());
749 throw toolbox::fsm::exception::Exception(
752 "CoreSupervisorBase::transitionPausing" ,
760 void CoreSupervisorBase::transitionResuming(toolbox::Event::Reference e)
761 throw (toolbox::fsm::exception::Exception)
766 __COUT__ <<
"transitionResuming" << std::endl;
770 for(
auto& it: theStateMachineImplementation_)
773 catch(
const std::runtime_error& e)
775 __SS__ <<
"Error was caught while resuming: " << e.what() << std::endl;
776 __COUT_ERR__ <<
"\n" << ss.str();
777 theStateMachine_.setErrorMessage(ss.str());
778 throw toolbox::fsm::exception::Exception(
781 "CoreSupervisorBase::transitionResuming" ,
789 void CoreSupervisorBase::transitionStarting(toolbox::Event::Reference e)
790 throw (toolbox::fsm::exception::Exception)
795 __COUT__ <<
"transitionStarting" << std::endl;
799 for(
auto& it: theStateMachineImplementation_)
800 it->start(SOAPUtilities::translate(theStateMachine_.getCurrentMessage()).getParameters().getValue(
"RunNumber"));
802 catch(
const std::runtime_error& e)
804 __SS__ <<
"Error was caught while starting: " << e.what() << std::endl;
805 __COUT_ERR__ <<
"\n" << ss.str();
806 theStateMachine_.setErrorMessage(ss.str());
807 throw toolbox::fsm::exception::Exception(
810 "CoreSupervisorBase::transitionStarting" ,
818 void CoreSupervisorBase::transitionStopping(toolbox::Event::Reference e)
819 throw (toolbox::fsm::exception::Exception)
821 __COUT__ <<
"transitionStopping" << std::endl;
825 for(
auto& it: theStateMachineImplementation_)
828 catch(
const std::runtime_error& e)
830 __SS__ <<
"Error was caught while pausing: " << e.what() << std::endl;
831 __COUT_ERR__ <<
"\n" << ss.str();
832 theStateMachine_.setErrorMessage(ss.str());
833 throw toolbox::fsm::exception::Exception(
836 "CoreSupervisorBase::transitionStopping" ,