diff --git a/include/DoocsHelper.h b/include/DoocsHelper.h index fa5e1ba548c4b8678f53e0b3d3217a7e95f45f4e..a6c85ac7b626d218a33185c26d399df7885d046b 100644 --- a/include/DoocsHelper.h +++ b/include/DoocsHelper.h @@ -17,6 +17,11 @@ #include "eq_fct.h" #include "eq_client.h" +#include <boost/shared_ptr.hpp> + + + +#include "ConsattApp/LogFileWorker.h" class DoocsHelper { private: @@ -34,33 +39,15 @@ public: void update(); private: - D_int _cmd; + D_int _cmd; - - D_text _logFileTail; - D_int _logFileTailLineNumber; - D_int _logFileTailLineNumberAutoUpdate; - int _autoupdateCnt; - - D_int _logFileFilterStart; - D_int _logFileFilterEnd; - - //truncate file size - D_int _logFileMaxSizeKb; - D_int _logFileCurrentSize; - D_float _logFileTruncateFactor; - void trimLogFile(); - void trimLogFileCore(); - - int fileSize(const std::string file); - int fileLinesNo(const std::string file); - - time_t getTimeFromMarker(const char* theTime, const char* format = "%Y-%m-%dT%H:%M:%S"); - - void loadLogFileTail(); - void loadLogFileWithTimeFilter(); + D_int _logFileTailAutoUpdate; + int _autoupdateCnt; + uint32_t _updateCnt; + + LogFileWorker _logFileWorker; }; #endif /* DOOCSHELPER_H */ diff --git a/include/EqCsaLSynchFmc20.h b/include/EqCsaLSynchFmc20.h index 19f0392de1084f90a4aa39e37e2b6f5d2ac1c333..0fe9ae8e5711b2f477f2f914c74509851a6de449 100644 --- a/include/EqCsaLSynchFmc20.h +++ b/include/EqCsaLSynchFmc20.h @@ -33,7 +33,7 @@ protected: //filds //D_zmqstring sig_usr1_name_zmq; //D_int _triggerSource; - DoocsHelper _helper; + boost::shared_ptr <DoocsHelper> _helper; public: diff --git a/include/EqLinkLockCtrlFMC25RapidXServer.h b/include/EqLinkLockCtrlFMC25RapidXServer.h index fe3657b76190697a318dc2c8fe64d80c34a054cb..93f35484548f9c5cec11d97e55bc5e6a65e8e373 100644 --- a/include/EqLinkLockCtrlFMC25RapidXServer.h +++ b/include/EqLinkLockCtrlFMC25RapidXServer.h @@ -34,7 +34,7 @@ protected: //filds //D_zmqstring sig_usr1_name_zmq; //D_int _triggerSource; - DoocsHelper _helper; + boost::shared_ptr <DoocsHelper> _helper; public: diff --git a/include/EqLinkLockCtrlFMC25VhdlServer.h b/include/EqLinkLockCtrlFMC25VhdlServer.h index 755b2dd28bce3a2c29f45989110afe17df21000b..33c993a7b4886d838d9135a4035820471f9c43d3 100644 --- a/include/EqLinkLockCtrlFMC25VhdlServer.h +++ b/include/EqLinkLockCtrlFMC25VhdlServer.h @@ -34,7 +34,7 @@ protected: //filds //D_zmqstring sig_usr1_name_zmq; //D_int _triggerSource; - DoocsHelper _helper; + boost::shared_ptr <DoocsHelper> _helper; public: diff --git a/include/EqLinkLockServer.h b/include/EqLinkLockServer.h index 8be55b61ceb37da9808c3a7c88da516249360e6d..c7514600f1f29d900e2eebf2069334deb44ee1a6 100644 --- a/include/EqLinkLockServer.h +++ b/include/EqLinkLockServer.h @@ -31,10 +31,7 @@ void sig_usr1_zmq_cb_for_laser_lock_server(void *, EqData *, dmsg_info_t *); class EqLinkLockServer : public EqFct { protected: //filds - //ZMQ communication for X2timer - //D_zmqstring sig_usr1_name_zmq; - //D_int _triggerSource; - DoocsHelper _helper; + boost::shared_ptr <DoocsHelper> _helper; public: diff --git a/include/EqLinkLockStatusServer.h b/include/EqLinkLockStatusServer.h index e78c8708ca7db586db6390d0315e9eb7a1fbb995..1888c189bd5972c80ebde152c940899ba2219eb5 100644 --- a/include/EqLinkLockStatusServer.h +++ b/include/EqLinkLockStatusServer.h @@ -29,10 +29,7 @@ void sig_usr1_zmq_cb_for_link_lock_status_server(void *, EqData *, dmsg_info_t * class EqLinkLockStatusServer : public EqFct { protected: //filds - //ZMQ communication for X2timer - //D_zmqstring sig_usr1_name_zmq; - //D_int _triggerSource; - DoocsHelper _helper; + boost::shared_ptr <DoocsHelper> _helper; uint32_t _locationType; public: diff --git a/src/DoocsHelper.cc b/src/DoocsHelper.cc index 9219c0d94ca47ced496022e9fd8ab31cfa4665e1..4bc6ca64e3530675738de81031a4822c5980fec2 100644 --- a/src/DoocsHelper.cc +++ b/src/DoocsHelper.cc @@ -9,245 +9,71 @@ #include <chrono> #include <thread> + + extern char *__progname; DoocsHelper::DoocsHelper(EqFct* parent) : _parent(parent), +_logFileWorker(std::string("HELPER.")), interruptAddressZmq("ZMQ_SIG_USR1_INT_STRING", parent), watchdogAddress("DOOCS_WATCHDOG_ADDRESS", parent), x2timerAddress("DOOCS_X2TIMER_ADDRESS", parent), mchAddress("DOOCS_MCH_ADDRESS", parent), triggerSource("MAIN_LOOP_TRIGGER_SOURCE", parent), - -_logFileTail("HELPER.LOG_FILE_TAIL", parent), -_logFileTailLineNumber("HELPER.LOG_FILE_TAIL_LINES_NO", parent), -_logFileTailLineNumberAutoUpdate("HELPER.LOG_FILE_TAIL_AUTOUPDATE_ON", parent), -_logFileFilterStart("HELPER.LOG_FILE_FILT_START_TIME", parent), -_logFileFilterEnd("HELPER.LOG_FILE_FILT_END_TIME", parent), - -_logFileMaxSizeKb("HELPER.LOG_FILE_MAX_SIZE_KB", parent), -_logFileCurrentSize("HELPER.LOG_FILE_SIZE_KB", parent), -_logFileTruncateFactor("HELPER.LOG_TRIM_FACTOR", parent), - - +_logFileTailAutoUpdate("HELPER.LOG_FILE_TAIL_AUTOUPDATE_ON", parent), _autoupdateCnt(0), - -_cmd("HELPER.CMD", parent){ +_cmd("HELPER.CMD", parent) { + std::string filePath = std::string(__progname) + ".log"; + _logFileWorker.init(filePath); } - void DoocsHelper::update() { auto cmd = _cmd.value(); - _cmd.set_value(0); - + _cmd.set_value(0); + if (cmd == 1) { - loadLogFileTail(); + _logFileWorker.loadLogFileTail(); _autoupdateCnt = 0; } if (cmd == 2) { - loadLogFileWithTimeFilter(); + _logFileWorker.loadLogFileWithTimeFilter(); _autoupdateCnt = 0; } + + if (cmd == 3) { + _logFileWorker.trimLogFile(); + } - - if (_logFileTailLineNumberAutoUpdate.value()) { + + if (_logFileTailAutoUpdate.value()) { _autoupdateCnt++; if (_autoupdateCnt == 20) { - loadLogFileTail(); + _logFileWorker.loadLogFileTail(); _autoupdateCnt = 0; } } - - if (_updateCnt%50==0) { - trimLogFile(); + + if ((_updateCnt % 50 == 0)) { + _logFileWorker.checkSizeAndTrimLogFile(); } - + _updateCnt++; } -int DoocsHelper::fileSize(const std::string file) { - //auto time_start = std::chrono::high_resolution_clock::now(); - std::ifstream logFile; - logFile.open(file.c_str(), ios_base::binary); - if (logFile.is_open()) { - logFile.seekg(0, ios_base::end); - int size = logFile.tellg(); - logFile.close(); - //std::cout << "DoocsHelper::fileLinesNo::Size measure took[ms]: " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - time_start).count() << std::endl; - return (size / 1024); - } - return 0; -} -int DoocsHelper::fileLinesNo(const std::string file) { - //auto time_start = std::chrono::high_resolution_clock::now(); - std::ifstream logFile(file.c_str()); - std::string line; - if (logFile.is_open()) { - int i = 0; - for (i = 0; std::getline(logFile, line); ++i); - logFile.close(); - //std::cout << "DoocsHelper::fileLinesNo::Line cnt took[ms]: " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - time_start).count() << std::endl; - return i; - } - return 0; -} -void DoocsHelper::trimLogFile() { - //set default - if (_logFileMaxSizeKb.value()==0) - _logFileMaxSizeKb.set_value(102400); // 100MB (100*1024kB) - if (_logFileTruncateFactor.value()==0) - _logFileTruncateFactor.set_value(0.7); - - //check currnet file size and number of lines - std::string logFileName = std::string(__progname) + ".log"; - _logFileCurrentSize.set_value(fileSize(logFileName)); - - //if max size is 0 or lower trimming is OFF - if (_logFileMaxSizeKb.value() > 0) { - //only file biger that 1024 (1MB) can be trimmed - if (_logFileMaxSizeKb.value() < 1024) - _logFileMaxSizeKb.set_value(1024); - - if (_logFileTruncateFactor.value() > 0.9) - _logFileTruncateFactor.set_value(0.9); - else if (_logFileTruncateFactor.value() < 0.1) - _logFileTruncateFactor.set_value(0.1); - - if (_logFileCurrentSize.value() > _logFileMaxSizeKb.value()) { - std::thread t1(std::thread(&DoocsHelper::trimLogFileCore, this)); - t1.detach(); - } - } -} -void DoocsHelper::trimLogFileCore() { - auto time_start = std::chrono::high_resolution_clock::now(); - - std::string logFileName = std::string(__progname) + ".log"; - std::string tempFileName(logFileName + std::string(".tmp")); - std::fstream logFile(logFileName.c_str(), std::fstream::in); - std::fstream logFileTemp(tempFileName.c_str(), std::fstream::out | std::fstream::app); - - - int oldSizeKb = _logFileCurrentSize.value(); - int oldLinesNo = fileLinesNo(logFileName); - std::cout << "DoocsHelper::trimLogFileCore: Current size [kB]: " << _logFileCurrentSize.value() << " Max size [kB]: " << _logFileMaxSizeKb.value() << ", trim factor: " << _logFileTruncateFactor.value() << std::endl; - - int newLinesNo = oldLinesNo * _logFileTruncateFactor.value(); - int newLinesNoCnt = 0; - - std::string line; - if (logFile.is_open() && logFileTemp.is_open()) { - for (int i = 0; std::getline(logFile, line); ++i) { - if (i > (oldLinesNo - newLinesNo)) { - newLinesNoCnt++; - logFileTemp << line << std::endl; - } - } - - //close both files - logFile.close(); - logFileTemp.close(); - //reopen files in different mode - std::fstream logFile(logFileName.c_str(), std::fstream::out | std::fstream::trunc); - std::fstream logFileTemp(tempFileName.c_str(), std::fstream::in ); - - //rewrite temporary file to log file - if (logFile.is_open() && logFileTemp.is_open()) - while (std::getline(logFileTemp, line)) - logFile << line << std::endl; - //close them again - logFile.close(); - logFileTemp.close(); - //remove temp file - if (remove(tempFileName.c_str()) != 0) - std::cout << "DoocsHelper::trimLogFileCore: Error deleting temporary file: " << tempFileName << std::endl; - - std::cout << "DoocsHelper::trimLogFileCore: Old log file size[kb]: " << oldSizeKb << " , new file size[kb]: " << fileSize(logFileName) << std::endl; - std::cout << "DoocsHelper::trimLogFileCore: Old log file lines: " << oldLinesNo << " , new file lines: " << newLinesNoCnt << std::endl; - std::cout << "DoocsHelper::trimLogFileCore: Truncation took[ms]: " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - time_start).count() << std::endl << std::endl; - } -} -void DoocsHelper::loadLogFileTail() { - auto time_start = std::chrono::high_resolution_clock::now(); - std::ostringstream ss; - if (_logFileTailLineNumber.value() > 4000) - _logFileTailLineNumber.set_value(4000); - else if (_logFileTailLineNumber.value() < 50) - _logFileTailLineNumber.set_value(50); - - ss << _logFileTailLineNumber.value(); - - std::string command = "tail -" + ss.str() + " " + std::string(__progname) + ".log > temp.log.txt"; - auto result = std::system(command.c_str()); - if (result == 0) { - //std::cout << "Command is: " << command << ", command result: " << result << std::endl; - ss.str(""); - ss << std::ifstream("temp.log.txt").rdbuf(); - _logFileTail.set_value(ss.str()); - std::system("rm -f ./temp.log.txt"); - } else { - std::cout << "Command: " << command << " failed, command result: " << result << std::endl; - } - - auto readTimeMs = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - time_start).count(); - if (readTimeMs > 20) - std::cout << "DoocsHelper::loadLogFileTail: Warning. Loading " << _logFileTailLineNumber.value() << " lines took[ms]: " << readTimeMs << std::endl; - -} -void DoocsHelper::loadLogFileWithTimeFilter() { - std::ifstream file; - std::string filePath = std::string(__progname) + ".log"; - file.open(filePath.c_str(), std::ios::in); - - if (file.is_open()) { - time_t startTime = _logFileFilterStart.value(); - time_t stopTime = _logFileFilterEnd.value(); - - std::string currentLine(""); - std::string logNewText(""); - int matchedLineCnt = 0; - int maxLines = _logFileTailLineNumber.value(); - if (maxLines == 0 || maxLines > 5000) { - maxLines = 5000; - } - int lineCnt = 0; - int lineCnt1 = 0; - std::cout << "startTime: " << startTime << " , endTime: " << stopTime << std::endl; - - while (matchedLineCnt < _logFileTailLineNumber.value() && std::getline(file, currentLine)) { - if (currentLine.length() > 20) { - time_t currentMarkerTime = getTimeFromMarker(currentLine.substr(0, 19).c_str()); - if (currentMarkerTime >= startTime && currentMarkerTime <= stopTime) { - logNewText += (currentLine + "\n"); - matchedLineCnt++; - } - lineCnt1++; - } - lineCnt++; - } - _logFileTail.set_value(logNewText); - file.close(); - - - std::cout << "Logfile line cnt: " << lineCnt << " , longer than 20 chars: " << lineCnt1 << " , matched lines" << matchedLineCnt <<"\n"; - } -} -time_t DoocsHelper::getTimeFromMarker(const char* theTime, const char* format) { - std::tm tmTime; - memset(&tmTime, 0, sizeof(tmTime)); - strptime(theTime, format, &tmTime); - return mktime(&tmTime); -} \ No newline at end of file + + + diff --git a/src/EqCsaLSynchFmc20.cc b/src/EqCsaLSynchFmc20.cc index 8a20f2db589d9be5ebcbaa7eabf34418a43202b0..e0ba18bd17263c3211438c1329489f23696ce397 100644 --- a/src/EqCsaLSynchFmc20.cc +++ b/src/EqCsaLSynchFmc20.cc @@ -8,15 +8,12 @@ int EqCsaLSynchFmc20::fct_code() { EqCsaLSynchFmc20::EqCsaLSynchFmc20() : -EqFct("NAME = location"), -_helper(this) -//sig_usr1_name_zmq("ZMQ_SIG_USR1_INT_STRING", this), -//_triggerSource("MAIN_LOOP_TRIGGER_SOURCE", this) -{ +EqFct("NAME = location") { printftostderr("EqCsaLSynchFmc20::EqCsaLSynchFmc20()", "Location: %s, Start of DOOCS server constructor.", EqFct::name().c_str()); Doocs_CsaAdapter::getInstance().setParent(this); appManager = Doocs_CsaAdapter::getInstance().createApplicationManager( new CsaLSynchFmc20(std::string(EqFct::name())) ); appManager->create(); + _helper.reset(new DoocsHelper(this)); printftostderr("EqCsaLSynchFmc20::EqCsaLSynchFmc20()", "Location: %s, End of DOOCS server constructor.", EqFct::name().c_str()); } @@ -28,10 +25,10 @@ void EqCsaLSynchFmc20::init() { } void EqCsaLSynchFmc20::update() { - if (_helper.triggerSource.value() != 0) { + if (_helper->triggerSource.value() != 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(); appManager->execute(); - _helper.update(); + _helper->update(); } g_sts_.error(0); @@ -41,10 +38,10 @@ void EqCsaLSynchFmc20::update() { } void EqCsaLSynchFmc20::interrupt_usr1_core(dmsg_info_t *msginfo) { - if (_helper.triggerSource.value() == 0) { + if (_helper->triggerSource.value() == 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(msginfo); appManager->execute(); - _helper.update(); + _helper->update(); } } @@ -74,7 +71,7 @@ void sig_usr1_zmq_cb_for_lbsynch_fmc20_server(void *pp, EqData *dp, dmsg_info_t void EqCsaLSynchFmc20::post_init(void) { printftostderr("EqCsaLSynchFmc20::post_init()", "Location: %s.", name_.value()); printftostderr("EqCsaLSynchFmc20::post_init()", "Location: %s, Attach to ZMQ system for x2timer.", name_.value()); - _helper.interruptAddressZmq.attach(sig_usr1_zmq_cb_for_lbsynch_fmc20_server); + _helper->interruptAddressZmq.attach(sig_usr1_zmq_cb_for_lbsynch_fmc20_server); std::ostringstream doocsParrentUniqueId; doocsParrentUniqueId << this; diff --git a/src/EqLinkLockCtrlFMC25RapidXServer.cc b/src/EqLinkLockCtrlFMC25RapidXServer.cc index 2bd4ff1a152afbf923cfbb7f02da1c3e6bff5860..1339e0273753a32a876aefa394d10d7e4dc2fafc 100644 --- a/src/EqLinkLockCtrlFMC25RapidXServer.cc +++ b/src/EqLinkLockCtrlFMC25RapidXServer.cc @@ -8,15 +8,12 @@ int EqLinkLockCtrlFMC25RapidXServer::fct_code() { EqLinkLockCtrlFMC25RapidXServer::EqLinkLockCtrlFMC25RapidXServer() : -EqFct("NAME = location"), -_helper(this) -//sig_usr1_name_zmq("ZMQ_SIG_USR1_INT_STRING", this), -//_triggerSource("MAIN_LOOP_TRIGGER_SOURCE", this) -{ +EqFct("NAME = location") { printftostderr("EqLinkLockCtrlFMC25RapidXServer::EqLinkLockCtrlFMC25RapidXServer()", "Location: %s, Start of DOOCS server constructor.", EqFct::name().c_str()); Doocs_CsaAdapter::getInstance().setParent(this); appManager = Doocs_CsaAdapter::getInstance().createApplicationManager( new CsaLinkLockCtrlFMC25RapidX(std::string(EqFct::name())) ); appManager->create(); + _helper.reset(new DoocsHelper(this)); printftostderr("EqLinkLockCtrlFMC25RapidXServer::EqLinkLockCtrlFMC25RapidXServer()", "Location: %s, End of DOOCS server constructor.", EqFct::name().c_str()); } @@ -31,10 +28,10 @@ void EqLinkLockCtrlFMC25RapidXServer::update() { //std::cout << "EqLinkLockCtrlFMC25RapidXServer::update(): Return from update" << std::endl; //return; - if (_helper.triggerSource.value() != 0) { + if (_helper->triggerSource.value() != 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(); appManager->execute(); - _helper.update(); + _helper->update(); } @@ -49,10 +46,10 @@ void EqLinkLockCtrlFMC25RapidXServer::interrupt_usr1_core(dmsg_info_t *msginfo) //std::cout << "EqLinkLockCtrlFMC25RapidXServer::interrupt_usr1_core(): Return from interupt" << std::endl; //return; - if (_helper.triggerSource.value() == 0) { + if (_helper->triggerSource.value() == 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(msginfo); appManager->execute(); - _helper.update(); + _helper->update(); } } @@ -82,7 +79,7 @@ void EqLinkLockCtrlFMC25RapidXServer::post_init(void) { printftostderr("EqLinkLockCtrlFMC25RapidXServer::post_init()", "Location: %s.", name_.value()); printftostderr("EqLinkLockCtrlFMC25RapidXServer::post_init()", "Location: %s, Attach to ZMQ system for x2timer.", name_.value()); //sig_usr1_name_zmq.attach(sig_usr1_zmq_cb_for_link_lock_ctrl_rapidx_fmc25_server); - _helper.interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_ctrl_rapidx_fmc25_server); + _helper->interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_ctrl_rapidx_fmc25_server); std::ostringstream doocsParrentUniqueId; doocsParrentUniqueId << this; diff --git a/src/EqLinkLockCtrlFMC25VhdlServer.cc b/src/EqLinkLockCtrlFMC25VhdlServer.cc index 9c869117342020282e97cdff44f023ed1e5fc7b5..41f0addab6797980ca67731aa399eed289444177 100644 --- a/src/EqLinkLockCtrlFMC25VhdlServer.cc +++ b/src/EqLinkLockCtrlFMC25VhdlServer.cc @@ -8,15 +8,12 @@ int EqLinkLockCtrlFMC25VhdlServer::fct_code() { } EqLinkLockCtrlFMC25VhdlServer::EqLinkLockCtrlFMC25VhdlServer() : -EqFct("NAME = location"), -_helper(this) -//sig_usr1_name_zmq("ZMQ_SIG_USR1_INT_STRING", this), -//_triggerSource("MAIN_LOOP_TRIGGER_SOURCE", this) -{ +EqFct("NAME = location") { printftostderr("EqLinkLockCtrlFMC25VhdlServer::EqLinkLockCtrlFMC25VhdlServer()", "Location: %s, Start of DOOCS server constructor.", EqFct::name().c_str()); Doocs_CsaAdapter::getInstance().setParent(this); appManager = Doocs_CsaAdapter::getInstance().createApplicationManager(new CsaLinkLockCtrlFMC25Vhdl(std::string(EqFct::name()))); appManager->create(); + _helper.reset(new DoocsHelper(this)); printftostderr("EqLinkLockCtrlFMC25VhdlServer::EqLinkLockCtrlFMC25VhdlServer()", "Location: %s, End of DOOCS server constructor.", EqFct::name().c_str()); } @@ -31,10 +28,10 @@ void EqLinkLockCtrlFMC25VhdlServer::update() { //std::cout << "EqLinkLockCtrlFMC25VhdlServer::update(): Return from update" << std::endl; //return; - if (_helper.triggerSource.value() != 0) { + if (_helper->triggerSource.value() != 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(); appManager->execute(); - _helper.update(); + _helper->update(); } @@ -49,10 +46,10 @@ void EqLinkLockCtrlFMC25VhdlServer::interrupt_usr1_core(dmsg_info_t *msginfo) { //std::cout << "EqLinkLockCtrlFMC25VhdlServer::interrupt_usr1_core(): Return from interupt" << std::endl; //return; - if (_helper.triggerSource.value() == 0) { + if (_helper->triggerSource.value() == 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(msginfo); appManager->execute(); - _helper.update(); + _helper->update(); } } @@ -82,7 +79,7 @@ void EqLinkLockCtrlFMC25VhdlServer::post_init(void) { printftostderr("EqLinkLockCtrlFMC25VhdlServer::post_init()", "Location: %s.", name_.value()); printftostderr("EqLinkLockCtrlFMC25VhdlServer::post_init()", "Location: %s, Attach to ZMQ system for x2timer.", name_.value()); //sig_usr1_name_zmq.attach(sig_usr1_zmq_cb_for_link_lock_ctrl_rapidx_fmc25_server); - _helper.interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_ctrl_vhdl_fmc25_server); + _helper->interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_ctrl_vhdl_fmc25_server); std::ostringstream doocsParrentUniqueId; doocsParrentUniqueId << this; diff --git a/src/EqLinkLockServer.cc b/src/EqLinkLockServer.cc index 34464627794fbd78ea6e07c0cf507db0b4073a64..da82807801588baac2e1015354d084057eb035a6 100644 --- a/src/EqLinkLockServer.cc +++ b/src/EqLinkLockServer.cc @@ -7,15 +7,13 @@ int EqLinkLockServer::fct_code() { } EqLinkLockServer::EqLinkLockServer() : -EqFct("NAME = location"), -_helper(this) -//sig_usr1_name_zmq("ZMQ_SIG_USR1_INT_STRING", this), -//_triggerSource("MAIN_LOOP_TRIGGER_SOURCE", this) +EqFct("NAME = location") { printftostderr("EqLinkLockServer::EqLinkLockServer()", "Location: %s, Start of DOOCS server constructor.", EqFct::name().c_str()); Doocs_CsaAdapter::getInstance().setParent(this); appManager = Doocs_CsaAdapter::getInstance().createApplicationManager(new CsaLinkLock(std::string(EqFct::name()))); appManager->create(); + _helper.reset(new DoocsHelper(this)); printftostderr("EqLinkLockServer::EqLinkLockServer()", "Location: %s, End of DOOCS server constructor.", EqFct::name().c_str()); } @@ -30,10 +28,10 @@ void EqLinkLockServer::update() { //std::cout << "EqLinkLockServer::update(): Return from update" << std::endl; //return; - if (_helper.triggerSource.value() != 0) { + if (_helper->triggerSource.value() != 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(); appManager->execute(); - _helper.update(); + _helper->update(); } @@ -48,10 +46,10 @@ void EqLinkLockServer::interrupt_usr1_core(dmsg_info_t *msginfo) { //std::cout << "EqLinkLockServer::interrupt_usr1_core(): Return from interupt" << std::endl; //return; - if (_helper.triggerSource.value() == 0) { + if (_helper->triggerSource.value() == 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(msginfo); appManager->execute(); - _helper.update(); + _helper->update(); } } @@ -80,7 +78,7 @@ void sig_usr1_zmq_cb_for_link_lock_server(void *pp, EqData *dp, dmsg_info_t *ip) void EqLinkLockServer::post_init(void) { printftostderr("EqLinkLockServer::post_init()", "Location: %s.", name_.value()); printftostderr("EqLinkLockServer::post_init()", "Location: %s, Attach to ZMQ system for x2timer.", name_.value()); - _helper.interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_server); + _helper->interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_server); std::ostringstream doocsParrentUniqueId; doocsParrentUniqueId << this; diff --git a/src/EqLinkLockStatusServer.cc b/src/EqLinkLockStatusServer.cc index 4abd2031b2eb6bfda9582b442c496f428250dffe..4f08b704abffed4b9c347ff7ff9ab9df139f967a 100644 --- a/src/EqLinkLockStatusServer.cc +++ b/src/EqLinkLockStatusServer.cc @@ -7,13 +7,13 @@ int EqLinkLockStatusServer::fct_code() { } EqLinkLockStatusServer::EqLinkLockStatusServer() : -EqFct("NAME = location"), -_helper(this) +EqFct("NAME = location") { printftostderr("EqLinkLockStatusServer::EqLinkLockStatusServer()", "Location: %s, Start of DOOCS server constructor.", EqFct::name().c_str()); Doocs_CsaAdapter::getInstance().setParent(this); appManager = Doocs_CsaAdapter::getInstance().createApplicationManager(new CsaLinkLockStatusValidator(std::string(EqFct::name()))); appManager->create(); + _helper.reset(new DoocsHelper(this)); printftostderr("EqLinkLockStatusServer::EqLinkLockStatusServer()", "Location: %s, End of DOOCS server constructor.", EqFct::name().c_str()); } @@ -28,10 +28,10 @@ void EqLinkLockStatusServer::update() { //std::cout << "EqLinkLockStatusServer::update(): Return from update" << std::endl; //return; - if (_helper.triggerSource.value() != 0) { + if (_helper->triggerSource.value() != 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(); appManager->execute(); - _helper.update(); + _helper->update(); } @@ -46,10 +46,10 @@ void EqLinkLockStatusServer::interrupt_usr1_core(dmsg_info_t *msginfo) { //std::cout << "EqLinkLockStatusServer::interrupt_usr1_core(): Return from interupt" << std::endl; //return; - if (_helper.triggerSource.value() == 0) { + if (_helper->triggerSource.value() == 0) { Doocs_CsaAdapter::getInstance().setCurrentTimeStampStructure(msginfo); appManager->execute(); - _helper.update(); + _helper->update(); } } @@ -78,7 +78,7 @@ void sig_usr1_zmq_cb_for_link_lock_status_server(void *pp, EqData *dp, dmsg_info void EqLinkLockStatusServer::post_init(void) { printftostderr("EqLinkLockStatusServer::post_init()", "Location: %s.", name_.value()); printftostderr("EqLinkLockStatusServer::post_init()", "Location: %s, Attach to ZMQ system for x2timer.", name_.value()); - _helper.interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_status_server); + _helper->interruptAddressZmq.attach(sig_usr1_zmq_cb_for_link_lock_status_server); std::ostringstream doocsParrentUniqueId; doocsParrentUniqueId << this;