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.