Commit b8688490 authored by Pavel Vainerman's avatar Pavel Vainerman

(VMonit): сделана сортировка по алфафиту, переписана реализация функций

вывода на экран.
parent 6b5e42ab
...@@ -1036,18 +1036,44 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1036,18 +1036,44 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
ostringstream s; ostringstream s;
s &lt;&lt; myname &lt;&lt; ": " &lt;&lt; endl; s &lt;&lt; myname &lt;&lt; ": " &lt;&lt; endl;
std::vector&lt;std::string&gt; v; std::list&lt;std::string&gt; v_in;
ostringstream s1; ostringstream s1;
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
<xsl:sort select="@name" order="ascending" data-type="text"/>
<xsl:if test="normalize-space(@vartype)='in'">
s1.str(""); s1.str("");
s1 &lt;&lt; " " &lt;&lt; setw(30) &lt;&lt; std::right &lt;&lt; "<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>" s1 &lt;&lt; " " &lt;&lt; setw(30) &lt;&lt; std::right &lt;&lt; "<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>"
&lt;&lt; "(" &lt;&lt; setw(30) &lt;&lt; std::left &lt;&lt; ORepHelpers::getShortName( uniset_conf()->oind->getMapName(<xsl:value-of select="@name"/>)) &lt;&lt; ")" &lt;&lt; " ( " &lt;&lt; setw(30) &lt;&lt; std::left &lt;&lt; ORepHelpers::getShortName( uniset_conf()->oind->getMapName(<xsl:value-of select="@name"/>)) &lt;&lt; " )"
&lt;&lt; std::right &lt;&lt; " = " &lt;&lt; setw(6) &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>; &lt;&lt; std::right &lt;&lt; " = " &lt;&lt; setw(6) &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
v.push_back(s1.str()); v_in.push_back(s1.str());
</xsl:if>
</xsl:for-each>
std::list&lt;std::string&gt; v_out;
<xsl:for-each select="//smap/item">
<xsl:sort select="@name" order="ascending" data-type="text"/>
<xsl:if test="normalize-space(@vartype)='out'">
s1.str("");
s1 &lt;&lt; " " &lt;&lt; setw(30) &lt;&lt; std::right &lt;&lt; "<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>"
&lt;&lt; " ( " &lt;&lt; setw(30) &lt;&lt; std::left &lt;&lt; ORepHelpers::getShortName( uniset_conf()->oind->getMapName(<xsl:value-of select="@name"/>)) &lt;&lt; " )"
&lt;&lt; std::right &lt;&lt; " = " &lt;&lt; setw(6) &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
v_out.push_back(s1.str());
</xsl:if>
</xsl:for-each> </xsl:for-each>
s &lt;&lt; endl;
int n = 0; int n = 0;
for( const auto&amp; e: v ) for( const auto&amp; e: v_in )
{
s &lt;&lt; e;
if( (n++)%2 )
s &lt;&lt; std::endl;
}
s &lt;&lt; endl;
n = 0;
for( const auto&amp; e: v_out )
{ {
s &lt;&lt; e; s &lt;&lt; e;
if( (n++)%2 ) if( (n++)%2 )
...@@ -1354,6 +1380,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1354,6 +1380,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
vector&lt;std::string&gt; v; vector&lt;std::string&gt; v;
<xsl:for-each select="//sensors/item/consumers/consumer"> <xsl:for-each select="//sensors/item/consumers/consumer">
<xsl:sort select="../../@name" order="ascending" data-type="text"/>
<xsl:if test="normalize-space(../../@msg)!='1'"> <xsl:if test="normalize-space(../../@msg)!='1'">
<xsl:if test="normalize-space(@name)=$OID"> <xsl:if test="normalize-space(@name)=$OID">
s1.str(""); s1.str("");
...@@ -1363,6 +1390,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1363,6 +1390,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
std::sort(std::begin(v),std::end(v));
int n=0; int n=0;
for( const auto&amp; e: v ) for( const auto&amp; e: v )
{ {
...@@ -1401,7 +1429,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::Object ...@@ -1401,7 +1429,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( UniSetTypes::Object
if( id == <xsl:value-of select="../../@name"/> ) if( id == <xsl:value-of select="../../@name"/> )
{ {
s &lt;&lt; "<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>"; s &lt;&lt; "<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>";
if( showLinkName ) s &lt;&lt; "(<xsl:value-of select="../../@name"/>)"; if( showLinkName ) s &lt;&lt; " ( <xsl:value-of select="../../@name"/> )";
s &lt;&lt; "=" &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; s &lt;&lt; "=" &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>;
return std::move(s.str()); return std::move(s.str());
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.2 Version: 2.2
Release: alt8 Release: alt8.1
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Wed Oct 14 2015 Pavel Vainerman <pv@altlinux.ru> 2.2-alt8.1
- (VMonit): sort output
* Thu Oct 08 2015 Pavel Vainerman <pv@altlinux.ru> 2.2-alt8 * Thu Oct 08 2015 Pavel Vainerman <pv@altlinux.ru> 2.2-alt8
- (uniset-codegen): minor fixes in resetMsg() mechanism - (uniset-codegen): minor fixes in resetMsg() mechanism
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2015-06-08+03:00 // generate timestamp: 2015-10-14+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
...@@ -31,7 +31,7 @@ class UObject_SK: ...@@ -31,7 +31,7 @@ class UObject_SK:
public LT_Object public LT_Object
{ {
public: public:
UObject_SK( UniSetTypes::ObjectId id, xmlNode* node = UniSetTypes::uniset_conf()->getNode("UObject"), const std::string& argprefix = "" ); UObject_SK( UniSetTypes::ObjectId id, xmlNode* node=UniSetTypes::uniset_conf()->getNode("UObject"), const std::string& argprefix="" );
UObject_SK(); UObject_SK();
virtual ~UObject_SK(); virtual ~UObject_SK();
...@@ -45,60 +45,54 @@ class UObject_SK: ...@@ -45,60 +45,54 @@ class UObject_SK:
virtual bool setMsg( UniSetTypes::ObjectId code, bool state = true ); virtual bool setMsg( UniSetTypes::ObjectId code, bool state = true );
inline std::shared_ptr<DebugStream> log() inline std::shared_ptr<DebugStream> log(){ return mylog; }
{ inline std::shared_ptr<LogAgregator> logAgregator(){ return loga; }
return mylog;
}
inline std::shared_ptr<LogAgregator> logAgregator()
{
return loga;
}
void init_dlog( std::shared_ptr<DebugStream> d ); void init_dlog( std::shared_ptr<DebugStream> d );
// "синтаксический сахар"..для логов // "синтаксический сахар"..для логов
#ifndef myinfo #ifndef myinfo
#define myinfo if( log()->debugging(Debug::INFO) ) log()->info() #define myinfo if( log()->debugging(Debug::INFO) ) log()->info()
#endif #endif
#ifndef mywarn #ifndef mywarn
#define mywarn if( log()->debugging(Debug::WARN) ) log()->warn() #define mywarn if( log()->debugging(Debug::WARN) ) log()->warn()
#endif #endif
#ifndef mycrit #ifndef mycrit
#define mycrit if( log()->debugging(Debug::CRIT) ) log()->crit() #define mycrit if( log()->debugging(Debug::CRIT) ) log()->crit()
#endif #endif
#ifndef mylog1 #ifndef mylog1
#define mylog1 if( log()->debugging(Debug::LEVEL1) ) log()->level1() #define mylog1 if( log()->debugging(Debug::LEVEL1) ) log()->level1()
#endif #endif
#ifndef mylog2 #ifndef mylog2
#define mylog2 if( log()->debugging(Debug::LEVEL2) ) log()->level2() #define mylog2 if( log()->debugging(Debug::LEVEL2) ) log()->level2()
#endif #endif
#ifndef mylog3 #ifndef mylog3
#define mylog3 if( log()->debugging(Debug::LEVEL3) ) log()->level3() #define mylog3 if( log()->debugging(Debug::LEVEL3) ) log()->level3()
#endif #endif
#ifndef mylog4 #ifndef mylog4
#define mylog4 if( log()->debugging(Debug::LEVEL4) ) log()->level4() #define mylog4 if( log()->debugging(Debug::LEVEL4) ) log()->level4()
#endif #endif
#ifndef mylog5 #ifndef mylog5
#define mylog5 if( log()->debugging(Debug::LEVEL5) ) log()->level5() #define mylog5 if( log()->debugging(Debug::LEVEL5) ) log()->level5()
#endif #endif
#ifndef mylog6 #ifndef mylog6
#define mylog6 if( log()->debugging(Debug::LEVEL6) ) log()->level6() #define mylog6 if( log()->debugging(Debug::LEVEL6) ) log()->level6()
#endif #endif
#ifndef mylog7 #ifndef mylog7
#define mylog7 if( log()->debugging(Debug::LEVEL7) ) log()->level7() #define mylog7 if( log()->debugging(Debug::LEVEL7) ) log()->level7()
#endif #endif
#ifndef mylog8 #ifndef mylog8
#define mylog8 if( log()->debugging(Debug::LEVEL8) ) log()->level8() #define mylog8 if( log()->debugging(Debug::LEVEL8) ) log()->level8()
#endif #endif
#ifndef mylog9 #ifndef mylog9
#define mylog9 if( log()->debugging(Debug::LEVEL9) ) log()->level9() #define mylog9 if( log()->debugging(Debug::LEVEL9) ) log()->level9()
#endif #endif
#ifndef mylogany #ifndef mylogany
#define mylogany log()->any() #define mylogany log()->any()
#endif #endif
#ifndef vmonit #ifndef vmonit
#define vmonit( var ) vmon.add( #var, var ) #define vmonit( var ) vmon.add( #var, var )
#endif #endif
// Вспомогательные функции для удобства логирования // Вспомогательные функции для удобства логирования
// ------------------------------------------------------------ // ------------------------------------------------------------
...@@ -115,20 +109,18 @@ class UObject_SK: ...@@ -115,20 +109,18 @@ class UObject_SK:
\param id - идентификатор датчика \param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить \param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/ */
std::string str( UniSetTypes::ObjectId id, bool showLinkName = true ); std::string str( UniSetTypes::ObjectId id, bool showLinkName=true );
/*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val /*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val
\param id - идентификатор датчика \param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить \param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/ */
std::string strval( UniSetTypes::ObjectId id, bool showLinkName = true ); std::string strval( UniSetTypes::ObjectId id, bool showLinkName=true );
/*! Вывод состояния внутренних переменных */ /*! Вывод состояния внутренних переменных */
inline std::string dumpVars() inline std::string dumpVars(){ return std::move(vmon.pretty_str()); }
{
return std::move(vmon.pretty_str());
}
// ------------------------------------------------------------ // ------------------------------------------------------------
std::string help();
...@@ -155,16 +147,13 @@ class UObject_SK: ...@@ -155,16 +147,13 @@ class UObject_SK:
virtual void callback() override; virtual void callback() override;
virtual void processingMessage( UniSetTypes::VoidMessage* msg ) override; virtual void processingMessage( UniSetTypes::VoidMessage* msg ) override;
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) {}; virtual void sysCommand( const UniSetTypes::SystemMessage* sm ){};
virtual void askSensors( UniversalIO::UIOCommand cmd ) {} virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override {} virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override{}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override {} virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override{}
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual std::string getMonitInfo() virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */
{
return ""; /*!< пользовательская информация выводимая в getInfo() */
}
virtual void testMode( bool state ); virtual void testMode( bool state );
void updatePreviousValues(); void updatePreviousValues();
...@@ -183,7 +172,7 @@ class UObject_SK: ...@@ -183,7 +172,7 @@ class UObject_SK:
int resetMsgTime; int resetMsgTime;
// Выполнение очередного шага программы // Выполнение очередного шага программы
virtual void step() {} virtual void step(){}
int sleep_msec; /*!< пауза между итерациями */ int sleep_msec; /*!< пауза между итерациями */
bool active; bool active;
...@@ -198,15 +187,9 @@ class UObject_SK: ...@@ -198,15 +187,9 @@ class UObject_SK:
xmlNode* confnode; xmlNode* confnode;
/*! получить числовое свойство из конф. файла по привязанной confnode */ /*! получить числовое свойство из конф. файла по привязанной confnode */
int getIntProp(const std::string& name) int getIntProp(const std::string& name) { return UniSetTypes::uniset_conf()->getIntProp(confnode, name); }
{
return UniSetTypes::uniset_conf()->getIntProp(confnode, name);
}
/*! получить текстовое свойство из конф. файла по привязанной confnode */ /*! получить текстовое свойство из конф. файла по привязанной confnode */
inline const std::string getProp(const std::string& name) inline const std::string getProp(const std::string& name) { return UniSetTypes::uniset_conf()->getProp(confnode, name); }
{
return UniSetTypes::uniset_conf()->getProp(confnode, name);
}
int smReadyTimeout; /*!< время ожидания готовности SM */ int smReadyTimeout; /*!< время ожидания готовности SM */
std::atomic_bool activated; std::atomic_bool activated;
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2015-06-08+03:00 // generate timestamp: 2015-10-14+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <memory> #include <memory>
#include <iomanip> #include <iomanip>
...@@ -32,26 +32,26 @@ using namespace UniSetTypes; ...@@ -32,26 +32,26 @@ using namespace UniSetTypes;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UObject_SK::UObject_SK(): UObject_SK::UObject_SK():
// Инициализация идентификаторов (имена берутся из конф. файла) // Инициализация идентификаторов (имена берутся из конф. файла)
// Используемые идентификаторы сообщений (имена берутся из конф. файла) // Используемые идентификаторы сообщений (имена берутся из конф. файла)
// variables // variables
active(false), active(false),
idHeartBeat(DefaultObjectId), idHeartBeat(DefaultObjectId),
maxHeartBeat(10), maxHeartBeat(10),
confnode(0), confnode(0),
smReadyTimeout(0), smReadyTimeout(0),
activated(false), activated(false),
askPause(2000), askPause(2000),
forceOut(false), forceOut(false),
end_private(false) end_private(false)
{ {
ucrit << "UObject: init failed!!!!!!!!!!!!!!!" << endl; ucrit << "UObject: init failed!!!!!!!!!!!!!!!" << endl;
throw Exception( string(myname + ": init failed!!!") ); throw Exception( string(myname+": init failed!!!") );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// ( val, confval, default val ) // ( val, confval, default val )
...@@ -59,7 +59,6 @@ static const std::string init3_str( const std::string& s1, const std::string& s2 ...@@ -59,7 +59,6 @@ static const std::string init3_str( const std::string& s1, const std::string& s2
{ {
if( !s1.empty() ) if( !s1.empty() )
return s1; return s1;
if( !s2.empty() ) if( !s2.empty() )
return s2; return s2;
...@@ -67,34 +66,34 @@ static const std::string init3_str( const std::string& s1, const std::string& s2 ...@@ -67,34 +66,34 @@ static const std::string init3_str( const std::string& s1, const std::string& s2
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argprefix ): UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argprefix ):
UniSetObject(id), UniSetObject(id),
argprefix( (_argprefix.empty() ? myname + "-" : _argprefix) ), argprefix( (_argprefix.empty() ? myname+"-" : _argprefix) ),
// Инициализация идентификаторов (имена берутся из конф. файла) // Инициализация идентификаторов (имена берутся из конф. файла)
// Используемые идентификаторы сообщений (имена берутся из конф. файла) // Используемые идентификаторы сообщений (имена берутся из конф. файла)
// variables // variables
sleep_msec(150), sleep_msec(150),
active(true), active(true),
idHeartBeat(DefaultObjectId), idHeartBeat(DefaultObjectId),
maxHeartBeat(10), maxHeartBeat(10),
confnode(cnode), confnode(cnode),
smReadyTimeout(0), smReadyTimeout(0),
activated(false), activated(false),
askPause(uniset_conf()->getPIntProp(cnode, "askPause", 2000)), askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000)),
forceOut(false), forceOut(false),
end_private(false) end_private(false)
{ {
auto conf = uniset_conf(); auto conf = uniset_conf();
if( UniSetTypes::findArgParam("--print-id-list", uniset_conf()->getArgc(), uniset_conf()->getArgv()) != -1 ) if( UniSetTypes::findArgParam("--print-id-list",uniset_conf()->getArgc(),uniset_conf()->getArgv()) != -1 )
{ {
// abort(); // abort();
} }
...@@ -110,10 +109,10 @@ UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argpref ...@@ -110,10 +109,10 @@ UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argpref
{ {
ostringstream s; ostringstream s;
s << argprefix << "log"; s << argprefix << "log";
conf->initLogStream(mylog, s.str()); conf->initLogStream(mylog,s.str());
} }
loga = make_shared<LogAgregator>(myname + "-loga"); loga = make_shared<LogAgregator>(myname+"-loga");
loga->add(mylog); loga->add(mylog);
loga->add(ulog()); loga->add(ulog());
...@@ -131,14 +130,12 @@ UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argpref ...@@ -131,14 +130,12 @@ UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argpref
logserv_port = conf->getArgPInt("--" + argprefix + "logserver-port", it.getProp("logserverPort"), getId()); logserv_port = conf->getArgPInt("--" + argprefix + "logserver-port", it.getProp("logserverPort"), getId());
} }
forceOut = conf->getArgPInt("--" + argprefix + "force-out", it.getProp("forceOut"), false); forceOut = conf->getArgPInt("--" + argprefix + "force-out",it.getProp("forceOut"),false);
string heart = conf->getArgParam("--" + argprefix + "heartbeat-id", it.getProp("heartbeat_id"));
string heart = conf->getArgParam("--" + argprefix + "heartbeat-id",it.getProp("heartbeat_id"));
if( !heart.empty() ) if( !heart.empty() )
{ {
idHeartBeat = conf->getSensorID(heart); idHeartBeat = conf->getSensorID(heart);
if( idHeartBeat == DefaultObjectId ) if( idHeartBeat == DefaultObjectId )
{ {
ostringstream err; ostringstream err;
...@@ -146,37 +143,34 @@ UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argpref ...@@ -146,37 +143,34 @@ UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argpref
throw SystemError(err.str()); throw SystemError(err.str());
} }
int heartbeatTime = conf->getArgPInt("--" + argprefix + "heartbeat-time", it.getProp("heartbeatTime"), conf->getHeartBeatTime()); int heartbeatTime = conf->getArgPInt("--" + argprefix + "heartbeat-time",it.getProp("heartbeatTime"),conf->getHeartBeatTime());
if( heartbeatTime>0 )
if( heartbeatTime > 0 )
ptHeartBeat.setTiming(heartbeatTime); ptHeartBeat.setTiming(heartbeatTime);
else else
ptHeartBeat.setTiming(UniSetTimer::WaitUpTime); ptHeartBeat.setTiming(UniSetTimer::WaitUpTime);
maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max", it.getProp("heartbeat_max"), 10); maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10);
} }
// Инициализация значений // Инициализация значений
sleep_msec = conf->getArgPInt("--" + argprefix + "sleep-msec", "150", 150); sleep_msec = conf->getArgPInt("--" + argprefix + "sleep-msec","150", 150);
string s_resetTime(""); string s_resetTime("");
if( s_resetTime.empty() ) if( s_resetTime.empty() )
s_resetTime = "500"; s_resetTime = "500";
resetMsgTime = uni_atoi(init3_str(conf->getArgParam("--" + argprefix + "resetMsgTime"), conf->getProp(cnode, "resetMsgTime"), s_resetTime)); resetMsgTime = uni_atoi(init3_str(conf->getArgParam("--" + argprefix + "resetMsgTime"),conf->getProp(cnode,"resetMsgTime"),s_resetTime));
ptResetMsg.setTiming(resetMsgTime); ptResetMsg.setTiming(resetMsgTime);
smReadyTimeout = conf->getArgInt("--" + argprefix + "sm-ready-timeout", ""); smReadyTimeout = conf->getArgInt("--" + argprefix + "sm-ready-timeout","");
if( smReadyTimeout == 0 ) if( smReadyTimeout == 0 )
smReadyTimeout = 60000; smReadyTimeout = 60000;
else if( smReadyTimeout < 0 ) else if( smReadyTimeout < 0 )
smReadyTimeout = UniSetTimer::WaitUpTime; smReadyTimeout = UniSetTimer::WaitUpTime;
smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"), conf->getProp(cnode, "smTestID"), "")); smTestID = conf->getSensorID(init3_str(conf->getArgParam("--" + argprefix + "sm-test-id"),conf->getProp(cnode,"smTestID"),""));
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000); activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000);
...@@ -224,7 +218,7 @@ bool UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state ) ...@@ -224,7 +218,7 @@ bool UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state )
{ {
if( _code == UniSetTypes::DefaultObjectId ) if( _code == UniSetTypes::DefaultObjectId )
{ {
mycrit << myname << "(setMsg): попытка послать сообщение с DefaultObjectId" << endl; mylog8 << myname << "(setMsg): попытка послать сообщение с DefaultObjectId" << endl;
return false; return false;
} }
...@@ -232,7 +226,10 @@ bool UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state ) ...@@ -232,7 +226,10 @@ bool UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state )
// взводим автоматический сброс // взводим автоматический сброс
if( _state ) if( _state )
{
ptResetMsg.reset(); ptResetMsg.reset();
trResetMsg.hi(false);
}
...@@ -242,7 +239,8 @@ bool UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state ) ...@@ -242,7 +239,8 @@ bool UObject_SK::setMsg( UniSetTypes::ObjectId _code, bool _state )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::resetMsg() void UObject_SK::resetMsg()
{ {
// reset messages mylog8 << myname << "(resetMsg): reset messages.." << endl;
// reset messages
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -260,8 +258,33 @@ std::string UObject_SK::dumpIO() ...@@ -260,8 +258,33 @@ std::string UObject_SK::dumpIO()
ostringstream s; ostringstream s;
s << myname << ": " << endl; s << myname << ": " << endl;
std::list<std::string> v_in;
ostringstream s1;
return s.str(); std::list<std::string> v_out;
s << endl;
int n = 0;
for( const auto& e: v_in )
{
s << e;
if( (n++)%2 )
s << std::endl;
}
s << endl;
n = 0;
for( const auto& e: v_out )
{
s << e;
if( (n++)%2 )
s << std::endl;
}
return std::move(s.str());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string UObject_SK::str( UniSetTypes::ObjectId id, bool showLinkName ) std::string UObject_SK::str( UniSetTypes::ObjectId id, bool showLinkName )
...@@ -321,13 +344,11 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm ) ...@@ -321,13 +344,11 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm )
{ {
case SystemMessage::WatchDog: case SystemMessage::WatchDog:
uinfo << myname << "(preSysCommand): WatchDog" << endl; uinfo << myname << "(preSysCommand): WatchDog" << endl;
if( !active || !ptStartUpTimeout.checkTime() ) if( !active || !ptStartUpTimeout.checkTime() )
{ {
uwarn << myname << "(preSysCommand): игнорируем WatchDog, потому-что только-что стартанули" << endl; uwarn << myname << "(preSysCommand): игнорируем WatchDog, потому-что только-что стартанули" << endl;
break; break;
} }
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() ) if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() )
...@@ -359,10 +380,9 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm ) ...@@ -359,10 +380,9 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm )
// переоткрываем логи // переоткрываем логи
mylogany << myname << "(preSysCommand): logRotate" << endl; mylogany << myname << "(preSysCommand): logRotate" << endl;
string fname( log()->getLogFile() ); string fname( log()->getLogFile() );
if( !fname.empty() ) if( !fname.empty() )
{ {
mylog->logFile(fname.c_str(), true); mylog->logFile(fname.c_str(),true);
mylogany << myname << "(preSysCommand): ***************** mylog LOG ROTATE *****************" << endl; mylogany << myname << "(preSysCommand): ***************** mylog LOG ROTATE *****************" << endl;
} }
} }
...@@ -384,7 +404,9 @@ UniSetTypes::SimpleInfo* UObject_SK::getInfo() ...@@ -384,7 +404,9 @@ UniSetTypes::SimpleInfo* UObject_SK::getInfo()
inf << i->info << endl; inf << i->info << endl;
inf << "LogServer: " << logserv_host << ":" << logserv_port << endl; inf << "LogServer: " << logserv_host << ":" << logserv_port << endl;
inf << dumpIO() << endl; inf << dumpIO() << endl;
inf << endl;
inf << vmon.pretty_str() << endl; inf << vmon.pretty_str() << endl;
inf << endl;
inf << getMonitInfo() << endl; inf << getMonitInfo() << endl;
i->info = inf.str().c_str(); i->info = inf.str().c_str();
...@@ -432,7 +454,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID ) ...@@ -432,7 +454,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
<< wait_msec << " msec" << wait_msec << " msec"
<< " testID=" << _testID << endl; << " testID=" << _testID << endl;
if( !ui->waitReady(_testID, wait_msec) ) if( !ui->waitReady(_testID,wait_msec) )
{ {
ostringstream err; ostringstream err;
err << myname err << myname
...@@ -440,55 +462,61 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID ) ...@@ -440,55 +462,61 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
<< wait_msec << " мсек"; << wait_msec << " мсек";
ucrit << err.str() << endl; ucrit << err.str() << endl;
// terminate(); // terminate();
// abort(); // abort();
raise(SIGTERM); raise(SIGTERM);
terminate(); terminate();
// throw SystemError(err.str()); // throw SystemError(err.str());
} }
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
std::string UObject_SK::help()
{
ostringstream s;
return std::move(s.str());
}
// ----------------------------------------------------------------------------
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void UObject_SK::callback() void UObject_SK::callback()
{ {
if( !active ) if( !active )
return; return;
try try
{ {
// проверка таймеров // проверка таймеров
checkTimers(this); checkTimers(this);
if( resetMsgTime > 0 && trResetMsg.hi(ptResetMsg.checkTime()) ) if( resetMsgTime>0 && trResetMsg.hi(ptResetMsg.checkTime()) )
{ {
// cout << myname << ": ********* reset messages *********" << endl; // cout << myname << ": ********* reset messages *********" << endl;
resetMsg(); resetMsg();
} }
// обработка сообщений (таймеров и т.п.) // обработка сообщений (таймеров и т.п.)
for( unsigned int i = 0; i < 20; i++ ) for( unsigned int i=0; i<20; i++ )
{ {
if( !receiveMessage(msg) ) if( !receiveMessage(msg) )
break; break;
processingMessage(&msg); processingMessage(&msg);
updateOutputs(forceOut); updateOutputs(forceOut);
// updatePreviousValues(); // updatePreviousValues();
} }
// Выполнение шага программы // Выполнение шага программы
step(); step();
// "сердцебиение" // "сердцебиение"
if( idHeartBeat != DefaultObjectId && ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId && ptHeartBeat.checkTime() )
{ {
try try
{ {
ui->setValue(idHeartBeat, maxHeartBeat); ui->setValue(idHeartBeat,maxHeartBeat);
ptHeartBeat.reset(); ptHeartBeat.reset();
} }
catch( const Exception& ex ) catch( const Exception& ex )
...@@ -510,7 +538,7 @@ void UObject_SK::callback() ...@@ -510,7 +538,7 @@ void UObject_SK::callback()
ucrit << myname << "(execute): СORBA::SystemException: " ucrit << myname << "(execute): СORBA::SystemException: "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
catch( const std::exception& ex ) catch( const std::exception&ex )
{ {
ucrit << myname << "(execute): catch " << ex.what() << endl; ucrit << myname << "(execute): catch " << ex.what() << endl;
} }
...@@ -523,9 +551,12 @@ void UObject_SK::callback() ...@@ -523,9 +551,12 @@ void UObject_SK::callback()
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::setValue( UniSetTypes::ObjectId _sid, long _val ) void UObject_SK::setValue( UniSetTypes::ObjectId _sid, long _val )
{ {
if( _sid == UniSetTypes::DefaultObjectId )
return;
ui->setValue(_sid, _val); ui->setValue(_sid,_val);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::updateOutputs( bool _force ) void UObject_SK::updateOutputs( bool _force )
...@@ -542,7 +573,7 @@ void UObject_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm ) ...@@ -542,7 +573,7 @@ void UObject_SK::preSensorInfo( const UniSetTypes::SensorMessage* _sm )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::askSensor( UniSetTypes::ObjectId _sid, UniversalIO::UIOCommand _cmd, UniSetTypes::ObjectId _node ) void UObject_SK::askSensor( UniSetTypes::ObjectId _sid, UniversalIO::UIOCommand _cmd, UniSetTypes::ObjectId _node )
{ {
ui->askRemoteSensor(_sid, _cmd, _node, getId()); ui->askRemoteSensor(_sid,_cmd,_node,getId());
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
long UObject_SK::getValue( UniSetTypes::ObjectId _sid ) long UObject_SK::getValue( UniSetTypes::ObjectId _sid )
...@@ -564,12 +595,10 @@ long UObject_SK::getValue( UniSetTypes::ObjectId _sid ) ...@@ -564,12 +595,10 @@ long UObject_SK::getValue( UniSetTypes::ObjectId _sid )
void UObject_SK::preAskSensors( UniversalIO::UIOCommand _cmd ) void UObject_SK::preAskSensors( UniversalIO::UIOCommand _cmd )
{ {
PassiveTimer ptAct(activateTimeout); PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() ) while( !activated && !ptAct.checkTime() )
{ {
cout << myname << "(preAskSensors): wait activate..." << endl; cout << myname << "(preAskSensors): wait activate..." << endl;
msleep(300); msleep(300);
if( activated ) if( activated )
break; break;
} }
...@@ -589,7 +618,7 @@ void UObject_SK::preAskSensors( UniversalIO::UIOCommand _cmd ) ...@@ -589,7 +618,7 @@ void UObject_SK::preAskSensors( UniversalIO::UIOCommand _cmd )
{ {
ucrit << myname << "(preAskSensors): " << ex << endl; ucrit << myname << "(preAskSensors): " << ex << endl;
} }
catch( const std::exception& ex ) catch( const std::exception&ex )
{ {
ucrit << myname << "(execute): catch " << ex.what() << endl; ucrit << myname << "(execute): catch " << ex.what() << endl;
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#define VMonitor_H_ #define VMonitor_H_
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <string> #include <string>
#include <list>
#include <ostream> #include <ostream>
#include <unordered_map> #include <unordered_map>
#include "UniSetTypes.h" #include "UniSetTypes.h"
...@@ -120,8 +121,14 @@ class VMonitor ...@@ -120,8 +121,14 @@ class VMonitor
static const int NameWidth = { 30 }; static const int NameWidth = { 30 };
static const int ColCount = { 2 }; static const int ColCount = { 2 };
/*! вывести все элементы в "простом формате" (строки "varname = value") */
std::string str(); std::string str();
std::string pretty_str();
/*! вывести все элементы "с форматированием" (отсортированные по алфавиту)
* \param namewidth - ширина резервируемая под "имя"
* \param colnum - количество столбцов вывода
*/
std::string pretty_str( int namewidth=NameWidth, int colnum=ColCount );
// функции добавления.. // функции добавления..
VMON_DEF_FUNC2(int); VMON_DEF_FUNC2(int);
...@@ -138,6 +145,8 @@ class VMonitor ...@@ -138,6 +145,8 @@ class VMonitor
static const std::string pretty_str( const std::string& name, const std::string* v, int width = NameWidth ); static const std::string pretty_str( const std::string& name, const std::string* v, int width = NameWidth );
static const std::string pretty_str( const std::string& name, const std::string& v, int width = NameWidth ); static const std::string pretty_str( const std::string& name, const std::string& v, int width = NameWidth );
std::list<std::pair<std::string,std::string>> getList();
protected: protected:
private: private:
...@@ -149,7 +158,6 @@ class VMonitor ...@@ -149,7 +158,6 @@ class VMonitor
VMON_DEF_MAP(bool); VMON_DEF_MAP(bool);
VMON_DEF_MAP(float); VMON_DEF_MAP(float);
VMON_DEF_MAP(double); VMON_DEF_MAP(double);
// VMON_DEF_MAP3(UniSetTypes::ObjectId,ObjectId); // <-- long
VMON_DEF_MAP3(std::string, string); VMON_DEF_MAP3(std::string, string);
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <iomanip> #include <iomanip>
#include <algorithm>
#include "VMonitor.h" #include "VMonitor.h"
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#define VMON_IMPL_ADD(T) void VMonitor::add( const std::string& name, const T& v ) \ #define VMON_IMPL_ADD(T) void VMonitor::add( const std::string& name, const T& v ) \
...@@ -13,7 +14,7 @@ ...@@ -13,7 +14,7 @@
const std::string VMonitor::pretty_str( const std::string& name, const T* v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const T* v, int nwidth ) \
{ \ { \
std::ostringstream s; \ std::ostringstream s; \
s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(6) << *(v); \ s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(10) << *(v); \
return std::move(s.str()); \ return std::move(s.str()); \
} \ } \
const std::string VMonitor::pretty_str( const std::string& name, const T& v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const T& v, int nwidth ) \
...@@ -33,13 +34,13 @@ ...@@ -33,13 +34,13 @@
const std::string VMonitor::pretty_str( const std::string& name, const T* v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const T* v, int nwidth ) \
{ \ { \
std::ostringstream s; \ std::ostringstream s; \
s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(6) << *(v); \ s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(10) << *(v); \
return std::move(s.str()); \ return std::move(s.str()); \
} \ } \
const std::string VMonitor::pretty_str( const std::string& name, const unsigned T* v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const unsigned T* v, int nwidth ) \
{ \ { \
std::ostringstream s; \ std::ostringstream s; \
s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(6) << *(v); \ s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(10) << *(v); \
return std::move(s.str()); \ return std::move(s.str()); \
} \ } \
const std::string VMonitor::pretty_str( const std::string& name, const T& v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const T& v, int nwidth ) \
...@@ -58,7 +59,7 @@ ...@@ -58,7 +59,7 @@
const std::string VMonitor::pretty_str( const std::string& name, const T* v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const T* v, int nwidth ) \
{ \ { \
std::ostringstream s; \ std::ostringstream s; \
s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(6) << *(v); \ s << std::right << std::setw(nwidth) << name << std::left << " = " << std::right << std::setw(10) << *(v); \
return std::move(s.str()); \ return std::move(s.str()); \
} \ } \
const std::string VMonitor::pretty_str( const std::string& name, const T& v, int nwidth ) \ const std::string VMonitor::pretty_str( const std::string& name, const T& v, int nwidth ) \
...@@ -66,102 +67,36 @@ ...@@ -66,102 +67,36 @@
return pretty_str(name,&v,nwidth); \ return pretty_str(name,&v,nwidth); \
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#define VMON_IMPL_PRN(M,T) \ #define VMON_MAKE_PAIR(vlist, T) \
{\ {\
for( const auto& e: M.m_##T ) \ for( const auto& e: m_##T ) \
os << e.second << "=" << *(e.first) << std::endl;\ vlist.push_back( std::make_pair(e.second, std::to_string(*(e.first))) );\
}
// --------------------------------------------------------------------------
#define VMON_IMPL_PRN2(M,T) \
{\
for( const auto& e: M.m_##T ) \
os << e.second << "=" << *(e.first) << std::endl;\
\
for( const auto& e: M.m_unsigned_##T ) \
os << e.second << "=" << *(e.first) << std::endl;\
}
// --------------------------------------------------------------------------
#define VMON_IMPL_PRN_CHAR(M) \
{\
for( const auto& e: M.m_char ) \
os << e.second << "=" << (int)(*(e.first)) << std::endl;\
\
for( const auto& e: M.m_unsigned_char) \
os << e.second << "=" << (int)(*(e.first)) << std::endl;\
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#define VMON_IMPL_PRET(T) \ #define VMON_MAKE_PAIR_S(vlist, T) \
{\ {\
std::vector<std::string> v(m_char.size()+m_unsigned_char.size());\
std::ostringstream s;\
for( const auto& e: m_##T ) \ for( const auto& e: m_##T ) \
{\ vlist.push_back( std::make_pair(e.second,*e.first) );\
s.str("");\
s << pretty_str(e.second,e.first);\
v.push_back(s.str()); \
}\
\
int n = 0;\
for( const auto& e: v ) \
{\
os << e; \
if( (n++)%ColCount ) \
os << std::endl; \
} \
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#define VMON_IMPL_PRET2(T) \ #define VMON_MAKE_PAIR2(vlist, T) \
{\ {\
std::vector<std::string> v(m_char.size()+m_unsigned_char.size());\
std::ostringstream s;\ std::ostringstream s;\
for( const auto& e: m_##T ) \ for( const auto& e: m_##T ) \
{\ vlist.push_back( std::make_pair(e.second, std::to_string(*(e.first))) );\
s.str("");\
s << pretty_str(e.second,e.first);\
v.push_back(s.str());\
}\
\ \
for( const auto& e: m_unsigned_##T ) \ for( const auto& e: m_unsigned_##T ) \
{\ vlist.push_back( std::make_pair(e.second, std::to_string(*(e.first))) );\
s.str("");\
s << pretty_str(e.second,e.first);\
v.push_back(s.str());\
}\
\
int n = 0;\
for( const auto& e: v ) \
{\
os << e; \
if( (n++)%ColCount ) \
os << std::endl; \
} \
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#define VMON_IMPL_PRET_CHAR \ #define VMON_MAKE_PAIR_CHAR(vlist) \
{\ {\
std::vector<std::string> v(m_char.size()+m_unsigned_char.size());\
std::ostringstream s;\ std::ostringstream s;\
for( const auto& e: m_char ) \ for( const auto& e: m_char ) \
{\ vlist.push_back(std::make_pair(e.second,std::to_string((int)(*(e.first)))) );\
s.str("");\
s << std::right << std::setw(NameWidth) << e.second << std::left << " = " << std::right << std::setw(6) << (int)(*(e.first));\
v.push_back(s.str());\
}\
\ \
for( const auto& e: m_unsigned_char ) \ for( const auto& e: m_unsigned_char ) \
{\ vlist.push_back(std::make_pair(e.second,std::to_string((int)(*(e.first)))) );\
s.str("");\
s << std::right << std::setw(NameWidth) << e.second << std::left << " = " << std::right << std::setw(6) << (int)(*(e.first));\
v.push_back(s.str()); \
}\
\
int n = 0;\
for( const auto& e: v ) \
{\
os << e; \
if( (n++)%ColCount ) \
os << std::endl; \
} \
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
VMON_IMPL_ADD2(int) VMON_IMPL_ADD2(int)
...@@ -174,21 +109,17 @@ VMON_IMPL_ADD(double) ...@@ -174,21 +109,17 @@ VMON_IMPL_ADD(double)
VMON_IMPL_ADD3(std::string, string) VMON_IMPL_ADD3(std::string, string)
//VMON_IMPL_ADD3(UniSetTypes::ObjectId,ObjectId) //VMON_IMPL_ADD3(UniSetTypes::ObjectId,ObjectId)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
std::ostream& operator<<(std::ostream& os, VMonitor& m ) std::ostream& operator<<( std::ostream& os, VMonitor& m )
{ {
VMON_IMPL_PRN2(m, int); auto vlist = m.getList();
VMON_IMPL_PRN2(m, long); // сортируем по алфавиту
VMON_IMPL_PRN2(m, short); vlist.sort( []( const std::pair<std::string,std::string> &a, const std::pair<std::string,std::string> &b ) { return a.first < b.first; });
VMON_IMPL_PRN_CHAR(m);
VMON_IMPL_PRN(m, bool); for( const auto& e: vlist )
VMON_IMPL_PRN(m, float); os << e.first << " = " << e.second;
VMON_IMPL_PRN(m, double);
VMON_IMPL_PRN(m, string);
// VMON_IMPL_PRN(m,ObjectId);
return os; return os;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
std::string VMonitor::str() std::string VMonitor::str()
{ {
...@@ -197,18 +128,35 @@ std::string VMonitor::str() ...@@ -197,18 +128,35 @@ std::string VMonitor::str()
return std::move(s.str()); return std::move(s.str());
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
std::string VMonitor::pretty_str() std::list<std::pair<std::string, std::string> > VMonitor::getList()
{
std::list<std::pair<std::string,std::string>> vlist;
VMON_MAKE_PAIR2(vlist,int);
VMON_MAKE_PAIR2(vlist,long);
VMON_MAKE_PAIR2(vlist,short);
VMON_MAKE_PAIR_CHAR(vlist);
VMON_MAKE_PAIR(vlist,bool);
VMON_MAKE_PAIR(vlist,float);
VMON_MAKE_PAIR(vlist,double);
VMON_MAKE_PAIR_S(vlist,string);
return std::move(vlist);
}
// --------------------------------------------------------------------------
std::string VMonitor::pretty_str( int namewidth, int colnum )
{ {
auto vlist = getList();
std::ostringstream os; std::ostringstream os;
VMON_IMPL_PRET2(int);
VMON_IMPL_PRET2(long); // сортируем по алфавиту
VMON_IMPL_PRET2(short); vlist.sort( []( const std::pair<std::string,std::string> &a, const std::pair<std::string,std::string> &b ) { return a.first < b.first; });
VMON_IMPL_PRET_CHAR;
VMON_IMPL_PRET(bool); int n = 0;
VMON_IMPL_PRET(float); for( const auto& e: vlist )
VMON_IMPL_PRET(double); {
VMON_IMPL_PRET(string); os << std::right << std::setw(namewidth) << e.first << std::left << " = " << std::right << std::setw(10) << e.second;
// VMON_IMPL_PRET(ObjectId); if( (n++)%colnum )
os << std::endl;
}
return std::move(os.str()); return std::move(os.str());
} }
......
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