Commit 06a812cf authored by Pavel Vainerman's avatar Pavel Vainerman

(RRDServer): добавил проверку на максимальную разрешённоую длину имени

для dsname.
parent 3d51f988
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.2 Version: 2.2
Release: alt10 Release: alt11
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -452,6 +452,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -452,6 +452,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Tue Nov 03 2015 Pavel Vainerman <pv@altlinux.ru> 2.2-alt11
- RRDServer: add support 'dsname', check RRD_MAX_DSNAME_LEN
* Fri Oct 30 2015 Pavel Vainerman <pv@altlinux.ru> 2.2-alt10 * Fri Oct 30 2015 Pavel Vainerman <pv@altlinux.ru> 2.2-alt10
- fixes after coverity scan.. - fixes after coverity scan..
- minor fixes - minor fixes
......
...@@ -58,8 +58,13 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -58,8 +58,13 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
string fv( it.getProp("filter_value") ); string fv( it.getProp("filter_value") );
string cf( it.getProp("ds_field") ); string cf( it.getProp("ds_field") );
string ds(cf + "_dsname");
if( cf.empty() ) if( cf.empty() )
{
cf = ff + fv + "_ds"; cf = ff + fv + "_ds";
ds = ff + fv + "_dsname";
}
int rrdstep = it.getPIntProp("step", 5); int rrdstep = it.getPIntProp("step", 5);
int lastup = it.getPIntProp("lastup", 0); int lastup = it.getPIntProp("lastup", 0);
...@@ -79,7 +84,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -79,7 +84,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): rrd='" << fname << "' Unknown RRA list"; err << myname << "(init): rrd='" << fname << "' Unknown RRA list";
mycrit << err.str(); mycrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -91,7 +96,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -91,7 +96,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): rrd='" << fname << "' Unkown RRA item.. <item rra='...'"; err << myname << "(init): rrd='" << fname << "' Unkown RRA item.. <item rra='...'";
mycrit << err.str(); mycrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -116,7 +121,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -116,7 +121,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): Not found section <sensors>"; err << myname << "(init): Not found section <sensors>";
mycrit << err.str(); mycrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -126,7 +131,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -126,7 +131,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): section <sensors> empty?!"; err << myname << "(init): section <sensors> empty?!";
mycrit << err.str(); mycrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
...@@ -146,11 +151,23 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -146,11 +151,23 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{ {
ostringstream err; ostringstream err;
err << myname << "(init): Unknown create parameters ('" << cf << "')"; err << myname << "(init): Unknown create parameters ('" << cf << "')";
mycrit << err.str(); mycrit << err.str() << endl;
throw SystemError(err.str());
}
std::string dsname(it1.getProp(ds));
if( dsname.empty() )
dsname = it1.getProp("name");
if( dsname.size() > RRD_MAX_DSNAME_LEN )
{
ostringstream err;
err << myname << "(init): DSNAME=" << dsname << "(" << dsname.size()
<< ") > RRD_MAX_NAME_SIZE(" << RRD_MAX_DSNAME_LEN << ")";
mycrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
std::string dsname(it1.getProp("name"));
ostringstream nm; ostringstream nm;
nm << "DS:" << dsname << ":" << a; nm << "DS:" << dsname << ":" << a;
dslist.push_back(nm.str()); dslist.push_back(nm.str());
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
- \ref sec_RRD_Comm - \ref sec_RRD_Comm
- \ref sec_RRD_Conf - \ref sec_RRD_Conf
- \ref sec_RRD_DSName
\section sec_RRD_Comm Общее описание RRDServer \section sec_RRD_Comm Общее описание RRDServer
...@@ -51,10 +52,14 @@ ...@@ -51,10 +52,14 @@
<item id="54" iotype="AI" name="AI54_S" textname="AI sensor 54" rrd="1" rrd1_ds="GAUGE:20:U:U"/> <item id="54" iotype="AI" name="AI54_S" textname="AI sensor 54" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="55" iotype="AI" name="AI55_S" textname="AI sensor 55" rrd="1" rrd1_ds="GAUGE:20:U:U"/> <item id="55" iotype="AI" name="AI55_S" textname="AI sensor 55" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="56" iotype="AI" name="AI56_S" textname="AI sensor 56" rrd="2" rrd2_ds="COUNTER:20:U:U"/> <item id="56" iotype="AI" name="AI56_S" textname="AI sensor 56" rrd="2" rrd2_ds="COUNTER:20:U:U"/>
<item id="57" iotype="AI" name="AI57_S" textname="AI sensor 57" rrd="2" rrd2_ds="DERIVE:20:U:U"/> <item id="57" iotype="AI" name="AI57_S" rrd2_dsname='A57MyRRDName' textname="AI sensor 57" rrd="2" rrd2_ds="DERIVE:20:U:U"/>
... ...
</sensors> </sensors>
\endcode \endcode
\section sec_RRD_DSName Именование параметров
По умолчанию в качестве имени параметра берётся поле \b 'ds_field'_dsname='', если это поле не указано, то берётся \b name датчика.
\warning Имя не может превышать RRDServer::RRD_MAX_DSNAME_LEN.
*/ */
class RRDServer: class RRDServer:
public UObject_SK public UObject_SK
...@@ -81,6 +86,8 @@ class RRDServer: ...@@ -81,6 +86,8 @@ class RRDServer:
return mylog; return mylog;
} }
const size_t RRD_MAX_DSNAME_LEN = 19; /*!< максимальная длинна имени в RRD */
protected: protected:
RRDServer(); RRDServer();
......
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