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

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

для dsname.
parent 3d51f988
......@@ -13,7 +13,7 @@
Name: libuniset2
Version: 2.2
Release: alt10
Release: alt11
Summary: UniSet - library for building distributed industrial control systems
......@@ -452,6 +452,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%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
- fixes after coverity scan..
- minor fixes
......
......@@ -58,8 +58,13 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
string fv( it.getProp("filter_value") );
string cf( it.getProp("ds_field") );
string ds(cf + "_dsname");
if( cf.empty() )
{
cf = ff + fv + "_ds";
ds = ff + fv + "_dsname";
}
int rrdstep = it.getPIntProp("step", 5);
int lastup = it.getPIntProp("lastup", 0);
......@@ -79,7 +84,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{
ostringstream err;
err << myname << "(init): rrd='" << fname << "' Unknown RRA list";
mycrit << err.str();
mycrit << err.str() << endl;
throw SystemError(err.str());
}
......@@ -91,7 +96,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{
ostringstream err;
err << myname << "(init): rrd='" << fname << "' Unkown RRA item.. <item rra='...'";
mycrit << err.str();
mycrit << err.str() << endl;
throw SystemError(err.str());
}
......@@ -116,7 +121,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{
ostringstream err;
err << myname << "(init): Not found section <sensors>";
mycrit << err.str();
mycrit << err.str() << endl;
throw SystemError(err.str());
}
......@@ -126,7 +131,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{
ostringstream err;
err << myname << "(init): section <sensors> empty?!";
mycrit << err.str();
mycrit << err.str() << endl;
throw SystemError(err.str());
}
......@@ -146,11 +151,23 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
{
ostringstream err;
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());
}
std::string dsname(it1.getProp("name"));
ostringstream nm;
nm << "DS:" << dsname << ":" << a;
dslist.push_back(nm.str());
......
......@@ -13,6 +13,7 @@
- \ref sec_RRD_Comm
- \ref sec_RRD_Conf
- \ref sec_RRD_DSName
\section sec_RRD_Comm Общее описание RRDServer
......@@ -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="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="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>
\endcode
\section sec_RRD_DSName Именование параметров
По умолчанию в качестве имени параметра берётся поле \b 'ds_field'_dsname='', если это поле не указано, то берётся \b name датчика.
\warning Имя не может превышать RRDServer::RRD_MAX_DSNAME_LEN.
*/
class RRDServer:
public UObject_SK
......@@ -81,6 +86,8 @@ class RRDServer:
return mylog;
}
const size_t RRD_MAX_DSNAME_LEN = 19; /*!< максимальная длинна имени в RRD */
protected:
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