diff --git a/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc b/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc index d38a624585ee9bd50f4ac5c12489e03982d1409a..ce8a6996560281576105f0ccaef4012f36e6d4aa 100644 --- a/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc +++ b/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc @@ -207,8 +207,22 @@ GCFEvent::TResult KeyValueLogger::operational(GCFEvent& event, answer.result = PVSS::SA_NO_ERROR; int32 timeStamp = ACC::APS::indexValue(logEvent.key, "{}"); - rtrim (logEvent.key, "{}01234565789"); // cut off timestamp - replace(logEvent.key.begin(), logEvent.key.end(), '.', '_'); + rtrim (logEvent.key, "{}01234565789"); // cut off timestamp + // replace all but last . with underscore. + string::reverse_iterator riter = logEvent.key.rbegin(); + string::reverse_iterator rend = logEvent.key.rend(); + bool lastDot(true); + while (riter != rend) { + if (*riter == '.') { + if (lastDot) { + lastDot = false; + } + else { + *riter = '_'; + } + } + riter++; + } PVSSresult result = itsDPservice->setValue(logEvent.key, GCFPVString(logEvent.value), 1.0 * timeStamp); @@ -234,9 +248,28 @@ GCFEvent::TResult KeyValueLogger::operational(GCFEvent& event, answer.seqnr = logEvent.seqnr; answer.result = PVSS::SA_NO_ERROR; for (uint32 i = 0; i < logEvent.msgCount; i++) { - PVSSresult result; -// = itsDPservice->setValue(logEvent.keys.theVector[i], -// GCFPVString(logEvent.values.theVector[i])); + int32 timeStamp = ACC::APS::indexValue(logEvent.keys.theVector[i], "{}"); + rtrim (logEvent.keys.theVector[i], "{}01234565789"); // cut off timestamp + // replace all but last . with underscore. + string::reverse_iterator riter = logEvent.keys.theVector[i].rbegin(); + string::reverse_iterator rend = logEvent.keys.theVector[i].rend(); + bool lastDot(true); + while (riter != rend) { + if (*riter == '.') { + if (lastDot) { + lastDot = false; + } + else { + *riter = '_'; + } + } + riter++; + } + PVSSresult result = itsDPservice->setValue(logEvent.keys.theVector[i], + GCFPVString(logEvent.values.theVector[i]), + 1.0 * timeStamp); + itsClients[&port].msgCnt++; + switch (result) { case PVSS::SA_NO_ERROR: break; @@ -248,7 +281,7 @@ GCFEvent::TResult KeyValueLogger::operational(GCFEvent& event, // _registerFailure(port); answer.result |= result; } // switch - } // for + } // for all msgs in the pool port.send(answer); } break; diff --git a/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc b/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc index 6ba74327879423710335bcc1cc6b59382c8c89c9..3683998329f6052a87df3cbbe0e71d8cf79d5b3e 100644 --- a/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc +++ b/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc @@ -56,6 +56,29 @@ int main (int argc, char* argv[]) sleep(2); + // send a bunch of messages + for (int i = 0; i < 20; i++) { + msgEvent.seqnr = i; + msgEvent.value = toString(25+i); + thePort.send(&msgEvent); + KVTSendMsgAckEvent msgAck(thePort.receive()); + } + + sleep(2); + + // now send the same bunch as to pools + KVTSendMsgPoolEvent poolEvent; + poolEvent.seqnr = 1; + poolEvent.msgCount = 20; + for (int i = 0; i < 20; i++) { + poolEvent.keys.theVector.push_back("LOFAR.ObsSW.ObsCtrl.OnlineCtrl.OLAP.InputAppl.packageLoss{1198368555}"); + poolEvent.values.theVector.push_back(toString(50+i)); + } + thePort.send(&poolEvent); + KVTSendMsgPoolAckEvent poolAck(thePort.receive()); + + sleep (2); + return (0); }