X-Git-Url: https://git.teslayout.com/public/public/public/?p=anna.git;a=blobdiff_plain;f=source%2Fcore%2Foam%2FModule.cpp;h=2fa403eb6154aad31ff931f997b188fbeb0fa454;hp=b7baf2854c960d0d3ce18553d0b00ba717a56ab9;hb=3753f8bd8025131cc0b62da8942daefc376c1c46;hpb=ceba287089c374f877a3045aece2f0d0bf653d84 diff --git a/source/core/oam/Module.cpp b/source/core/oam/Module.cpp index b7baf28..2fa403e 100644 --- a/source/core/oam/Module.cpp +++ b/source/core/oam/Module.cpp @@ -229,8 +229,9 @@ void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::s LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "initializeCounterScope", ANNA_FILE_LOCATION)); // Order of use: - if(a_counters.size() != 0) // any counter have been registered - throw anna::RuntimeException("After use of counter registration can't initialize more scope ids!. Do initializations firstly", ANNA_FILE_LOCATION); + // https://redmine.teslayout.com/issues/48 + //if(a_counters.size() != 0) // any counter have been registered + // throw anna::RuntimeException("After use of counter registration can't initialize more scope ids!. Do initializations firstly", ANNA_FILE_LOCATION); // Scope range: 0 - 99 if(scopeId < 0 || scopeId >= MaxScope) { @@ -479,17 +480,17 @@ int anna::oam::Module::resetCounters(const int & scopeId) throw() { //------------------------------------- Module::RecordingGuard::RecordingGuard() //------------------------------------------------------------------------------ anna::oam::Module::RecordingGuard::RecordingGuard(anna::oam::Module* module) : - a_module(module) { - module->a_counterRecording = true; -} - + a_module(module) { + module->a_counterRecording = true; +} + //------------------------------------------------------------------------------ //------------------------------------ Module::RecordingGuard::~RecordingGuard() //------------------------------------------------------------------------------ -anna::oam::Module::RecordingGuard::~RecordingGuard() { - a_module->a_counterRecording = false; -} +anna::oam::Module::RecordingGuard::~RecordingGuard() { + a_module->a_counterRecording = false; +} //------------------------------------------------------------------------------ @@ -561,14 +562,25 @@ std::string anna::oam::Module::asString(void) const throw() { for(const_counter_iterator cnt_it = counter_begin(); cnt_it != counter_end(); cnt_it++) { ptrCounterData = (counter_data_t *) & ((*cnt_it).second); + + // Counter registered ? + int offset = ptrCounterData->Offset; + unsigned long long int accValue = 0ULL; + try { + const anna::oam::CounterScope *csAux = scope(scope_it); + accValue = csAux->getAccValue(offset); + } catch(anna::RuntimeException &ex) { + ex.trace(); + continue; + } + // Counter: trace += "\n\tType: "; trace += anna::functions::asString((*cnt_it).first); trace += " | Description: '"; trace += ptrCounterData->Description; trace += "'"; - int offset = ptrCounterData->Offset; int realId = (1000 * scopeId) + offset; trace += " | ScopeId/Offset: "; trace += anna::functions::asString(scopeId); trace += "/"; trace += anna::functions::asString(offset); trace += " | RealId: "; trace += anna::functions::asString(realId); - unsigned long long int accValue = scope(scope_it)->getAccValue(offset); + accValue = scope(scope_it)->getAccValue(offset); if(accValue != 0ULL) { trace += " | AccumulatedAmount: "; @@ -622,16 +634,26 @@ anna::xml::Node* anna::oam::Module::asXML(anna::xml::Node* parent) const throw() for(const_counter_iterator cnt_it = counter_begin(); cnt_it != counter_end(); cnt_it++) { ptrCounterData = (counter_data_t *) & ((*cnt_it).second); + + // Counter registered ? + int offset = ptrCounterData->Offset; + unsigned long long int accValue = 0ULL; + try { + const anna::oam::CounterScope *csAux = scope(scope_it); + accValue = csAux->getAccValue(offset); + } catch(anna::RuntimeException &ex) { + ex.trace(); + continue; + } + // Counter: anna::xml::Node* counter = registeredCounters->createChild("Counter"); counter->createAttribute("Type", anna::functions::asString((*cnt_it).first)); counter->createAttribute("Description", ptrCounterData->Description); - int offset = ptrCounterData->Offset; int realId = (1000 * scopeId) + offset; counter->createAttribute("ScopeId", anna::functions::asString(scopeId)); counter->createAttribute("Offset", anna::functions::asString(offset)); counter->createAttribute("RealId", anna::functions::asString(realId)); - unsigned long long int accValue = scope(scope_it)->getAccValue(offset); if(accValue != 0ULL) counter->createAttribute("AccumulatedAmount", anna::functions::asString("%llu", accValue));