Commit bef704d0 authored by Pavel Vainerman's avatar Pavel Vainerman

(SharedMemory): встроил LogServer..

parent 8d4fbf3b
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include "IOBase.h" #include "IOBase.h"
#include "VTypes.h" #include "VTypes.h"
#include "ThreadCreator.h" #include "ThreadCreator.h"
#include "LogAgregator.h"
#include "LogServer.h" #include "LogServer.h"
#include "modbus/MBLogSugar.h" #include "modbus/MBLogSugar.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -13,7 +13,6 @@ using namespace UniSetExtensions; ...@@ -13,7 +13,6 @@ using namespace UniSetExtensions;
void SharedMemory::help_print( int argc, const char* const* argv ) void SharedMemory::help_print( int argc, const char* const* argv )
{ {
cout << "--smemory-id - SharedMemeory ID" << endl; cout << "--smemory-id - SharedMemeory ID" << endl;
cout << "--logfile fname - выводить логи в файл fname. По умолчанию smemory.log" << endl;
cout << "--datfile fname - Файл с картой датчиков. По умолчанию configure.xml" << endl; cout << "--datfile fname - Файл с картой датчиков. По умолчанию configure.xml" << endl;
cout << "--s-filter-field - Фильтр для загрузки списка датчиков." << endl; cout << "--s-filter-field - Фильтр для загрузки списка датчиков." << endl;
cout << "--s-filter-value - Значение фильтра для загрузки списка датчиков." << endl; cout << "--s-filter-value - Значение фильтра для загрузки списка датчиков." << endl;
...@@ -29,6 +28,18 @@ void SharedMemory::help_print( int argc, const char* const* argv ) ...@@ -29,6 +28,18 @@ void SharedMemory::help_print( int argc, const char* const* argv )
cout << "--sm-no-history - отключить ведение истории (аварийного следа)" << endl; cout << "--sm-no-history - отключить ведение истории (аварийного следа)" << endl;
cout << "--pulsar-id - датчик 'мигания'" << endl; cout << "--pulsar-id - датчик 'мигания'" << endl;
cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl; cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl;
cout << endl;
cout << " Logs: " << endl;
cout << "--sm-log-... - log control" << endl;
cout << " add-levels ..." << endl;
cout << " del-levels ..." << endl;
cout << " set-levels ..." << endl;
cout << " logfile filaname" << endl;
cout << " no-debug " << endl;
cout << " LogServer: " << endl;
cout << "--sm-run-logserver - run logserver. Default: localhost:id" << endl;
cout << "--sm-logserver-host ip - listen ip. Default: localhost" << endl;
cout << "--sm-logserver-port num - listen port. Default: ID" << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std::string& confname ): SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std::string& confname ):
...@@ -55,9 +66,27 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std: ...@@ -55,9 +66,27 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
if( confnode == NULL ) if( confnode == NULL )
throw SystemError("Not found conf-node for " + cname ); throw SystemError("Not found conf-node for " + cname );
string prefix="sm";
smlog = make_shared<DebugStream>();
conf->initLogStream(smlog,prefix+"-log");
loga = make_shared<LogAgregator>();
loga->add(smlog);
loga->add(ulog());
logserv = make_shared<LogServer>(loga);
UniXML::iterator it(confnode); UniXML::iterator it(confnode);
// ---------------------- // ----------------------
if( findArgParam("--" + prefix + "-run-logserver", conf->getArgc(), conf->getArgv()) != -1 )
{
logserv_host = conf->getArg2Param("--" + prefix + "-logserver-host", it.getProp("logserverHost"), "localhost");
logserv_port = conf->getArgPInt("--" + prefix + "-logserver-port", it.getProp("logserverPort"), getId());
}
// ----------------------
buildHistoryList(confnode); buildHistoryList(confnode);
signal_change_value().connect(sigc::mem_fun(*this, &SharedMemory::updateHistory)); signal_change_value().connect(sigc::mem_fun(*this, &SharedMemory::updateHistory));
...@@ -78,10 +107,10 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std: ...@@ -78,10 +107,10 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
if( heartbeat_node.empty() ) if( heartbeat_node.empty() )
{ {
dwarn << myname << "(init): --heartbeat-node NULL ===> heartbeat NOT USED..." << endl; smwarn << myname << "(init): --heartbeat-node NULL ===> heartbeat NOT USED..." << endl;
} }
else else
dinfo << myname << "(init): heartbeat-node: " << heartbeat_node << endl; sminfo << myname << "(init): heartbeat-node: " << heartbeat_node << endl;
heartbeatCheckTime = conf->getArgInt("--heartbeat-check-time", "1000"); heartbeatCheckTime = conf->getArgInt("--heartbeat-check-time", "1000");
...@@ -97,7 +126,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std: ...@@ -97,7 +126,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
if( !wdt_dev.empty() ) if( !wdt_dev.empty() )
wdt = make_shared<WDTInterface>(wdt_dev); wdt = make_shared<WDTInterface>(wdt_dev);
else else
dwarn << myname << "(init): watchdog timer NOT USED (--wdt-device NULL)" << endl; smwarn << myname << "(init): watchdog timer NOT USED (--wdt-device NULL)" << endl;
dblogging = conf->getArgInt("--db-logging"); dblogging = conf->getArgInt("--db-logging");
...@@ -119,7 +148,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std: ...@@ -119,7 +148,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
{ {
ostringstream err; ostringstream err;
err << myname << ": ID not found ('pulsar') for " << p; err << myname << ": ID not found ('pulsar') for " << p;
dcrit << myname << "(init): " << err.str() << endl; smcrit << myname << "(init): " << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -166,6 +195,12 @@ void SharedMemory::sysCommand( const SystemMessage* sm ) ...@@ -166,6 +195,12 @@ void SharedMemory::sysCommand( const SystemMessage* sm )
{ {
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() )
{
sminfo << myname << "(init): run log server " << logserv_host << ":" << logserv_port << endl;
logserv->run(logserv_host, logserv_port, true);
}
PassiveTimer ptAct(activateTimeout); PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() ) while( !activated && !ptAct.checkTime() )
...@@ -175,7 +210,7 @@ void SharedMemory::sysCommand( const SystemMessage* sm ) ...@@ -175,7 +210,7 @@ void SharedMemory::sysCommand( const SystemMessage* sm )
} }
if( !activated ) if( !activated )
dcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl; smcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
// подождать пока пройдёт инициализация // подождать пока пройдёт инициализация
// см. activateObject() // см. activateObject()
...@@ -207,26 +242,13 @@ void SharedMemory::sysCommand( const SystemMessage* sm ) ...@@ -207,26 +242,13 @@ void SharedMemory::sysCommand( const SystemMessage* sm )
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool SharedMemory::deactivateObject()
void SharedMemory::askSensors( UniversalIO::UIOCommand cmd )
{ {
/* if( logserv )
for( History::iterator it=hist.begin(); it!=hist.end(); ++it ) logserv = nullptr;
{
if( sm->id == it->fuse_id )
{
try
{
ui->askState( SID, cmd);
}
catch( const Exception& ex )
{
dlog.crit() << myname << "(askSensors): " << ex << endl;
}
}
*/
}
return IONotifyController_LT::deactivateObject();
}
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool SharedMemory::activateObject() bool SharedMemory::activateObject()
{ {
...@@ -326,11 +348,11 @@ void SharedMemory::checkHeartBeat() ...@@ -326,11 +348,11 @@ void SharedMemory::checkHeartBeat()
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(checkHeartBeat): " << ex << endl; smcrit << myname << "(checkHeartBeat): " << ex << endl;
} }
catch(...) catch(...)
{ {
dcrit << myname << "(checkHeartBeat): ..." << endl; smcrit << myname << "(checkHeartBeat): ..." << endl;
} }
} }
...@@ -370,7 +392,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato ...@@ -370,7 +392,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
<< ") указан неверно (" << ") указан неверно ("
<< it.getProp("iotype") << ") должен быть 'AI'"; << it.getProp("iotype") << ") должен быть 'AI'";
dcrit << msg.str() << endl; smcrit << msg.str() << endl;
kill(getpid(), SIGTERM); kill(getpid(), SIGTERM);
// throw NameNotFound(msg.str()); // throw NameNotFound(msg.str());
}; };
...@@ -385,7 +407,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato ...@@ -385,7 +407,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
{ {
ostringstream msg; ostringstream msg;
msg << "(SharedMemory::readItem): дискретный датчик (heartbeat_ds_name) связанный с " << it.getProp("name"); msg << "(SharedMemory::readItem): дискретный датчик (heartbeat_ds_name) связанный с " << it.getProp("name");
dwarn << msg.str() << endl; smwarn << msg.str() << endl;
} }
} }
else else
...@@ -399,7 +421,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato ...@@ -399,7 +421,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
// Если уж задали имя для датчика, то он должен существовать.. // Если уж задали имя для датчика, то он должен существовать..
// поэтому завершаем процесс, если не нашли.. // поэтому завершаем процесс, если не нашли..
dcrit << msg.str() << endl; smcrit << msg.str() << endl;
kill(getpid(), SIGTERM); kill(getpid(), SIGTERM);
// throw NameNotFound(msg.str()); // throw NameNotFound(msg.str());
} }
...@@ -414,7 +436,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato ...@@ -414,7 +436,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
msg << "(SharedMemory::readItem): НЕ УКАЗАН id для " msg << "(SharedMemory::readItem): НЕ УКАЗАН id для "
<< it.getProp("name") << " секция " << sec; << it.getProp("name") << " секция " << sec;
dcrit << msg.str() << endl; smcrit << msg.str() << endl;
kill(getpid(), SIGTERM); kill(getpid(), SIGTERM);
// throw NameNotFound(msg.str()); // throw NameNotFound(msg.str());
}; };
...@@ -469,7 +491,7 @@ void SharedMemory::readEventList( const std::string& oname ) ...@@ -469,7 +491,7 @@ void SharedMemory::readEventList( const std::string& oname )
if( enode == NULL ) if( enode == NULL )
{ {
dwarn << myname << "(readEventList): " << oname << " не найден..." << endl; smwarn << myname << "(readEventList): " << oname << " не найден..." << endl;
return; return;
} }
...@@ -477,7 +499,7 @@ void SharedMemory::readEventList( const std::string& oname ) ...@@ -477,7 +499,7 @@ void SharedMemory::readEventList( const std::string& oname )
if( !it.goChildren() ) if( !it.goChildren() )
{ {
dwarn << myname << "(readEventList): <eventlist> пустой..." << endl; smwarn << myname << "(readEventList): <eventlist> пустой..." << endl;
return; return;
} }
...@@ -490,11 +512,11 @@ void SharedMemory::readEventList( const std::string& oname ) ...@@ -490,11 +512,11 @@ void SharedMemory::readEventList( const std::string& oname )
if( oid != 0 ) if( oid != 0 )
{ {
dinfo << myname << "(readEventList): add " << it.getProp("name") << endl; sminfo << myname << "(readEventList): add " << it.getProp("name") << endl;
elst.push_back(oid); elst.push_back(oid);
} }
else else
dcrit << myname << "(readEventList): Не найден ID для " smcrit << myname << "(readEventList): Не найден ID для "
<< it.getProp("name") << endl; << it.getProp("name") << endl;
} }
} }
...@@ -518,7 +540,7 @@ void SharedMemory::sendEvent( UniSetTypes::SystemMessage& sm ) ...@@ -518,7 +540,7 @@ void SharedMemory::sendEvent( UniSetTypes::SystemMessage& sm )
} }
if(!ok) if(!ok)
dcrit << myname << "(sendEvent): Объект " << it << " НЕДОСТУПЕН" << endl; smcrit << myname << "(sendEvent): Объект " << it << " НЕДОСТУПЕН" << endl;
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -535,13 +557,13 @@ void SharedMemory::loggingInfo( SensorMessage& sm ) ...@@ -535,13 +557,13 @@ void SharedMemory::loggingInfo( SensorMessage& sm )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void SharedMemory::buildHistoryList( xmlNode* cnode ) void SharedMemory::buildHistoryList( xmlNode* cnode )
{ {
dinfo << myname << "(buildHistoryList): ..." << endl; sminfo << myname << "(buildHistoryList): ..." << endl;
const std::shared_ptr<UniXML> xml = uniset_conf()->getConfXML(); const std::shared_ptr<UniXML> xml = uniset_conf()->getConfXML();
if( !xml ) if( !xml )
{ {
dwarn << myname << "(buildHistoryList): xml=NULL?!" << endl; smwarn << myname << "(buildHistoryList): xml=NULL?!" << endl;
return; return;
} }
...@@ -549,7 +571,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode ) ...@@ -549,7 +571,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
if( !n ) if( !n )
{ {
dwarn << myname << "(buildHistoryList): <History> not found. ignore..." << endl; smwarn << myname << "(buildHistoryList): <History> not found. ignore..." << endl;
hist.clear(); hist.clear();
return; return;
} }
...@@ -560,7 +582,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode ) ...@@ -560,7 +582,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
if( no_history ) if( no_history )
{ {
dwarn << myname << "(buildHistoryList): no_history='1'.. history skipped..." << endl; smwarn << myname << "(buildHistoryList): no_history='1'.. history skipped..." << endl;
hist.clear(); hist.clear();
return; return;
} }
...@@ -572,7 +594,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode ) ...@@ -572,7 +594,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
if( !it.goChildren() ) if( !it.goChildren() )
{ {
dwarn << myname << "(buildHistoryList): <History> empty. ignore..." << endl; smwarn << myname << "(buildHistoryList): <History> empty. ignore..." << endl;
return; return;
} }
...@@ -594,7 +616,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode ) ...@@ -594,7 +616,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
if( hi.fuse_id == DefaultObjectId ) if( hi.fuse_id == DefaultObjectId )
{ {
dwarn << myname << "(buildHistory): not found sensor ID for " smwarn << myname << "(buildHistory): not found sensor ID for "
<< it.getProp("fuse_id") << it.getProp("fuse_id")
<< " history item id=" << it.getProp("id") << " history item id=" << it.getProp("id")
<< " ..ignore.." << endl; << " ..ignore.." << endl;
...@@ -611,7 +633,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode ) ...@@ -611,7 +633,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
hi.fuse_val = it.getIntProp("fuse_value"); hi.fuse_val = it.getIntProp("fuse_value");
} }
dinfo << myname << "(buildHistory): add fuse_id=" << hi.fuse_id sminfo << myname << "(buildHistory): add fuse_id=" << hi.fuse_id
<< " fuse_val=" << hi.fuse_val << " fuse_val=" << hi.fuse_val
<< " fuse_use_val=" << hi.fuse_use_val << " fuse_use_val=" << hi.fuse_use_val
<< " fuse_invert=" << hi.fuse_invert << " fuse_invert=" << hi.fuse_invert
...@@ -621,7 +643,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode ) ...@@ -621,7 +643,7 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
hist.push_back(hi); hist.push_back(hi);
} }
dinfo << myname << "(buildHistoryList): history logs count=" << hist.size() << endl; sminfo << myname << "(buildHistoryList): history logs count=" << hist.size() << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void SharedMemory::checkHistoryFilter( UniXML::iterator& xit ) void SharedMemory::checkHistoryFilter( UniXML::iterator& xit )
...@@ -642,7 +664,7 @@ void SharedMemory::checkHistoryFilter( UniXML::iterator& xit ) ...@@ -642,7 +664,7 @@ void SharedMemory::checkHistoryFilter( UniXML::iterator& xit )
if( id == DefaultObjectId ) if( id == DefaultObjectId )
{ {
dwarn << myname << "(checkHistoryFilter): not found sensor ID for " << xit.getProp("name") << endl; smwarn << myname << "(checkHistoryFilter): not found sensor ID for " << xit.getProp("name") << endl;
continue; continue;
} }
...@@ -698,7 +720,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll ...@@ -698,7 +720,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll
sm_tv_usec = s_it->tv_usec; sm_tv_usec = s_it->tv_usec;
} }
dinfo << myname << "(updateHistory): " sminfo << myname << "(updateHistory): "
<< " sid=" << s_it->si.id << " sid=" << s_it->si.id
<< " value=" << value << " value=" << value
<< endl; << endl;
...@@ -717,7 +739,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll ...@@ -717,7 +739,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll
if( st ) if( st )
{ {
dinfo << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl; sminfo << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
it->fuse_sec = sm_tv_sec; it->fuse_sec = sm_tv_sec;
it->fuse_usec = sm_tv_usec; it->fuse_usec = sm_tv_usec;
...@@ -736,7 +758,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll ...@@ -736,7 +758,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll
if( !st ) if( !st )
{ {
dinfo << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl; sminfo << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
it->fuse_sec = sm_tv_sec; it->fuse_sec = sm_tv_sec;
it->fuse_usec = sm_tv_usec; it->fuse_usec = sm_tv_usec;
...@@ -747,7 +769,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll ...@@ -747,7 +769,7 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll
{ {
if( value == it->fuse_val ) if( value == it->fuse_val )
{ {
dinfo << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl; sminfo << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
it->fuse_sec = sm_tv_sec; it->fuse_sec = sm_tv_sec;
it->fuse_usec = sm_tv_usec; it->fuse_usec = sm_tv_usec;
...@@ -786,13 +808,13 @@ void SharedMemory::initFromReserv() ...@@ -786,13 +808,13 @@ void SharedMemory::initFromReserv()
if( !it.find("ReservList") ) if( !it.find("ReservList") )
{ {
dinfo << myname << "(initFromReserv): <ReservList> not found... ignore.. " << endl; sminfo << myname << "(initFromReserv): <ReservList> not found... ignore.. " << endl;
return; return;
} }
if( !it.goChildren() ) if( !it.goChildren() )
{ {
dwarn << myname << "(initFromReserv): <ReservList> EMPTY?... ignore.. " << endl; smwarn << myname << "(initFromReserv): <ReservList> EMPTY?... ignore.. " << endl;
return; return;
} }
...@@ -814,7 +836,7 @@ void SharedMemory::initFromReserv() ...@@ -814,7 +836,7 @@ void SharedMemory::initFromReserv()
{ {
ostringstream err; ostringstream err;
err << myname << "(initFromReserv): Not found ID for '" << smName << "'"; err << myname << "(initFromReserv): Not found ID for '" << smName << "'";
dcrit << err.str() << endl; smcrit << err.str() << endl;
// throw SystemError(err.str()); // throw SystemError(err.str());
raise(SIGTERM); raise(SIGTERM);
} }
...@@ -830,7 +852,7 @@ void SharedMemory::initFromReserv() ...@@ -830,7 +852,7 @@ void SharedMemory::initFromReserv()
{ {
ostringstream err; ostringstream err;
err << myname << "(initFromReserv): Not found NodeID for '" << smNode << "'"; err << myname << "(initFromReserv): Not found NodeID for '" << smNode << "'";
dcrit << err.str() << endl; smcrit << err.str() << endl;
// throw SystemError(err.str()); // throw SystemError(err.str());
raise(SIGTERM); raise(SIGTERM);
} }
...@@ -838,25 +860,25 @@ void SharedMemory::initFromReserv() ...@@ -838,25 +860,25 @@ void SharedMemory::initFromReserv()
if( sm_id == getId() && sm_node == conf->getLocalNode() ) if( sm_id == getId() && sm_node == conf->getLocalNode() )
{ {
dcrit << myname << "(initFromReserv): Initialization of himself?! ignore.." << endl; smcrit << myname << "(initFromReserv): Initialization of himself?! ignore.." << endl;
continue; continue;
} }
if( initFromSM(sm_id, sm_node) ) if( initFromSM(sm_id, sm_node) )
{ {
dinfo << myname << "(initFromReserv): init from sm_id='" << smName << "' sm_node='" << smNode << "' [OK]" << endl; sminfo << myname << "(initFromReserv): init from sm_id='" << smName << "' sm_node='" << smNode << "' [OK]" << endl;
return; return;
} }
dinfo << myname << "(initFromReserv): init from sm_id='" << smName << "' sm_node='" << smNode << "' [FAILED]" << endl; sminfo << myname << "(initFromReserv): init from sm_id='" << smName << "' sm_node='" << smNode << "' [FAILED]" << endl;
} }
dwarn << myname << "(initFromReserv): FAILED INIT FROM <ReservList>" << endl; smwarn << myname << "(initFromReserv): FAILED INIT FROM <ReservList>" << endl;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectId sm_node ) bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectId sm_node )
{ {
dinfo << myname << "(initFromSM): init from sm_id='" << sm_id << "' sm_node='" << sm_node << "'" << endl; sminfo << myname << "(initFromSM): init from sm_id='" << sm_id << "' sm_node='" << sm_node << "'" << endl;
// SENSORS MAP // SENSORS MAP
try try
...@@ -880,7 +902,7 @@ bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectI ...@@ -880,7 +902,7 @@ bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectI
if( io == myioEnd() ) if( io == myioEnd() )
{ {
dcrit << myname << "(initFromSM): not found sensor id=" << ii.si.id << "'" << endl; smcrit << myname << "(initFromSM): not found sensor id=" << ii.si.id << "'" << endl;
continue; continue;
} }
...@@ -897,11 +919,11 @@ bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectI ...@@ -897,11 +919,11 @@ bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectI
} }
catch( const Exception& ex ) catch( const Exception& ex )
{ {
dcrit << myname << "(initFromSM): " << ex << endl; smcrit << myname << "(initFromSM): " << ex << endl;
} }
catch( const IOController_i::NameNotFound& ex ) catch( const IOController_i::NameNotFound& ex )
{ {
dcrit << myname << "(initFromSM): not found sensor id=" << ii.si.id << "'" << endl; smcrit << myname << "(initFromSM): not found sensor id=" << ii.si.id << "'" << endl;
} }
} }
...@@ -909,7 +931,7 @@ bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectI ...@@ -909,7 +931,7 @@ bool SharedMemory::initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectI
} }
catch( const UniSetTypes::Exception& ex ) catch( const UniSetTypes::Exception& ex )
{ {
dwarn << myname << "(initFromSM): " << ex << endl; smwarn << myname << "(initFromSM): " << ex << endl;
} }
return false; return false;
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
#include "PassiveTimer.h" #include "PassiveTimer.h"
#include "NCRestorer.h" #include "NCRestorer.h"
#include "WDTInterface.h" #include "WDTInterface.h"
#include "LogServer.h"
#include "DebugStream.h"
#include "SMLogSugar.h"
#include "LogAgregator.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
/*! \page page_SharedMemory Реализация разделямой между процессами памяти (SharedMemory) /*! \page page_SharedMemory Реализация разделямой между процессами памяти (SharedMemory)
...@@ -377,7 +381,7 @@ class SharedMemory: ...@@ -377,7 +381,7 @@ class SharedMemory:
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override; virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override;
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override; virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override;
virtual void askSensors( UniversalIO::UIOCommand cmd ); virtual void askSensors( UniversalIO::UIOCommand cmd ){};
void sendEvent( UniSetTypes::SystemMessage& sm ); void sendEvent( UniSetTypes::SystemMessage& sm );
void initFromReserv(); void initFromReserv();
bool initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectId sm_node ); bool initFromSM( UniSetTypes::ObjectId sm_id, UniSetTypes::ObjectId sm_node );
...@@ -385,6 +389,7 @@ class SharedMemory: ...@@ -385,6 +389,7 @@ class SharedMemory:
// действия при завершении работы // действия при завершении работы
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual bool deactivateObject() override;
bool readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterator& it, xmlNode* sec ); bool readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterator& it, xmlNode* sec );
void buildEventList( xmlNode* cnode ); void buildEventList( xmlNode* cnode );
...@@ -464,6 +469,12 @@ class SharedMemory: ...@@ -464,6 +469,12 @@ class SharedMemory:
xmlNode* confnode; xmlNode* confnode;
std::shared_ptr<LogAgregator> loga;
std::shared_ptr<DebugStream> smlog;
std::shared_ptr<LogServer> logserv;
std::string logserv_host = {""};
int logserv_port = {0};
private: private:
HistorySlot m_historySignal; HistorySlot m_historySignal;
}; };
......
...@@ -23,10 +23,13 @@ int main(int argc, const char** argv) ...@@ -23,10 +23,13 @@ int main(int argc, const char** argv)
{ {
auto conf = uniset_init(argc, argv); auto conf = uniset_init(argc, argv);
string logfilename = conf->getArgParam("--logfile", "smemory.log"); string logfilename = conf->getArgParam("--logfile", "");
if( !logfilename.empty() )
{
string logname( conf->getLogDir() + logfilename ); string logname( conf->getLogDir() + logfilename );
ulog()->logFile( logname ); ulog()->logFile( logname );
dlog()->logFile( logname ); dlog()->logFile( logname );
}
auto shm = SharedMemory::init_smemory(argc, argv); auto shm = SharedMemory::init_smemory(argc, argv);
......
...@@ -5,6 +5,7 @@ export LD_LIBRARY_PATH="../../lib/.libs;../lib/.libs" ...@@ -5,6 +5,7 @@ export LD_LIBRARY_PATH="../../lib/.libs;../lib/.libs"
ulimit -Sc 10000000000 ulimit -Sc 10000000000
./uniset2-start.sh -f ./uniset2-smemory --smemory-id SharedMemory --pulsar-id DO_C --pulsar-iotype DO --pulsar-msec 100 \ ./uniset2-start.sh -f ./uniset2-smemory --smemory-id SharedMemory --pulsar-id DO_C --pulsar-iotype DO --pulsar-msec 100 \
--confile test.xml --datfile test.xml --db-logging 1 --ulog-add-levels system $* \ --confile test.xml --datfile test.xml --db-logging 1 --ulog-add-levels system \
--sm-log-add-levels any $* \
#--ulog-add-levels info,crit,warn,level9,system \ #--ulog-add-levels info,crit,warn,level9,system \
#--dlog-add-levels info,crit,warn \ #--dlog-add-levels info,crit,warn \
...@@ -106,7 +106,7 @@ class LogServer ...@@ -106,7 +106,7 @@ class LogServer
std::atomic_bool cancelled; std::atomic_bool cancelled;
DebugStream mylog; DebugStream mylog;
ThreadCreator<LogServer>* thr; std::shared_ptr< ThreadCreator<LogServer> > thr;
ost::TCPSocket* tcp; ost::TCPSocket* tcp;
std::shared_ptr<DebugStream> elog; std::shared_ptr<DebugStream> elog;
......
...@@ -24,16 +24,6 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress& ia, int port ): ...@@ -24,16 +24,6 @@ ModbusTCPServer::ModbusTCPServer( ost::InetAddress& ia, int port ):
ModbusTCPServer::~ModbusTCPServer() ModbusTCPServer::~ModbusTCPServer()
{ {
terminate(); terminate();
/*
{
uniset_mutex_lock l(sMutex);
for( auto& s: slist )
{
if( s->isRunning() )
s->ost::Thread::join();
}
}
*/
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPServer::setMaxSessions( unsigned int num ) void ModbusTCPServer::setMaxSessions( unsigned int num )
...@@ -375,7 +365,7 @@ void ModbusTCPServer::terminate() ...@@ -375,7 +365,7 @@ void ModbusTCPServer::terminate()
uniset_mutex_lock l(sMutex); uniset_mutex_lock l(sMutex);
for( auto& s : slist ) for( const auto& s : slist )
{ {
try try
{ {
...@@ -404,7 +394,7 @@ void ModbusTCPServer::getSessions( Sessions& lst ) ...@@ -404,7 +394,7 @@ void ModbusTCPServer::getSessions( Sessions& lst )
{ {
uniset_mutex_lock l(sMutex); uniset_mutex_lock l(sMutex);
for( auto& i : slist ) for( const auto& i : slist )
{ {
SessionInfo inf( i->getClientAddress(), i->getAskCount() ); SessionInfo inf( i->getClientAddress(), i->getAskCount() );
lst.push_back(inf); lst.push_back(inf);
......
...@@ -12,10 +12,9 @@ LogServer::~LogServer() ...@@ -12,10 +12,9 @@ LogServer::~LogServer()
{ {
if( nullsess ) if( nullsess )
nullsess->cancel(); nullsess->cancel();
{ {
// uniset_rwmutex_wrlock l(mutSList); // uniset_rwmutex_wrlock l(mutSList);
for( auto& i : slist ) for( const auto& i : slist )
{ {
if( i->isRunning() ) if( i->isRunning() )
i->cancel(); i->cancel();
...@@ -24,17 +23,14 @@ LogServer::~LogServer() ...@@ -24,17 +23,14 @@ LogServer::~LogServer()
cancelled = true; cancelled = true;
if( tcp && !slist.empty() )
tcp->reject();
if( thr ) if( thr )
{
thr->stop(); thr->stop();
if( thr->isRunning() )
thr->join();
delete thr;
}
delete tcp; delete tcp;
tcp = 0;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
LogServer::LogServer( std::shared_ptr<LogAgregator> log ): LogServer::LogServer( std::shared_ptr<LogAgregator> log ):
...@@ -110,7 +106,7 @@ void LogServer::run( const std::string& addr, ost::tpport_t port, bool thread ) ...@@ -110,7 +106,7 @@ void LogServer::run( const std::string& addr, ost::tpport_t port, bool thread )
work(); work();
else else
{ {
thr = new ThreadCreator<LogServer>(this, &LogServer::work); thr = make_shared<ThreadCreator<LogServer>>(this, &LogServer::work);
thr->start(); thr->start();
} }
} }
...@@ -125,6 +121,7 @@ void LogServer::work() ...@@ -125,6 +121,7 @@ void LogServer::work()
{ {
while( !cancelled && tcp->isPendingConnection(timeout) ) while( !cancelled && tcp->isPendingConnection(timeout) )
{ {
if( cancelled ) break;
{ {
uniset_rwmutex_wrlock l(mutSList); uniset_rwmutex_wrlock l(mutSList);
int sz = slist.size(); int sz = slist.size();
...@@ -149,6 +146,8 @@ void LogServer::work() ...@@ -149,6 +146,8 @@ void LogServer::work()
} }
} }
if( cancelled ) break;
auto s = make_shared<LogSession>(*tcp, elog, sessTimeout, cmdTimeout, outTimeout); auto s = make_shared<LogSession>(*tcp, elog, sessTimeout, cmdTimeout, outTimeout);
s->setSessionLogLevel(sessLogLevel); s->setSessionLogLevel(sessLogLevel);
{ {
...@@ -178,7 +177,7 @@ void LogServer::work() ...@@ -178,7 +177,7 @@ void LogServer::work()
{ {
// uniset_rwmutex_wrlock l(mutSList); // uniset_rwmutex_wrlock l(mutSList);
for( auto& i : slist ) for( const auto& i : slist )
i->disconnect(); i->disconnect();
if( nullsess ) if( nullsess )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment