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

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

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