Commit 604c1732 authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): добавил вывод статистики о количестве сообщений

parent 0d477ea3
...@@ -274,6 +274,7 @@ ...@@ -274,6 +274,7 @@
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */ virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */
virtual std::string getTypeOfMessage( int t ){ return uniset::strTypeOfMessage(t); } /*!< получение названия типа сообщения. Используется в getInfo() */
<xsl:if test="normalize-space($DISABLE_REST_API)!='1'"> <xsl:if test="normalize-space($DISABLE_REST_API)!='1'">
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
virtual void httpGetUserData( Poco::JSON::Object::Ptr&amp; jdata ){} /*!&lt; для пользовательских данных в httpGet() */ virtual void httpGetUserData( Poco::JSON::Object::Ptr&amp; jdata ){} /*!&lt; для пользовательских данных в httpGet() */
...@@ -416,7 +417,9 @@ ...@@ -416,7 +417,9 @@
std::unordered_map&lt;const uniset::ObjectId,size_t, StatHashFn&gt; smStat; /*!&lt; количество сообщений по датчикам */ std::unordered_map&lt;const uniset::ObjectId,size_t, StatHashFn&gt; smStat; /*!&lt; количество сообщений по датчикам */
size_t processingMessageCatchCount = { 0 }; /*!&lt; количество исключений пойманных в processingMessage */ size_t processingMessageCatchCount = { 0 }; /*!&lt; количество исключений пойманных в processingMessage */
std::unordered_map&lt;long,size_t&gt; msgTypeStat; /*!&lt; количество сообщений по типам */
std::string ostate = { "" }; /*!&lt; состояние процесса (выводится в getInfo()) */ std::string ostate = { "" }; /*!&lt; состояние процесса (выводится в getInfo()) */
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
...@@ -432,6 +435,9 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::processingMessage( const uniset::Vo ...@@ -432,6 +435,9 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::processingMessage( const uniset::Vo
{ {
try try
{ {
<xsl:if test="normalize-space($STAT)='1'">
msgTypeStat[_msg->type] += 1;
</xsl:if>
switch( _msg->type ) switch( _msg->type )
{ {
case Message::SensorInfo: case Message::SensorInfo:
...@@ -581,6 +587,16 @@ uniset::SimpleInfo* <xsl:value-of select="$CLASSNAME"/>_SK::getInfo( const char* ...@@ -581,6 +587,16 @@ uniset::SimpleInfo* <xsl:value-of select="$CLASSNAME"/>_SK::getInfo( const char*
else else
inf &lt;&lt; "LogServer: NONE" &lt;&lt; endl; inf &lt;&lt; "LogServer: NONE" &lt;&lt; endl;
<xsl:if test="normalize-space($STAT)='1'">
inf &lt;&lt; "statistics: " &lt;&lt; endl
&lt;&lt; " processingMessageCatchCount: " &lt;&lt; processingMessageCatchCount &lt;&lt; endl;
inf &lt;&lt; " Type of messages: " &lt;&lt; endl;
for( const auto&amp; s: msgTypeStat )
inf &lt;&lt; " (" &lt;&lt; s.first &lt;&lt; ")" &lt;&lt; setw(10) &lt;&lt; getTypeOfMessage(s.first) &lt;&lt; ": " &lt;&lt; setw(5) &lt;&lt; s.second &lt;&lt; endl;
inf &lt;&lt; endl;
</xsl:if>
inf &lt;&lt; dumpIO() &lt;&lt; endl; inf &lt;&lt; dumpIO() &lt;&lt; endl;
inf &lt;&lt; endl; inf &lt;&lt; endl;
auto timers = getTimersList(); auto timers = getTimersList();
...@@ -1491,9 +1507,12 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1491,9 +1507,12 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
<xsl:sort select="@name" order="ascending" data-type="text"/> <xsl:sort select="@name" order="ascending" data-type="text"/>
<xsl:if test="normalize-space(@vartype)='in'"> <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(24) &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"/>;
<xsl:if test="normalize-space($STAT)='1'">
s1 &lt;&lt; " [" &lt;&lt; setw(5) &lt;&lt; smStat[<xsl:value-of select="@name"/>] &lt;&lt; "]";
</xsl:if>
v_in.emplace_back(s1.str()); v_in.emplace_back(s1.str());
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
...@@ -1503,7 +1522,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO() ...@@ -1503,7 +1522,7 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::dumpIO()
<xsl:sort select="@name" order="ascending" data-type="text"/> <xsl:sort select="@name" order="ascending" data-type="text"/>
<xsl:if test="normalize-space(@vartype)='out'"> <xsl:if test="normalize-space(@vartype)='out'">
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(24) &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_out.emplace_back(s1.str()); v_out.emplace_back(s1.str());
......
...@@ -125,7 +125,7 @@ while :; do ...@@ -125,7 +125,7 @@ while :; do
;; ;;
--no-gen-statistics) --no-gen-statistics)
genstat=1 genstat=0
;; ;;
-l|--local) -l|--local)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2017-01-06+03:00 // generate timestamp: 2017-04-29+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
...@@ -159,6 +159,7 @@ class UObject_SK: ...@@ -159,6 +159,7 @@ class UObject_SK:
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */ virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */
virtual std::string getTypeOfMessage( int t ){ return uniset::strTypeOfMessage(t); } /*!< получение названия типа сообщения. Используется в getInfo() */
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
virtual void httpGetUserData( Poco::JSON::Object::Ptr& jdata ){} /*!< для пользовательских данных в httpGet() */ virtual void httpGetUserData( Poco::JSON::Object::Ptr& jdata ){} /*!< для пользовательских данных в httpGet() */
...@@ -251,7 +252,9 @@ class UObject_SK: ...@@ -251,7 +252,9 @@ class UObject_SK:
std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */ std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */
size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */ size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */
std::unordered_map<long,size_t> msgTypeStat; /*!< количество сообщений по типам */
std::string ostate = { "" }; /*!< состояние процесса (выводится в getInfo()) */ std::string ostate = { "" }; /*!< состояние процесса (выводится в getInfo()) */
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2017-01-06+03:00 // generate timestamp: 2017-04-29+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <memory> #include <memory>
#include <iomanip> #include <iomanip>
...@@ -373,6 +373,9 @@ void UObject_SK::processingMessage( const uniset::VoidMessage* _msg ) ...@@ -373,6 +373,9 @@ void UObject_SK::processingMessage( const uniset::VoidMessage* _msg )
{ {
try try
{ {
msgTypeStat[_msg->type] += 1;
switch( _msg->type ) switch( _msg->type )
{ {
case Message::SensorInfo: case Message::SensorInfo:
...@@ -521,6 +524,16 @@ uniset::SimpleInfo* UObject_SK::getInfo( const char* userparam ) ...@@ -521,6 +524,16 @@ uniset::SimpleInfo* UObject_SK::getInfo( const char* userparam )
else else
inf << "LogServer: NONE" << endl; inf << "LogServer: NONE" << endl;
inf << "statistics: " << endl
<< " processingMessageCatchCount: " << processingMessageCatchCount << endl;
inf << " Type of messages: " << endl;
for( const auto& s: msgTypeStat )
inf << " (" << s.first << ")" << setw(10) << getTypeOfMessage(s.first) << ": " << setw(5) << s.second << endl;
inf << endl;
inf << dumpIO() << endl; inf << dumpIO() << endl;
inf << endl; inf << endl;
auto timers = getTimersList(); auto timers = getTimersList();
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <time.h> // for timespec #include <time.h> // for timespec
#include <cstring> #include <cstring>
#include <string>
#include <ostream> #include <ostream>
#include "UniSetTypes.h" #include "UniSetTypes.h"
#include "IOController_i.hh" #include "IOController_i.hh"
...@@ -80,6 +81,7 @@ namespace uniset ...@@ -80,6 +81,7 @@ namespace uniset
} }
}; };
std::string strTypeOfMessage( int type );
std::ostream& operator<<( std::ostream& os, const Message::TypeOfMessage& t ); std::ostream& operator<<( std::ostream& os, const Message::TypeOfMessage& t );
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
......
...@@ -25,7 +25,7 @@ namespace uniset ...@@ -25,7 +25,7 @@ namespace uniset
{ {
/*! Вспомогательный класс для проверки связи, реализованный через создание потока, /*! Вспомогательный класс для проверки связи, реализованный через создание потока,
чтобы при проверке не было "зависания" при недоступности адреса. чтобы при проверке не было "зависания" при недоступности адреса.
Смысл: создаётся поток, в нём происходит проверка, а в вызвавший поток приостанавливается Смысл: создаётся поток, в нём происходит проверка, а вызвавший поток приостанавливается
на время timeout, по истечении которого созданный поток "принудительно"(в любом случае!) уничтожается.. на время timeout, по истечении которого созданный поток "принудительно"(в любом случае!) уничтожается..
*/ */
class TCPCheck class TCPCheck
......
...@@ -31,24 +31,29 @@ ...@@ -31,24 +31,29 @@
namespace uniset namespace uniset
{ {
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
std::ostream& operator<<( std::ostream& os, const Message::TypeOfMessage& t ) std::string strTypeOfMessage( int type )
{ {
if( t == Message::Unused ) if( type == Message::SensorInfo )
return os << "Unused"; return "SensorInfo";
if( type == Message::SysCommand )
return "SysCommand";
if( t == Message::SensorInfo ) if( type == Message::Confirm )
return os << "SensorInfo"; return "Confirm";
if( t == Message::SysCommand ) if( type == Message::Timer )
return os << "SysCommand"; return "Timer";
if( t == Message::Confirm ) if( type == Message::Unused )
return os << "Confirm"; return "Unused";
if( t == Message::Timer ) return "Unkown";
return os << "Timer"; }
return os << "Unkown"; std::ostream& operator<<( std::ostream& os, const Message::TypeOfMessage& t )
{
return os << strTypeOfMessage(t);
} }
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
Message::Message() noexcept: Message::Message() noexcept:
......
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