30 #include "toolbox/BSem.h"
31 #include "toolbox/Runtime.h"
32 #include "toolbox/stacktrace.h"
33 #include "toolbox/net/Utils.h"
35 #include <boost/tokenizer.hpp>
37 #include "xcept/tools.h"
38 #include "xgi/Method.h"
40 #include "cgicc/CgiDefs.h"
41 #include "cgicc/Cgicc.h"
42 #include "cgicc/FormEntry.h"
46 #include <sys/utsname.h>
57 using namespace cgicc;
88 : xdaq::Application(s)
90 , log_(getApplicationLogger())
91 , evtProcessor_(log_, getApplicationDescriptor()->getInstance())
93 , epInitialized_(
false)
95 , autoRestartSlaves_(
false)
96 , slaveRestartDelaySecs_(10)
98 , hasPrescaleService_(
true)
99 , hasModuleWebRegistry_(
true)
100 , hasServiceWebRegistry_(
true)
101 , isRunNumberSetter_(
true)
102 , iDieStatisticsGathering_(
false)
105 , reasonForFailedState_()
106 , squidnet_(3128,
"http://localhost:8000/RELEASE-NOTES.txt")
107 , logRing_(logRingSize_)
108 , logRingIndex_(logRingSize_)
111 , nbSubProcessesReporting_(0)
117 , asReceiveMsgAndExecute_(0)
119 , wlReceivingMonitor_(0)
120 , asReceiveMsgAndRead_(0)
125 , supervising_(
false)
126 , wlSignalMonitor_(0)
127 , asSignalMonitor_(0)
128 , signalMonitorActive_(
false)
129 , monitorInfoSpace_(0)
130 , monitorLegendaInfoSpace_(0)
131 , applicationInfoSpace_(0)
134 , scalersInfoSpace_(0)
135 , scalersLegendaInfoSpace_(0)
138 , wlScalersActive_(
false)
142 , wlSummarizeActive_(
false)
155 , edm_init_done_(
true)
156 , crashesThisRun_(
false)
157 , rlimit_coresize_changed_(
false)
160 , datasetCounting_(
true)
162 using namespace utils;
166 names_.push_back(
"nbProcessed" );
167 names_.push_back(
"nbAccepted" );
168 names_.push_back(
"epMacroStateInt");
169 names_.push_back(
"epMicroStateInt");
173 LOG4CPLUS_ERROR(getApplicationLogger(),
"Failed to create pipe");
184 getApplicationDescriptor()->getContextDescriptor()->getURL()+
"/"+
185 getApplicationDescriptor()->getURN();
186 class_ =getApplicationDescriptor()->getClassName();
187 instance_=getApplicationDescriptor()->getInstance();
189 LOG4CPLUS_INFO(getApplicationLogger(),
sourceId_ <<
" constructor" );
190 LOG4CPLUS_INFO(getApplicationLogger(),
"CMSSW_BASE:"<<getenv(
"CMSSW_BASE"));
192 getApplicationDescriptor()->setAttribute(
"icon",
"/evf/images/epicon.jpg");
194 xdata::InfoSpace *ispace = getApplicationInfoSpace();
201 ispace->fireItemAvailable(
"runNumber", &
runNumber_ );
202 ispace->fireItemAvailable(
"outputEnabled", &
outPut_ );
204 ispace->fireItemAvailable(
"hasSharedMemory", &
hasShMem_);
214 ispace->fireItemAvailable(
"forkInEDM" ,&
forkInEDM_ );
218 ispace->fireItemAvailable(
"iDieUrl", &
iDieUrl_ );
223 getApplicationInfoSpace()->addItemChangedListener(
"parameterSet",
this);
224 getApplicationInfoSpace()->addItemChangedListener(
"outputEnabled",
this);
231 std::string monInfoSpaceName=
"evf-eventprocessor-status-monitor";
232 toolbox::net::URN urn = this->createQualifiedInfoSpace(monInfoSpaceName);
235 std::string monLegendaInfoSpaceName=
"evf-eventprocessor-status-legenda";
236 urn = this->createQualifiedInfoSpace(monLegendaInfoSpaceName);
248 std::string scalersInfoSpaceName=
"evf-eventprocessor-scalers-monitor";
249 urn = this->createQualifiedInfoSpace(scalersInfoSpaceName);
252 std::string scalersLegendaInfoSpaceName=
"evf-eventprocessor-scalers-legenda";
253 urn = this->createQualifiedInfoSpace(scalersLegendaInfoSpaceName);
289 LOG4CPLUS_DEBUG(getApplicationLogger(),
290 "Trying to create message service presence ");
296 LOG4CPLUS_ERROR(getApplicationLogger(),
297 "Unable to create message service presence ");
301 LOG4CPLUS_ERROR(getApplicationLogger(),
"Unknown Exception");
305 typedef std::set<xdaq::ApplicationDescriptor*> AppDescSet_t;
306 typedef AppDescSet_t::iterator AppDescIter_t;
309 getApplicationContext()->getDefaultZone()->
310 getApplicationDescriptors(
"RCMSStateListener");
313 LOG4CPLUS_WARN(getApplicationLogger(),
314 "MonitorReceiver not found, perhaphs it has not been defined ? Scalers updater wl will bail out!");
319 AppDescIter_t it = rcms.begin();
335 AppDescSet_t setOfiDie=
336 getApplicationContext()->getDefaultZone()->
337 getApplicationDescriptors(
"evf::iDie");
339 for (AppDescIter_t it=setOfiDie.begin();it!=setOfiDie.end();++it)
340 if ((*it)->getInstance()==0)
341 iDieUrl_ = (*it)->getContextDescriptor()->getURL() +
"/" + (*it)->getURN();
350 PROT_READ | PROT_WRITE,
351 MAP_ANONYMOUS | MAP_SHARED, 0, 0);
353 perror(
"mmap error\n");
410 LOG4CPLUS_INFO(getApplicationLogger(),
"Start configuring ...");
438 std::string slegenda = ((xdata::String*)legenda)->value_;
444 if (dsLegenda.value_.size())
450 LOG4CPLUS_INFO(getApplicationLogger(),
"coud not send legenda"
454 LOG4CPLUS_ERROR(getApplicationLogger(),
"Failed to get or send legenda."
460 LOG4CPLUS_INFO(getApplicationLogger(),
"Finished configuring!");
461 localLog(
"-I- Configuration completed");
512 LOG4CPLUS_INFO(getApplicationLogger(),
"Start enabling...");
549 std::string slegenda = ((xdata::String*)legenda)->value_;
555 if (dsLegenda.value_.size())
561 LOG4CPLUS_INFO(getApplicationLogger(),
"could not send legenda"
565 LOG4CPLUS_ERROR(getApplicationLogger(),
"Failed to get or send legenda."
594 if (nbExpectedEPWriters==0) nbExpectedEPWriters=1;
596 for (
unsigned int i=0;
i<shmOutputs.size();
i++) {
597 shmOutputs[
i]->setNExpectedEPs(nbExpectedEPWriters);
603 LOG4CPLUS_ERROR(getApplicationLogger(),
"Thrown Exception while setting nExpectedEPs in shmOutputs");
615 retval =
subs_[
i].forkNew();
622 int retval = pthread_mutex_destroy(&
stop_lock_);
623 if(retval != 0) perror(
"error");
625 if(retval != 0) perror(
"error");
656 LOG4CPLUS_INFO(getApplicationLogger(),
"Finished enabling!");
664 LOG4CPLUS_INFO(getApplicationLogger(),
"Finished enabling!");
675 bool waitedForEDM=
false;
679 LOG4CPLUS_WARN(
log_,
"MASTER EP: Stopping while EP busy in beginRun. waiting " <<count<<
"sec");
684 if (waitedForEDM)
sleep(5);
706 std::ostringstream ost;
708 LOG4CPLUS_ERROR(getApplicationLogger(),ost.str());
717 LOG4CPLUS_WARN(getApplicationLogger(),
718 "Master edm::EventProcessor still running after "<< (30-count-1) <<
" seconds. \"sem_post\" was executed again" );
722 std::ostringstream ost;
724 ost <<
"Timeout waiting for Master edm::EventProcessor to go stopping state "
727 ost <<
"Timeout waiting for Master edm::EventProcessor to go stopping state "<<
evtProcessor_->
stateName(st);
728 LOG4CPLUS_ERROR(getApplicationLogger(),ost.str());
767 LOG4CPLUS_INFO(getApplicationLogger(),
"Start halting ...");
793 LOG4CPLUS_INFO(getApplicationLogger(),
"Finished halting!");
813 if (e.type()==
"ItemChangedEvent" &&
fsm_.
stateName()->toString()!=
"Halted") {
814 std::string item =
dynamic_cast<xdata::ItemChangedEvent&
>(
e).itemName();
816 if ( item ==
"parameterSet") {
817 LOG4CPLUS_WARN(getApplicationLogger(),
818 "HLT Menu changed, force reinitialization of EventProcessor");
821 if ( item ==
"outputEnabled") {
823 LOG4CPLUS_WARN(getApplicationLogger(),
824 (
outprev_ ?
"Disabling " :
"Enabling ")<<
"global output");
829 if (item ==
"globalInputPrescale") {
830 LOG4CPLUS_WARN(getApplicationLogger(),
831 "Setting global input prescale has no effect "
832 <<
"in this version of the code");
834 if ( item ==
"globalOutputPrescale") {
835 LOG4CPLUS_WARN(getApplicationLogger(),
836 "Setting global output prescale has no effect "
837 <<
"in this version of the code");
846 for (
unsigned int i=0;
i<
subs_.size();
i++)
848 if (
i!=0) *out <<
",";
855 using namespace cgicc;
857 std::ostringstream ost;
862 for(
std::map<std::string, std::string, std::less<std::string> >::iterator mit =
863 mycgi->getEnvironment().begin();
864 mit != mycgi->getEnvironment().end(); mit++)
865 ost << mit->first <<
"%" << mit->second <<
";";
866 std::vector<FormEntry>
els = cgi.getElements() ;
867 std::vector<FormEntry> el1;
868 cgi.getElement(
"method",el1);
869 std::vector<FormEntry> el2;
870 cgi.getElement(
"process",el2);
872 std::string meth = el1[0].getValue();
875 std::string
mod = el2[0].getValue();
876 pid = atoi(mod.c_str());
877 for(; i <
subs_.size(); i++)
880 *out <<
"ERROR 404 : Process " <<
pid <<
" Not Found !" << std::endl;
883 if(
subs_[i].alive() != 1){
884 *out <<
"ERROR 405 : Process " <<
pid <<
" Not Alive !" << std::endl;
888 strncpy(msg1->mtext,meth.c_str(),meth.length());
889 strncpy(msg1->mtext+meth.length(),ost.str().c_str(),ost.str().length());
891 unsigned int keep_supersleep_original_value =
superSleepSec_.value_;
895 std::vector<char *>
pieces;
897 unsigned long retval1 =
subs_[
i].rcvNonBlocking(msg,
true);
902 unsigned int nbytes = atoi(msg->mtext);
904 char *buf=
new char[nbytes];
907 <<
"CAREFUL HERE, read less bytes than expected from pipe in subWeb" << std::endl;
908 pieces.push_back(buf);
911 for(
unsigned int j = 0;
j < pieces.size();
j++){
926 *
out <<
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"
927 <<
"<html><head><title>" << getApplicationDescriptor()->getClassName() << (
nbSubProcesses_.value_ > 0 ?
"MP " :
" ")
928 << getApplicationDescriptor()->getInstance() <<
"</title>"
929 <<
"<meta http-equiv=\"REFRESH\" content=\"0;url=/evf/html/defaultBasePage.html\">"
941 std::string urn = getApplicationDescriptor()->getURN();
943 *
out <<
"<!-- base href=\"/" << urn
944 <<
"\"> -->" << std::endl;
945 *
out <<
"<html>" << std::endl;
946 *
out <<
"<head>" << std::endl;
947 *
out <<
"<link type=\"text/css\" rel=\"stylesheet\"";
948 *
out <<
" href=\"/evf/html/styles.css\"/>" << std::endl;
949 *
out <<
"<title>" << getApplicationDescriptor()->getClassName()
950 << getApplicationDescriptor()->getInstance()
951 <<
" MAIN</title>" << std::endl;
952 *
out <<
"</head>" << std::endl;
953 *
out <<
"<body>" << std::endl;
954 *
out <<
"<table border=\"0\" width=\"100%\">" << std::endl;
955 *
out <<
"<tr>" << std::endl;
956 *
out <<
" <td align=\"left\">" << std::endl;
957 *
out <<
" <img" << std::endl;
958 *
out <<
" align=\"middle\"" << std::endl;
959 *
out <<
" src=\"/evf/images/spoticon.jpg\"" << std::endl;
960 *
out <<
" alt=\"main\"" << std::endl;
961 *
out <<
" width=\"64\"" << std::endl;
962 *
out <<
" height=\"64\"" << std::endl;
963 *
out <<
" border=\"\"/>" << std::endl;
964 *
out <<
" <b>" << std::endl;
965 *
out << getApplicationDescriptor()->getClassName()
966 << getApplicationDescriptor()->getInstance() << std::endl;
968 *
out <<
" </b>" << std::endl;
969 *
out <<
" </td>" << std::endl;
970 *
out <<
" <td width=\"32\">" << std::endl;
971 *
out <<
" <a href=\"/urn:xdaq-application:lid=3\">" << std::endl;
972 *
out <<
" <img" << std::endl;
973 *
out <<
" align=\"middle\"" << std::endl;
974 *
out <<
" src=\"/hyperdaq/images/HyperDAQ.jpg\"" << std::endl;
975 *
out <<
" alt=\"HyperDAQ\"" << std::endl;
976 *
out <<
" width=\"32\"" << std::endl;
977 *
out <<
" height=\"32\"" << std::endl;
978 *
out <<
" border=\"\"/>" << std::endl;
979 *
out <<
" </a>" << std::endl;
980 *
out <<
" </td>" << std::endl;
981 *
out <<
" <td width=\"32\">" << std::endl;
982 *
out <<
" </td>" << std::endl;
983 *
out <<
" <td width=\"32\">" << std::endl;
984 *
out <<
" <a href=\"/" << urn <<
"/\">" << std::endl;
985 *
out <<
" <img" << std::endl;
986 *
out <<
" align=\"middle\"" << std::endl;
987 *
out <<
" src=\"/evf/images/epicon.jpg\"" << std::endl;
988 *
out <<
" alt=\"main\"" << std::endl;
989 *
out <<
" width=\"32\"" << std::endl;
990 *
out <<
" height=\"32\"" << std::endl;
991 *
out <<
" border=\"\"/>" << std::endl;
992 *
out <<
" </a>" << std::endl;
993 *
out <<
" </td>" << std::endl;
994 *
out <<
"</tr>" << std::endl;
995 *
out <<
"</table>" << std::endl;
997 *
out <<
"<hr/>" << std::endl;
999 std::ostringstream ost;
1001 ost <<
"/SubWeb?process=" << getpid() <<
"&method=moduleWeb&";
1003 ost <<
"/moduleWeb?";
1010 *
out <<
"<td>HLT Unconfigured</td>" << std::endl;
1011 *
out <<
"</table>" << std::endl;
1013 *
out <<
"<br><textarea rows=" << 10 <<
" cols=80 scroll=yes>" << std::endl;
1015 *
out <<
"</textarea><P>" << std::endl;
1017 *
out <<
"</body>" << std::endl;
1018 *
out <<
"</html>" << std::endl;
1026 out->getHTTPResponseHeader().addHeader(
"Content-Type",
1027 "application/octet-stream" );
1028 out->getHTTPResponseHeader().addHeader(
"Content-Transfer-Encoding",
1042 std::string slegenda = ((xdata::String*)legenda)->value_;
1043 *
out << slegenda << std::endl;
1058 errmsg =
"Failed to set to attach DQM service to shared memory: " + (std::string)e.
what();
1072 if (!success) errmsg =
"Failed to attach DQM service to shared memory";
1075 errmsg =
"Failed to attach DQM service to shared memory: " + (std::string)e.
what();
1090 if (!success) errmsg =
"Failed to detach DQM service from shared memory";
1093 errmsg =
"Failed to detach DQM service from shared memory: " + (std::string)e.
what();
1101 std::ostringstream oss;
1120 gettimeofday(&tv,0);
1121 tm *uptm = localtime(&tv.tv_sec);
1122 char datestring[256];
1123 strftime(datestring,
sizeof(datestring),
"%c", uptm);
1128 timestamp <<
" at " << datestring;
1129 m += timestamp.str();
1137 toolbox::task::getWorkLoopFactory()->getWorkLoop(
"Supervisor",
1146 std::string
msg =
"Failed to start workloop 'Supervisor'.";
1155 toolbox::task::getWorkLoopFactory()->getWorkLoop(
"Receiving",
1164 std::string
msg =
"Failed to start workloop 'Receiving'.";
1172 toolbox::task::getWorkLoopFactory()->getWorkLoop(
"ReceivingM",
1183 std::string
msg =
"Failed to start workloop 'ReceivingM'.";
1196 getrlimit(RLIMIT_CORE,&rl);
1198 setrlimit(RLIMIT_CORE,&rl);
1214 LOG4CPLUS_ERROR(getApplicationLogger(),
"Failed to go to Stopping state in slave EP, pid "
1215 << getpid() <<
" The state on Stop event was not consistent");
1222 LOG4CPLUS_ERROR(getApplicationLogger(),
"Slave EP 'receiving' workloop: exception " << getpid());
1230 LOG4CPLUS_ERROR(getApplicationLogger(),
"SLAVE:Unable to destroy MessageServicePresence. pid:" << getpid() );
1238 _exit(EXIT_SUCCESS);
1241 _exit(EXIT_SUCCESS);
1244 LOG4CPLUS_ERROR(getApplicationLogger(),
"Slave EP pid:" << getpid() <<
" receiving WorkLoop exception: "<<e.what());
1269 for(
unsigned int i = 0;
i <
subs_.size();
i++)
1271 if(
subs_[
i].alive()==-1000)
continue;
1273 pid_t sub_pid =
subs_[
i].pid();
1274 pid_t killedOrNot = waitpid(sub_pid,&sl,WNOHANG);
1276 if(killedOrNot && killedOrNot==sub_pid) {
1280 subs_[
i].setStatus((WIFEXITED(sl) != 0 ? 0 : -1));
1281 std::ostringstream ost;
1282 if(
subs_[
i].alive()==0) ost <<
" process exited with status " << WEXITSTATUS(sl);
1283 else if(WIFSIGNALED(sl)!=0) {
1284 ost <<
" process terminated with signal " << WTERMSIG(sl);
1286 else ost <<
" process stopped ";
1292 subs_[
i].setReasonForFailed(ost.str());
1295 std::ostringstream ost1;
1296 ost1 <<
"-E- Slave " <<
subs_[
i].pid() << ost.str();
1304 if(stopping)
return true;
1309 gettimeofday(&newtv,0);
1312 std::ostringstream ostr;
1313 ostr <<
" No more slave EP crashes on this machine in last 15 min. resetting core size limits";
1315 LOG4CPLUS_INFO(getApplicationLogger(),ostr.str());
1318 for (
unsigned int i = 0;
i <
subs_.size();
i++) {
1321 subs_[
i].post(master_message_rlr_,
false);
1336 for(
unsigned int i = 0;
i <
subs_.size();
i++)
1338 if(
subs_[
i].alive() != 1){
1339 if(
subs_[
i].countdown() == 0)
1341 if(
subs_[
i].restartCount()>2){
1342 LOG4CPLUS_WARN(getApplicationLogger(),
" Not restarting subprocess in slot " <<
i
1343 <<
" - maximum restart count reached");
1344 std::ostringstream ost1;
1345 ost1 <<
"-W- Dead Process in slot " <<
i <<
" reached maximum restart count";
1349 sentinelException, ost1.str());
1350 notifyQualified(
"error",sentinelException);
1354 subs_[
i].restartCount()++;
1364 int retval = pthread_mutex_destroy(&
stop_lock_);
1365 if(retval != 0) perror(
"error");
1367 if(retval != 0) perror(
"error");
1375 ((xdata::UnsignedInteger32*)(lsid))->value_--;
1379 std::cout <<
"trouble with lsindex during restart" << std::endl;
1384 ((xdata::Boolean*)(lstb))->value_ =
false;
1388 std::cout <<
"trouble with resetting flag for eol recovery " << std::endl;
1398 std::ostringstream ost1;
1399 ost1 <<
"-I- New Process " << rr <<
" forked for slot " <<
i;
1410 xdata::Serializable *lsid = 0;
1411 xdata::Serializable *psid = 0;
1412 xdata::Serializable *dqmp = 0;
1413 xdata::UnsignedInteger32 *dqm = 0;
1426 LOG4CPLUS_INFO(getApplicationLogger(),
"could not retrieve some data - " << e.what());
1432 xdata::UnsignedInteger32*nbp = ((xdata::UnsignedInteger32*)
nbProcessed);
1433 xdata::UnsignedInteger32*nba = ((xdata::UnsignedInteger32*)
nbAccepted);
1434 xdata::UnsignedInteger32*
ls = ((xdata::UnsignedInteger32*)lsid);
1435 xdata::UnsignedInteger32*ps = ((xdata::UnsignedInteger32*)psid);
1437 dqm = (xdata::UnsignedInteger32*)dqmp;
1438 if(dqm) dqm->value_ = 0;
1446 for(
unsigned int i = 0;
i <
subs_.size();
i++)
1461 if(!
subs_[
i].inInconsistentState() &&
1466 std::ostringstream ost;
1467 ost <<
"edm::eventprocessor slot " <<
i <<
" process id "
1468 <<
subs_[
i].pid() <<
" not in Running state : Mstate="
1471 <<
" - Look into possible error messages from HLT process";
1472 LOG4CPLUS_WARN(getApplicationLogger(),ost.str());
1474 nbp->value_ +=
subs_[
i].params().nbp;
1475 nba->value_ +=
subs_[
i].params().nba;
1476 if(dqm)dqm->value_ += p->
dqm;
1479 if(p->
ls > ls->value_) ls->value_ = p->
ls;
1480 if(p->
ps != ps->value_) ps->value_ = p->
ps;
1483 nbp->value_ +=
subs_[
i].get_save_nbp();
1484 nba->value_ +=
subs_[
i].get_save_nba();
1488 LOG4CPLUS_INFO(getApplicationLogger(),
1489 "could not send/receive msg on slot "
1490 <<
i <<
" - " << e.what());
1496 nbp->value_ +=
subs_[
i].get_save_nbp();
1497 nba->value_ +=
subs_[
i].get_save_nba();
1502 for(
unsigned int i = 0;
i <
subs_.size();
i++)
1504 if(
subs_[
i].params().nbp == 0){
1508 subs_[
i].found_invalid();
1509 if(
subs_[
i].nfound_invalid() > 60){
1511 subs_[
i].post(msg3,
false);
1512 std::ostringstream ost1;
1513 ost1 <<
"-W- Process in slot " <<
i <<
" Never reached the running state - forcestopping it";
1515 LOG4CPLUS_ERROR(getApplicationLogger(),ost1.str());
1517 sentinelException, ost1.str());
1518 notifyQualified(
"error",sentinelException);
1528 LOG4CPLUS_INFO(getApplicationLogger(),
"std exception - " << e.what());
1531 LOG4CPLUS_INFO(getApplicationLogger(),
"unknown exception ");
1535 for(
unsigned int i = 0;
i <
subs_.size();
i++)
1537 if(
subs_[
i].alive()==-1000)
1551 LOG4CPLUS_ERROR(
log_,
"Exception from fireItemGroupChanged: " << e.what());
1562 toolbox::task::getWorkLoopFactory()->getWorkLoop(
"Scalers",
1572 std::string
msg =
"Failed to start workloop 'Scalers'.";
1583 toolbox::task::getWorkLoopFactory()->getWorkLoop(
"Summary",
1594 std::string
msg =
"Failed to start workloop 'Summarize'.";
1612 std::cout << getpid()<<
" Scalers workloop, bailing out, no evtProcessor " << std::endl;
1620 if(ret!=0)
std::cout <<
"scalers workloop, error posting to sqs_ " << errno << std::endl;
1632 bool atLeastOneProcessUpdatedSuccessfully =
false;
1634 for (
unsigned int i = 0;
i <
subs_.size();
i++)
1646 bool insync =
false;
1647 bool exception_caught =
false;
1655 <<
" " <<
subs_[
i].alive() <<
" " << strerror(errno) << std::endl;
1656 exception_caught =
true;
1667 if(exception_caught)
continue;
1677 atLeastOneProcessUpdatedSuccessfully =
true;
1681 else std::cout <<
"msgrcv returned error " << errno << std::endl;
1684 if(atLeastOneProcessUpdatedSuccessfully){
1692 LOG4CPLUS_WARN(getApplicationLogger(),
"Summarize loop: no process updated successfully - sleep 10 seconds before trying again");
1730 LOG4CPLUS_INFO(getApplicationLogger(),
"coud not send statistics"
1752 strncpy(msg1->mtext,out.str().c_str(),out.str().size());
1759 xdata::Serializable *dqmp = 0;
1760 xdata::UnsignedInteger32 *dqm = 0;
1766 dqm = (xdata::UnsignedInteger32*)dqmp;
1777 if(dqm) data->
dqm = dqm->value_;
else data->
dqm = 0;
1787 bool running =
true;
1790 int retval = pthread_mutex_lock(&
stop_lock_);
1791 if(retval != 0) perror(
"error");
1793 if(count>5) _exit(-1);
1795 if(running) {
::sleep(1); count++;}
1805 unsigned int bytesToSend = 0;
1808 size_t pos = query.find_first_of(
"&");
1811 if(pos!=std::string::npos)
1813 method = query.substr(0,pos);
1814 args = query.substr(pos+1,query.length()-pos-1);
1819 if(method==
"Spotlight")
1823 else if(method==
"procStat")
1827 else if(method==
"moduleWeb")
1830 boost::char_separator<char> sep(
";");
1831 boost::tokenizer<boost::char_separator<char> > tokens(args, sep);
1832 for (
boost::tokenizer<boost::char_separator<char> >::iterator tok_iter = tokens.begin();
1833 tok_iter != tokens.end(); ++tok_iter){
1834 size_t pos = (*tok_iter).find_first_of(
"%");
1835 if(pos != std::string::npos){
1836 std::string
first = (*tok_iter).substr(0 , pos);
1837 std::string
second = (*tok_iter).substr(pos+1, (*tok_iter).length()-pos-1);
1843 else if(method==
"Default")
1849 out <<
"Error 404!!!!!!!!" << std::endl;
1853 bytesToSend = out.str().size();
1854 unsigned int cycle = 0;
1860 while(bytesToSend !=0){
1867 bytesToSend -= msgSize;
1888 toolbox::task::getWorkLoopFactory()->getWorkLoop(
"SignalMonitor",
1898 std::string
msg =
"Failed to start workloop 'SignalMonitor'. (3)";
1909 std::cout <<
" received signal notification from slave!"<< std::endl;
1915 if (!running && !enabling) {
1927 getrlimit(RLIMIT_CORE,&rlold);
1928 rlimit rlnew = rlold;
1930 setrlimit(RLIMIT_CORE,&rlnew);
1935 for (
unsigned int i = min;
i <
subs_.size();
i++) {
1938 subs_[
i].post(master_message_rli_,
false);
1943 std::ostringstream ostr;
1945 <<
". Disabling core dumps for next 15 minutes in this FilterUnit";
1946 LOG4CPLUS_WARN(getApplicationLogger(),ostr.str());
1989 std::ostringstream oss;
1990 oss<<
"EventProcessor::runAsync returned status code " << sc;
2007 std::cout <<
"exception " << (std::string)e.what() << std::endl;
2021 unsigned int forkFrom=0;
2023 if (forkParams->
slotId>=0) {
2024 forkFrom=forkParams->
slotId;
2025 forkTo=forkParams->
slotId+1;
2032 for (
unsigned int i=0;
i<shmOutputs.size();
i++) {
2034 shmOutputs[
i]->unregisterFromShm();
2036 shmOutputs[
i]->stop();
2042 reasonForFailedState_ = (std::string)
"Thrown exception while disconnecting ShmOutputModule from Shm: " + e.what();
2057 if (currentState!=
"stopping") {
2062 LOG4CPLUS_ERROR(getApplicationLogger(),
"Unable to destroy MessageService thread before fork!");
2066 if (currentState==
"stopping") {
2067 LOG4CPLUS_ERROR(getApplicationLogger(),
"Can not fork subprocesses in state " <<
fsm_.
stateName()->toString());
2073 else for(
unsigned int i=forkFrom;
i<forkTo;
i++)
2075 int retval =
subs_[
i].forkNew();
2083 int retval = pthread_mutex_destroy(&
stop_lock_);
2084 if(retval != 0) perror(
"error");
2086 if(retval != 0) perror(
"error");
2096 LOG4CPLUS_ERROR(getApplicationLogger(),
2097 "SLAVE: Unable to create message service presence. pid:"<<getpid());
2101 LOG4CPLUS_ERROR(getApplicationLogger(),
"SLAVE: Unknown Exception in MessageServicePresence. pid:"<<getpid());
2110 for (
unsigned int i=0;
i<shmOutputs.size();
i++)
2116 LOG4CPLUS_ERROR(getApplicationLogger(),
"Unknown Exception (ShmOutputModule sending InitMsg (pid:"<<getpid() <<
")");
2127 LOG4CPLUS_WARN(getApplicationLogger(),
"Failed to Stop/Enable FSM of the restarted slave EP");
2132 ((xdata::UnsignedInteger32*)(lsid))->value_--;
2136 std::cout <<
"trouble with lsindex during restart" << std::endl;
2141 ((xdata::Boolean*)(lstb))->value_ =
false;
2145 std::cout <<
"trouble with resetting flag for eol recovery " << std::endl;
2171 sigset_t tmpset_thread;
2172 sigemptyset(&tmpset_thread);
2173 sigaddset(&tmpset_thread, SIGQUIT);
2174 sigaddset(&tmpset_thread, SIGILL);
2175 sigaddset(&tmpset_thread, SIGABRT);
2176 sigaddset(&tmpset_thread, SIGFPE);
2177 sigaddset(&tmpset_thread, SIGSEGV);
2178 sigaddset(&tmpset_thread, SIGALRM);
2180 pthread_sigmask(SIG_UNBLOCK,&tmpset_thread,0);
2183 struct sigaction sa;
2185 memset(&tmpset,0,
sizeof(tmpset));
2186 sigemptyset(&tmpset);
2188 sa.sa_flags=SA_RESETHAND | SA_SIGINFO;
2192 sigaction(SIGQUIT,&sa,0);
2193 sigaction(SIGILL,&sa,0);
2194 sigaction(SIGABRT,&sa,0);
2195 sigaction(SIGFPE,&sa,0);
2196 sigaction(SIGSEGV,&sa,0);
2198 sigaction(SIGALRM,&sa,0);
2208 std::ostringstream ost1;
2209 ost1 <<
"-I- New Process " << retval <<
" forked for slot " << forkParams->
slotId;
2225 LOG4CPLUS_ERROR(getApplicationLogger(),
2226 "Unable to recreate message service presence ");
2230 LOG4CPLUS_ERROR(getApplicationLogger(),
"Unknown Exception in MessageServicePresence");
2270 std::ostringstream oss;
2271 oss<<
"EventProcessor::runAsync returned status code " << sc;
2308 LOG4CPLUS_DEBUG(
log_,
" restarting subprocess in slot "<< slotId <<
": posting on control semaphore");
2323 LOG4CPLUS_INFO(getApplicationLogger(),
"waiting for edm::EventProcessor to start before enabling watchdog");
2353 LOG4CPLUS_ERROR(getApplicationLogger(),
2354 "Unable to create message service presence ");
2358 LOG4CPLUS_ERROR(getApplicationLogger(),
"Unknown Exception");
2379 LOG4CPLUS_INFO(getApplicationLogger(),
"Start stopping :) ...");
2409 LOG4CPLUS_WARN(getApplicationLogger(),
2410 "In failed STOP - success detaching DQM from Shm. pid:" << getpid());
2423 LOG4CPLUS_FATAL(getApplicationLogger(),
"STOP failed: "
2429 LOG4CPLUS_INFO(getApplicationLogger(),
"Finished stopping!");
2440 for(
unsigned int i = 0;
i <
subs_.size();
i++)
2444 processes_to_stop[
i] =
true;
2445 subs_[
i].post(msg,
false);
2449 for(
unsigned int i = 0;
i <
subs_.size();
i++)
2452 if(processes_to_stop[
i]){
2454 subs_[
i].rcv(msg1,
false);
2457 std::ostringstream ost;
2458 ost <<
"failed to get STOP - errno ->" << errno <<
" " << e.what();
2473 while(
subs_[i].alive()>0) ::usleep(10000);
2482 std::string urn = getApplicationDescriptor()->getURN();
2486 if(
myProcess_) {
std::cout <<
"microstate called for child! bail out" << std::endl;
return;}
2488 <<
"</td><td>"<< (
myProcess_ ?
"S" :
"M") <<
"</td><td>" <<
nblive_ <<
"</td><td>"
2489 <<
nbdead_ <<
"</td><td><a href=\"/" << urn <<
"/procStat\">" << getpid() <<
"</a></td>";
2496 for(
unsigned int i = 0;
i <
subs_.size();
i++)
2501 *out <<
"<tr><td bgcolor=\"#00FF00\" id=\"a"
2502 <<
i <<
"\">""Alive</td><td>S</td><td>"
2503 <<
subs_[
i].queueId() <<
"<td>"
2504 <<
subs_[
i].queueStatus()<<
"/"
2505 <<
subs_[
i].queueOccupancy() <<
"/"
2506 <<
subs_[
i].queuePidOfLastSend() <<
"/"
2507 <<
subs_[
i].queuePidOfLastReceive()
2508 <<
"</td><td><a id=\"p"<<
i <<
"\" href=\"SubWeb?process="
2509 <<
subs_[
i].pid() <<
"&method=procStat\">"
2510 <<
subs_[
i].pid()<<
"</a></td>"
2513 <<
subs_[
i].params().nba <<
"/" <<
subs_[
i].params().nbp
2514 <<
" (" << float(
subs_[
i].params().nba)/float(
subs_[
i].params().nbp)*100. <<
"%)"
2515 <<
"</td><td>" <<
subs_[
i].params().ls <<
"/" <<
subs_[
i].params().ls
2516 <<
"</td><td>" <<
subs_[
i].params().ps
2518 << ((
subs_[
i].params().eols<
subs_[
i].params().ls) ?
" bgcolor=\"#00FF00\"" :
" bgcolor=\"#FF0000\"") <<
">"
2519 <<
subs_[
i].params().eols
2520 <<
"</td><td>" <<
subs_[
i].params().dqm
2521 <<
"</td><td>" <<
subs_[
i].params().trp <<
"</td>";
2526 *out <<
"<tr><td id=\"a"<<
i <<
"\" ";
2527 if(
subs_[i].alive()==-1000)
2528 *out <<
" bgcolor=\"#bbaabb\">NotInitialized";
2530 *out << (
subs_[
i].alive()==0 ?
">Done" :
" bgcolor=\"#FF0000\">Dead");
2531 *out <<
"</td><td>S</td><td>"<<
subs_[
i].queueId() <<
"<td>"
2532 <<
subs_[
i].queueStatus() <<
"/"
2533 <<
subs_[
i].queueOccupancy() <<
"/"
2534 <<
subs_[
i].queuePidOfLastSend() <<
"/"
2535 <<
subs_[
i].queuePidOfLastReceive()
2536 <<
"</td><td id=\"p"<< i <<
"\">"
2537 <<
subs_[
i].pid()<<
"</td><td colspan=\"5\">" <<
subs_[
i].reasonForFailed();
2538 if(
subs_[i].alive()!=0 &&
subs_[i].alive()!=-1000)
2541 *out <<
" will restart in " <<
subs_[
i].countdown() <<
" s";
2543 *out <<
" reached maximum restart count";
2544 else *out <<
" autoRestart is disabled ";
2548 " bgcolor=\"#00FF00\"" :
" bgcolor=\"#FF0000\"")
2550 <<
subs_[
i].params().eols
2551 <<
"</td><td>" <<
subs_[
i].params().dqm
2552 <<
"</td><td>" <<
subs_[
i].params().trp <<
"</td>";
2558 *out <<
"<tr><td id=\"a"<<
i <<
"\" "
2559 <<
"bgcolor=\"#FFFF00\">NotResp</td><td>S</td><td>"<<
subs_[
i].queueId() <<
"<td>"
2560 <<
subs_[
i].queueStatus() <<
"/"
2561 <<
subs_[
i].queueOccupancy() <<
"/"
2562 <<
subs_[
i].queuePidOfLastSend() <<
"/"
2563 <<
subs_[
i].queuePidOfLastReceive()
2564 <<
"</td><td id=\"p"<<
i <<
"\">"
2565 <<
subs_[
i].pid()<<
"</td>";
2573 LOG4CPLUS_INFO(getApplicationLogger(),
"evf::Exception caught in microstate - " << e.what());
2577 LOG4CPLUS_INFO(getApplicationLogger(),
"cms::Exception caught in microstate - " << e.
what());
2581 LOG4CPLUS_INFO(getApplicationLogger(),
"std::Exception caught in microstate - " << e.what());
2585 LOG4CPLUS_INFO(getApplicationLogger(),
"unknown exception caught in microstate - ");
2593 using namespace utils;
2604 *out << getApplicationDescriptor()->getClassName()
2607 mDiv(out,
"in",getApplicationDescriptor()->getInstance());
2610 *out <<
"<a href=\"" <<
configString_.toString() <<
"\">HLT Config</a>";
2615 mDiv(out,
"hlt",
"Not yet...");
2637 mDiv(out,
"vpi",(
unsigned int)
vp_);
2639 mDiv(out,
"vul",
"Prowling");
2641 mDiv(out,
"vul",
"Dead");
2676 using namespace utils;
2677 std::ostringstream ost;
2686 xdata::Serializable *monsleep = 0;
2687 xdata::Serializable *lstimeout = 0;
2696 mDiv(&ost,
"ms",monsleep->toString());
2698 mDiv(&ost,
"lst",lstimeout->toString());
2699 char cbuf[
sizeof(
struct utsname)];
2700 struct utsname* buf = (
struct utsname*)cbuf;
2702 mDiv(&ost,
"sysinfo");
2703 ost << buf->sysname <<
" " << buf->nodename
2704 <<
" " << buf->release <<
" " << buf->version <<
" " << buf->machine;
2720 std::cout <<
"--- Slave EP signal handler caught signal " << sig <<
" process id is " << info->si_pid <<
" ---" << std::endl;
2721 std::cout <<
"--- Address: " << std::hex << info->si_addr << std::dec <<
" --- " << std::endl;
2722 std::cout <<
"--- Stacktrace follows --" << std::endl;
2723 std::ostringstream stacktr;
2727 std::cout <<
"--- Dumping core." <<
" --- " << std::endl;
2729 std::cout <<
"--- Core dump count exceeded on this FU. ---"<<std::endl;
2731 std::string hasdump =
"";
2734 LOG4CPLUS_ERROR(getApplicationLogger(),
"--- Slave EP signal handler caught signal " << sig <<
". process id is " << getpid()
2735 <<
" on node " << toolbox::net::getHostName() <<
" ---" << std::endl
2736 <<
"--- Address: " << std::hex << info->si_addr << std::dec <<
" --- " << std::endl
2737 <<
"--- Stacktrace follows"<< hasdump <<
" ---" << std::endl << stacktr.str()
xdata::Boolean hasModuleWebRegistry_
static const char runNumber_[]
virtual char const * what() const
void summaryWebPage(xgi::Input *, xgi::Output *, const std::string &)
unsigned long rcvSlave(MsgBuf &ptr, bool isMonitor)
ShmOutputModuleRegistry * sorRef_
void spotlightWebPage(xgi::Input *, xgi::Output *)
xdata::Vector< xdata::Integer > spMStates_
xoap::MessageReference commandCallback(xoap::MessageReference msg)
xdata::InfoSpace * monitorInfoSpace_
void subWeb(xgi::Input *in, xgi::Output *out)
event_processor::State getState() const
void stopSlavesAndAcknowledge()
std::vector< std::string > logRing_
bool receivingAndMonitor(toolbox::task::WorkLoop *wl)
xdata::UnsignedInteger32 slaveRestartDelaySecs_
xdata::Boolean datasetCounting_
void startSummarizeWorkLoop()
void updateRollingReport()
xdata::UnsignedInteger32 runNumber_
void startScalersWorkLoop()
#define MSGQ_MESSAGE_TYPE_RANGE
void updater(xgi::Input *in, xgi::Output *out)
toolbox::task::WorkLoop * wlScalers_
pthread_mutex_t start_lock_
xdata::Integer epmAltState_
std::map< std::string, std::string, std::less< std::string > > & getEnvironment()
#define MSQS_MESSAGE_TYPE_TRR
void startMonitoringWorkLoop()
virtual std::string explainSelf() const
void publishForkInfo(std::string name, moduleweb::ForkInfoObj *forkInfoObj)
xdata::UnsignedInteger32 crashesToDump_
void taskWebPage(xgi::Input *, xgi::Output *, const std::string &)
bool restartForkInEDM(unsigned int slotId)
void startReceivingLoop()
FWEPWrapper evtProcessor_
xdata::Boolean isRunNumberSetter_
void setAppCtxt(xdaq::ApplicationContext *ctx)
ShmOutputModuleRegistry * getShmOutputModuleRegistry()
MsgBuf slave_message_monitoring_
bool signalMonitorActive_
xdata::UnsignedInteger32 forkInEDM_
void sendAuxLegenda(const std::string &)
xdata::Boolean hasServiceWebRegistry_
void clearCounters()
Clears counters used by trigger report.
toolbox::task::WorkLoop * wlReceiving_
void setCPUStat(int busyPer1k)
boost::tokenizer< boost::char_separator< char > > tokenizer
void init(unsigned short, std::string &)
MsgBuf & getPackedTriggerReport()
#define MSQM_MESSAGE_TYPE_FSTOP
toolbox::task::ActionSignature * asReceiveMsgAndExecute_
toolbox::task::ActionSignature * asSignalMonitor_
FUEventProcessor * FUInstancePtr_
void(* forkHandler)(void *)
void startSupervisorLoop()
void procStat(std::ostringstream *out)
void setupFastTimerService(unsigned int nProcesses)
xdata::InfoSpace * scalersLegendaInfoSpace_
toolbox::task::ActionSignature * asSupervisor_
void setRunNumber(RunNumber_t runNumber)
xdata::Boolean autoRestartSlaves_
std::string const & moduleNameFromIndex(unsigned int i) const
xdata::UnsignedInteger32 nbSubProcessesReporting_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void forceInitEventProcessorMaybe()
unsigned int crashesThisRun_
void css(xgi::Input *in, xgi::Output *out)
void cDiv(std::ostringstream *out)
#define MSQM_MESSAGE_TYPE_RLR
toolbox::task::ActionSignature * asReceiveMsgAndRead_
void setElapsed(int mseconds)
MsgBuf master_message_prr_
xdata::Boolean exitOnError_
void evfep_sighandler(int sig, siginfo_t *info, void *c)
std::vector< SubProcess > subs_
xdata::InfoSpace * monitorLegendaInfoSpace_
bool summarize(toolbox::task::WorkLoop *wl)
void getSlavePids(xgi::Input *in, xgi::Output *out)
xdata::Serializable * nbProcessed
xoap::MessageReference fsmCallback(xoap::MessageReference msg)
pthread_mutex_t forkObjLock_
U second(std::pair< T, U > const &p)
std::string wlMonitoring()
#define MSQM_MESSAGE_TYPE_PRG
xdata::Bag< xdaq2rc::ClassnameAndInstance > * rcmsStateListener()
void fireFailed(const std::string &errorMsg, void *originator)
#define MSQS_MESSAGE_TYPE_WEB
void adjustLsIndexForRestart()
bool halting(toolbox::task::WorkLoop *wl)
#define MSQS_MESSAGE_TYPE_STOP
#define MSQS_MESSAGE_TYPE_PRR
bool scalers(toolbox::task::WorkLoop *wl)
unsigned int stopCondition
rlimit rlimit_coresize_default_
#define MSQM_MESSAGE_TYPE_RLI
MsgBuf master_message_trr_
ModuleWebRegistry * getModuleWebRegistry()
toolbox::task::WorkLoop * wlSupervising_
void declareRunNumber(RunNumber_t runNumber)
static void setAppl(xdaq::Application *app)
std::string reasonForFailedState_
void resetLumiSectionReferenceIndex()
bool monitoring(toolbox::task::WorkLoop *wl)
FUEventProcessor(xdaq::ApplicationStub *s)
int postSlave(MsgBuf &ptr, bool isMonitor)
std::string logsAsString()
unsigned long long idleProcStats_
xdata::Boolean iDieStatisticsGathering_
int start(std::string, int=0)
void setAppDesc(xdaq::ApplicationDescriptor *ad)
bool sigmon(toolbox::task::WorkLoop *wl)
uint16_t mem[nChs][nEvts]
void scalersWeb(xgi::Input *, xgi::Output *)
void resetPackedTriggerReport()
xdata::Boolean squidPresent_
list mod
Load physics model.
std::list< std::string > names_
void setScalersInfoSpace(xdata::InfoSpace *sis, xdata::InfoSpace *slis)
std::vector< edm::FUShmOutputModule * > getShmOutputModules()
void sendStat(unsigned int)
xdata::Boolean hasPrescaleService_
#define NUMERIC_MESSAGE_SIZE
unsigned int getNumberOfMicrostates()
void handleSignalSlave(int sig, siginfo_t *info, void *c)
MsgBuf slave_message_prr_
bool receiving(toolbox::task::WorkLoop *wl)
bool stopping(toolbox::task::WorkLoop *wl)
void procStat(xgi::Input *in, xgi::Output *out)
moduleweb::ForkInfoObj * forkInfoObj_
toolbox::task::WorkLoop * wlSummarize_
char const * stateName(event_processor::State s) const
virtual ~FUEventProcessor()
void startSignalMonitorWorkLoop()
void fireEvent(const std::string &evtType, void *originator)
xdata::Serializable * nbAccepted
void disableRcmsStateNotification()
std::string getReleaseVersion()
void startReceivingMonitorLoop()
#define MSQM_MESSAGE_TYPE_TRP
void localLog(std::string)
static PresenceFactory * get()
#define MSQS_MESSAGE_TYPE_MCR
void setMonitorInfoSpace(xdata::InfoSpace *mis, xdata::InfoSpace *mlis)
static void forkProcessFromEDM_helper(void *addr)
ModuleWebRegistry * mwrRef_
bool configuring(toolbox::task::WorkLoop *wl)
int notstarted_state_code() const
xdata::InfoSpace * applicationInfoSpace_
edm::EventProcessor::StatusCode stop()
xdata::UnsignedInteger32 nbSubProcesses_
bool enabling(toolbox::task::WorkLoop *wl)
std::auto_ptr< Presence > makePresence(std::string const &presence_type) const
xdata::String * stateName()
StatusCode statusAsync() const
void setApplicationInfoSpace(xdata::InfoSpace *is)
unsigned int getLumiSectionReferenceIndex()
bool rlimit_coresize_changed_
bool getTriggerReport(bool useLock)
unsigned int scalersUpdates_
xdata::String configString_
xdata::Boolean * foundRcmsStateListener()
std::vector< std::string > const & getmicromap() const
xdata::UnsignedInteger32 superSleepSec_
unsigned long long allProcStats_
xdata::UnsignedInteger32 lastLumiUsingEol_
std::auto_ptr< edm::Presence > messageServicePresence_
std::string const & stateNameFromIndex(unsigned int i) const
void sendMessageOverMonitorQueue(MsgBuf &)
pthread_mutex_t * mst_lock_
void moduleWeb(xgi::Input *in, xgi::Output *out)
std::string const & configuration() const
std::string configuration_
#define MSQM_MESSAGE_TYPE_STOP
void pathNames(xgi::Input *, xgi::Output *)
std::string updaterStatic_
int stacktrace(void *addresses[], int nmax)
char data[epos_bytes_allocation]
void procCpuStat(unsigned long long &idleJiffies, unsigned long long &allJiffies)
void sendLegenda(const std::vector< std::string > &)
pthread_mutex_t pickup_lock_
void defaultWebPage(xgi::Input *in, xgi::Output *out)
toolbox::task::ActionSignature * asSummarize_
toolbox::task::WorkLoop * wlSignalMonitor_
xdata::Vector< xdata::Integer > spmStates_
void sendLegenda(const std::string &)
xdata::Integer epMAltState_
xdata::UnsignedInteger32 instance_
void serviceWeb(xgi::Input *in, xgi::Output *out)
#define MSQM_MESSAGE_TYPE_MCS
void mDiv(std::ostringstream *out, std::string name)
edm::EventSummary eventSummary
toolbox::task::WorkLoop * wlReceivingMonitor_
void withdrawLumiSectionIncrement()
#define MSQM_MESSAGE_TYPE_WEB
void microState(xgi::Input *in, xgi::Output *out)
bool restart_in_progress_
void sumAndPackTriggerReport(MsgBuf &buf)
toolbox::task::ActionSignature * asScalers_
bool supervisor(toolbox::task::WorkLoop *wl)
TriggerReportStatic * getPackedTriggerReportAsStruct()
#define MAX_PIPE_BUFFER_SIZE
MsgBuf master_message_prg_
std::string getDatasetCSV()
int totalEventsPassed() const
pthread_mutex_t stop_lock_
void forkProcessesFromEDM()
void evfep_alarmhandler(int sig, siginfo_t *info, void *c)
unsigned int getScalersUpdates()
void uptime(std::ostringstream *out)
void publishConfigAndMonitorItems(bool)
unsigned int logRingIndex_
xdata::InfoSpace * scalersInfoSpace_
void sendStat(const unsigned char *, size_t, unsigned int)
void actionPerformed(xdata::Event &e)
void microState(xgi::Input *in, xgi::Output *out)
void setRcms(xdaq::ApplicationDescriptor *rcms)
static const unsigned int logRingSize_
xdata::Boolean epInitialized_
void findRcmsStateListener()
void enableEndPaths(bool active)