X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fcore%2Foam%2FModule.cpp;fp=source%2Fcore%2Foam%2FModule.cpp;h=99b47c9ee97dba963c6b8530c03d4531fbad6ad0;hb=884501d2411bc4fdfafae65948262c959e068d7d;hp=341ed8c1926d1364062646b141d8eb43e8e188f1;hpb=6dbe157ab584ccb81e9d3edc88fabc38c93c7f3e;p=anna.git diff --git a/source/core/oam/Module.cpp b/source/core/oam/Module.cpp index 341ed8c..99b47c9 100644 --- a/source/core/oam/Module.cpp +++ b/source/core/oam/Module.cpp @@ -38,13 +38,14 @@ #include #include #include +#include +#include #include #include #include #include #include -#include // Standard #include @@ -57,6 +58,15 @@ //----------------------------------------------------------------------- Module //****************************************************************************** +//------------------------------------------------------------------------------ +//-------------------------------------------------------------- Module::~Module +//------------------------------------------------------------------------------ +anna::oam::Module::~Module() { + for(scope_iterator scope_it = scope_begin(); scope_it != scope_end(); scope_it++) + delete (scope(scope_it)); +} + + //------------------------------------------------------------------------------ //----------------------------------------------------------- Module::getScope() //------------------------------------------------------------------------------ @@ -251,9 +261,9 @@ void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::s 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 >= anna::oam::CounterManager::MaxScope) { + if(scopeId < 0 || scopeId >= MaxScope) { std::string msg = "Scope Id must be in range [0 - "; - msg += anna::functions::asString(anna::oam::CounterManager::MaxScope - 1); // 99 + msg += anna::functions::asString(MaxScope - 1); // 99 msg += "]"; throw anna::RuntimeException(msg, ANNA_FILE_LOCATION); } @@ -275,7 +285,7 @@ void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::s } ); const char * c_description = (missingScopeDescription ? getClassName() : description.c_str()); - a_active_counter_scope = &(anna::oam::CounterManager::instantiate().create(scopeId, c_description, true /* reuses */)); + a_active_counter_scope = new CounterScope(scopeId, c_description); a_scopes[scopeId] = a_active_counter_scope; } @@ -493,6 +503,73 @@ 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; +} + + +//------------------------------------------------------------------------------ +//------------------------------------ Module::RecordingGuard::~RecordingGuard() +//------------------------------------------------------------------------------ +anna::oam::Module::RecordingGuard::~RecordingGuard() { + a_module->a_counterRecording = false; +} + + +//------------------------------------------------------------------------------ +//----------------------------------------------------- Module::recordCounters() +//------------------------------------------------------------------------------ +void anna::oam::Module::recordCounters() throw(anna::RuntimeException) { + LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "recordCounters", ANNA_FILE_LOCATION)); + + if(a_counterRecorder == NULL) + throw RuntimeException("anna::oam::CounterManager has no counter recorder associated", ANNA_FILE_LOCATION); + + LOGDEBUG( + std::string msg("Recording counters | "); + msg += a_counterRecorder->asString(); + anna::Logger::write(Logger::Debug, msg, ANNA_FILE_LOCATION) + ); + RecordingGuard guard(this); + + a_counterRecorder->open(); + Counter* counter = NULL; + CounterScope* cscope = NULL; + + try { + for(scope_iterator scope_it = scope_begin(); scope_it != scope_end(); scope_it++) { + cscope = scope(scope_it); + if(cscope == NULL) continue; + + //CounterScope& counterScope(*scope); + //Guard csGuard(counterScope, "oam::CounterScope from oam::CounterManager::record"); + Guard csGuard(cscope, "oam::CounterScope from oam::CounterManager::record"); + + for(register int icounter = 0; icounter < CounterScope::MaxCounter; icounter ++) { + Counter* counter = cscope->a_counters [icounter]; + + if(counter == NULL) + continue; + + if(counter->getValue() == 0) + continue; + + a_counterRecorder->apply(*counter); + counter->reset(); + } + } + + a_counterRecorder->close(); + } catch(anna::RuntimeException&) { + a_counterRecorder->close(); + throw; + } +} + //------------------------------------------------------------------------------ //----------------------------------------------------------- Module::asString() //------------------------------------------------------------------------------