The idea is to pull Rmon utility network stats from shared memory by our C++ app and create a suitable JSON output for elasticsearch.
The shared memory data looks something like this:
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.rrmp6.rssl_update/averageRate = value: 17233
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.rrmp6.rssl_update/total = value: 7429584452
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.network/%total = value: 100
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.network/currentLoad = value: 15846500
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.network/currentRate = value: 4263
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.network/averageRate = value: 5561
- <sync> 2023/03/22 06:49:46 <host>.1.RmonPub.network/total = value: 2397677452
However, in our C++ application the RTRProxyManagedVariable object type instantiated for above highlighted (in bold) are considered as String. Here is the snippet of code we are using for variable type recognition.
void Node::addVariable(RTRProxyManagedVariablePtr obj)
{
std::string varName;
if (mPub.mapVariable(obj->name(), obj->context().instanceId(), varName))
{
VarPtr var;
switch (obj->type())
{
case RTRProxyManagedVariableHandle::Numeric:
var = NumericVarPtr(new NumericVar(varName, obj, *this));
break;
case RTRProxyManagedVariableHandle::Counter:
var = CounterVarPtr(new CounterVar(varName, obj, *this));
break;
case RTRProxyManagedVariableHandle::String:
var = StringVarPtr(new StringVar(varName, obj, *this));
break;
default:
Log::warn("%s type not supported [%s]\n", obj->typeString().to_c(), obj->name().to_c());
break;
}
if (var)
{
Log::trace(Log::L1, " Var: ADD: RMC=\"%s\" \tout=\"%s\" \ttype=%s\n",
obj->name().to_c(), varName.c_str(),
asCStr(var->type()));
mVars.add(var);
}
}
how can I get the correct variable type as NUMERIC for the above managed variables? Please suggest.
Thanks.