X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdiameter.comm%2FApplicationMessageOamModule.cpp;h=91fff6c7431fd521efe0cdb2ba33a2267d444cd5;hb=5406b19bdbfe101b264f8c4d878392e2916b8f9d;hp=bba049c497686140327797e59aaa7baf5d8950ce;hpb=3d71e5185fa9c93bde7363a668aecf96240ae2e9;p=anna.git diff --git a/source/diameter.comm/ApplicationMessageOamModule.cpp b/source/diameter.comm/ApplicationMessageOamModule.cpp index bba049c..91fff6c 100644 --- a/source/diameter.comm/ApplicationMessageOamModule.cpp +++ b/source/diameter.comm/ApplicationMessageOamModule.cpp @@ -47,7 +47,7 @@ void anna::diameter::comm::ApplicationMessageOamModule::createStackCounterScope( a_stackMap[stackId] = scopeId; } -void anna::diameter::comm::ApplicationMessageOamModule::count (int messageCode, unsigned int stackId, const int & type, const int & amount) throw(anna::RuntimeException) { +void anna::diameter::comm::ApplicationMessageOamModule::count (int messageCode, int resultCode, unsigned int stackId, const int & type, const int & amount) throw(anna::RuntimeException) { // Optimization: // Checkings @@ -55,7 +55,7 @@ void anna::diameter::comm::ApplicationMessageOamModule::count (int messageCode, LOGDEBUG ( std::string msg = "Count operation ignored over module '"; - msg += getClassName(); + msg += getName(); msg += "': counters are disabled"; anna::Logger::debug(msg, ANNA_FILE_LOCATION); ); @@ -64,27 +64,35 @@ void anna::diameter::comm::ApplicationMessageOamModule::count (int messageCode, anna::Guard guard(a_mutex, "ApplicationMessageOamModule::count"); // counter scope switch - std::map::const_iterator stackMap_it = a_stackMap.find(stackId); + int scopeId = monoStackScopeId(); + if (scopeId == -1) { + std::map::const_iterator stackMap_it = a_stackMap.find(stackId); - if (stackMap_it == a_stackMap.end()) { - LOGDEBUG(anna::Logger::debug(anna::functions::asString("Unregistered stack id %lu", stackId), ANNA_FILE_LOCATION)); - return; + if (stackMap_it == a_stackMap.end()) { + LOGDEBUG(anna::Logger::debug(anna::functions::asString("Unregistered stack id %lu", stackId), ANNA_FILE_LOCATION)); + return; + } + + scopeId = stackMap_it->second; } // Select counter scope - setActiveCounterScope(stackMap_it->second); - - std::map::const_iterator messageMap_it = a_messageMap.find(messageCode); - int baseOffset = messageMap_it->second; + setActiveCounterScope(scopeId); + + // Build event id: _ + std::string eventId = anna::functions::asString("%d_%d", messageCode, resultCode); + + std::map::const_iterator eventMap_it = a_eventMap.find(eventId); + int baseOffset; - if (messageMap_it == a_messageMap.end()) { + if (eventMap_it == a_eventMap.end()) { int capacity = anna::oam::CounterScope::MaxCounter / getCounterTypes(); - if (a_messageMap.size() > capacity) { + if (a_eventMap.size() > capacity) { LOGDEBUG(anna::Logger::debug(anna::functions::asString("No more holes to register new application message counters in the scope (up to %d message codes)", capacity), ANNA_FILE_LOCATION)); return; } - baseOffset = getCounterTypes() * a_messageMap.size(); // N counter types for each message code - a_messageMap[messageCode] = baseOffset; + baseOffset = getCounterTypes() * a_eventMap.size(); // N counter types for each message code + a_eventMap[eventId] = baseOffset; // Counter name: std::string counterNamePrefix = anna::functions::asString("ApplicationMessageCode_%d", messageCode); // default @@ -107,8 +115,17 @@ void anna::diameter::comm::ApplicationMessageOamModule::count (int messageCode, } if (counterNamePrefix[counterNamePrefix.size() - 1] != '-') counterNamePrefix += "-"; - for (int offset = 0; offset < getCounterTypes(); offset++) - registerCounter(baseOffset + offset, counterNamePrefix + getDefaultInternalCounterDescription(offset), baseOffset + offset); + std::string counterName; + // register only count event: + //for (int offset = 0; offset < getCounterTypes(); offset++) { + int offset = baseOffset + type; + counterName = counterNamePrefix + getDefaultInternalCounterDescription(offset); + if (resultCode != -1) counterName += anna::functions::asString("-ResultCode_%d", resultCode); + registerCounter(baseOffset + offset, counterName, baseOffset + offset); + //} + } + else { + baseOffset = eventMap_it->second; } // Count