X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fcore%2Foam%2FModule.cpp;h=8f8af4774c29cb854a40d57171f5bb3cab7b2755;hb=5a6cba5fde2b2f538a7515f8293cc0a8d9589dfa;hp=742b7e0e9eacd7fa0111b90a0dc51e12a2b904f9;hpb=39033fd99e58e994a5e98c1060dcc79e0d81f9c9;p=anna.git diff --git a/source/core/oam/Module.cpp b/source/core/oam/Module.cpp index 742b7e0..8f8af47 100644 --- a/source/core/oam/Module.cpp +++ b/source/core/oam/Module.cpp @@ -1,37 +1,9 @@ -// ANNA - Anna is Not Nothingness Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// http://redmine.teslayout.com/projects/anna-suite -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of the copyright holder nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: eduardo.ramos.testillano@gmail.com -// cisco.tierra@gmail.com +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // // Local @@ -70,7 +42,7 @@ anna::oam::Module::~Module() { //------------------------------------------------------------------------------ //----------------------------------------------------------- Module::getScope() //------------------------------------------------------------------------------ -anna::oam::CounterScope *anna::oam::Module::getScope(const int &id) throw() { +anna::oam::CounterScope *anna::oam::Module::getScope(const int &id) { scope_iterator it = scope_find(id); return ((it != scope_end()) ? scope(it) : NULL); } @@ -78,7 +50,7 @@ anna::oam::CounterScope *anna::oam::Module::getScope(const int &id) throw() { ////------------------------------------------------------------------------------ ////------------------------------------------------------- Module::alarm_remove() ////------------------------------------------------------------------------------ -//bool anna::oam::Module::alarm_remove(const int &key) throw() { +//bool anna::oam::Module::alarm_remove(const int &key) { // alarm_iterator it = alarm_find(key); // if (it != alarm_end()) { // a_alarms.erase(key); @@ -91,7 +63,7 @@ anna::oam::CounterScope *anna::oam::Module::getScope(const int &id) throw() { ////------------------------------------------------------------------------------ ////----------------------------------------------------- Module::counter_remove() ////------------------------------------------------------------------------------ -//bool anna::oam::Module::counter_remove(const int &key) throw() { +//bool anna::oam::Module::counter_remove(const int &key) { // counter_iterator it = counter_find(key); // if (it != counter_end()) { // a_counters.erase(key); @@ -108,7 +80,7 @@ anna::oam::CounterScope *anna::oam::Module::getScope(const int &id) throw() { //------------------------------------------------------------------------------ //----------------------------------------------------- Module::enableCounters() //------------------------------------------------------------------------------ -void anna::oam::Module::enableCounters(void) throw() { +void anna::oam::Module::enableCounters(void) { a_counters_enabled = true; LOGDEBUG(anna::Logger::debug("Scoped counters ENABLED", ANNA_FILE_LOCATION)); } @@ -117,7 +89,7 @@ void anna::oam::Module::enableCounters(void) throw() { //------------------------------------------------------------------------------ //---------------------------------------------------- Module::disableCounters() //------------------------------------------------------------------------------ -void anna::oam::Module::disableCounters(void) throw() { +void anna::oam::Module::disableCounters(void) { a_counters_enabled = false; LOGDEBUG(anna::Logger::debug("Scoped counters DISABLED", ANNA_FILE_LOCATION)); } @@ -126,7 +98,7 @@ void anna::oam::Module::disableCounters(void) throw() { //------------------------------------------------------------------------------ //------------------------------------------------------- Module::enableAlarms() //------------------------------------------------------------------------------ -void anna::oam::Module::enableAlarms(void) throw() { +void anna::oam::Module::enableAlarms(void) { a_alarms_enabled = true; LOGDEBUG(anna::Logger::debug("Scoped alarms ENABLED", ANNA_FILE_LOCATION)); } @@ -135,7 +107,7 @@ void anna::oam::Module::enableAlarms(void) throw() { //------------------------------------------------------------------------------ //------------------------------------------------------ Module::disableAlarms() //------------------------------------------------------------------------------ -void anna::oam::Module::disableAlarms(void) throw() { +void anna::oam::Module::disableAlarms(void) { a_alarms_enabled = false; LOGDEBUG(anna::Logger::debug("Scoped alarms DISABLED", ANNA_FILE_LOCATION)); } @@ -144,7 +116,7 @@ void anna::oam::Module::disableAlarms(void) throw() { //------------------------------------------------------------------------------ //------------------------------------------------ Module::enableAlarmsPreffix() //------------------------------------------------------------------------------ -void anna::oam::Module::enableAlarmsPreffix(void) throw() { +void anna::oam::Module::enableAlarmsPreffix(void) { a_alarms_preffix_enabled = true; LOGDEBUG(anna::Logger::debug("Alarm preffix module components SHOWN", ANNA_FILE_LOCATION)); } @@ -153,7 +125,7 @@ void anna::oam::Module::enableAlarmsPreffix(void) throw() { //------------------------------------------------------------------------------ //------------------------------------------------- Module::enableAlarmsSuffix() //------------------------------------------------------------------------------ -void anna::oam::Module::enableAlarmsSuffix(void) throw() { +void anna::oam::Module::enableAlarmsSuffix(void) { a_alarms_suffix_enabled = true; LOGDEBUG(anna::Logger::debug("Alarm suffix module components SHOWN", ANNA_FILE_LOCATION)); } @@ -162,7 +134,7 @@ void anna::oam::Module::enableAlarmsSuffix(void) throw() { //------------------------------------------------------------------------------ //----------------------------------------------- Module::disableAlarmsPreffix() //------------------------------------------------------------------------------ -void anna::oam::Module::disableAlarmsPreffix(void) throw() { +void anna::oam::Module::disableAlarmsPreffix(void) { a_alarms_preffix_enabled = false; LOGDEBUG(anna::Logger::debug("Alarm preffix module components HIDDEN", ANNA_FILE_LOCATION)); } @@ -171,7 +143,7 @@ void anna::oam::Module::disableAlarmsPreffix(void) throw() { //------------------------------------------------------------------------------ //------------------------------------------------ Module::disableAlarmsSuffix() //------------------------------------------------------------------------------ -void anna::oam::Module::disableAlarmsSuffix(void) throw() { +void anna::oam::Module::disableAlarmsSuffix(void) { a_alarms_suffix_enabled = false; LOGDEBUG(anna::Logger::debug("Alarm suffix module components HIDDEN", ANNA_FILE_LOCATION)); } @@ -180,7 +152,7 @@ void anna::oam::Module::disableAlarmsSuffix(void) throw() { //------------------------------------------------------------------------------ //--------------------------------- Module::getDefaultInternalAlarmDescription() //------------------------------------------------------------------------------ -std::string anna::oam::Module::getDefaultInternalAlarmDescription(const int & type) const throw() { +std::string anna::oam::Module::getDefaultInternalAlarmDescription(const int & type) const { return UNDEFINED_EVENT_DESCRIPTION; } @@ -188,7 +160,7 @@ std::string anna::oam::Module::getDefaultInternalAlarmDescription(const int & ty //------------------------------------------------------------------------------ //------------------------------- Module::getDefaultInternalCounterDescription() //------------------------------------------------------------------------------ -std::string anna::oam::Module::getDefaultInternalCounterDescription(const int & type) const throw() { +std::string anna::oam::Module::getDefaultInternalCounterDescription(const int & type) const { return UNDEFINED_EVENT_DESCRIPTION; } @@ -196,7 +168,7 @@ std::string anna::oam::Module::getDefaultInternalCounterDescription(const int & //------------------------------------------------------------------------------ //---------------------------------------------- Module::alarmComponentsToText() //------------------------------------------------------------------------------ -std::string anna::oam::Module::alarmComponentsToText(const std::vector & components, const std::string & psL, const std::string & psS, const std::string & psR) const throw() { +std::string anna::oam::Module::alarmComponentsToText(const std::vector & components, const std::string & psL, const std::string & psS, const std::string & psR) const { if(components.size() == 0) return (""); std::vector::const_iterator it_min(components.begin()); @@ -215,7 +187,7 @@ std::string anna::oam::Module::alarmComponentsToText(const std::vector * globalPreffixComponents = conf.getAlarmPreffixComponents(); const std::vector * globalSuffixComponents = conf.getAlarmSuffixComponents(); @@ -253,12 +225,13 @@ void anna::oam::Module::getAlarmPreffixSuffixAndZoneSeparator(std::string & pref //------------------------------------------------------------------------------ //--------------------------------------------- Module::initializeCounterScope() //------------------------------------------------------------------------------ -void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::string & description) throw(anna::RuntimeException) { +void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::string & description) noexcept(false) { 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) { @@ -284,7 +257,7 @@ void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::s anna::Logger::warning("This is not the first initialized scope. Perhaps you should provide specific description better than general module name ...", ANNA_FILE_LOCATION); } ); - const char * c_description = (missingScopeDescription ? getClassName() : description.c_str()); + const char * c_description = (missingScopeDescription ? getName() : description.c_str()); a_active_counter_scope = new CounterScope(scopeId, c_description); a_scopes[scopeId] = a_active_counter_scope; } @@ -293,7 +266,7 @@ void anna::oam::Module::initializeCounterScope(const int & scopeId, const std::s //------------------------------------------------------------------------------ //---------------------------------------------- Module::setActiveCounterScope() //------------------------------------------------------------------------------ -void anna::oam::Module::setActiveCounterScope(const int & scopeId) throw() { +void anna::oam::Module::setActiveCounterScope(const int & scopeId) { anna::oam::CounterScope *scope = getScope(scopeId); if(!scope) { @@ -308,7 +281,7 @@ void anna::oam::Module::setActiveCounterScope(const int & scopeId) throw() { //------------------------------------------------------------------------------ //---------------------------------------------------- Module::registerCounter() //------------------------------------------------------------------------------ -void anna::oam::Module::registerCounter(const int & type, const std::string & description, const int & offset) throw(anna::RuntimeException) { +void anna::oam::Module::registerCounter(const int & type, const std::string & description, const int & offset) noexcept(false) { // Handler-specific a_handler->registerCounter(this, type, description, offset); @@ -358,7 +331,7 @@ void anna::oam::Module::registerCounter(const int & type, const std::string & de //------------------------------------------------------------------------------ //------------------------------------------------------ Module::registerAlarm() //------------------------------------------------------------------------------ -void anna::oam::Module::registerAlarm(const int & type, const std::string &description, const int & externalId, const std::string & dynamicVariablesCSL, const int & activationId, const int & cancellationId) throw(anna::RuntimeException) { +void anna::oam::Module::registerAlarm(const int & type, const std::string &description, const int & externalId, const std::string & dynamicVariablesCSL, const int & activationId, const int & cancellationId) noexcept(false) { // Handler-specific a_handler->registerAlarm(this, type, description, externalId, dynamicVariablesCSL, activationId, cancellationId); // Check type existence: @@ -402,7 +375,7 @@ void anna::oam::Module::registerAlarm(const int & type, const std::string &descr //------------------------------------------------------------------------------ //------------------------------------------------------ Module::activateAlarm() //------------------------------------------------------------------------------ -void anna::oam::Module::alarmEvent(bool activation, const int & type, va_list argList) const throw() { +void anna::oam::Module::alarmEvent(bool activation, const int & type, va_list argList) const { // Preffix/Suffix and separator: std::string userPreffix, userSuffix; char separator; getAlarmPreffixSuffixAndZoneSeparator(userPreffix, userSuffix, separator); @@ -418,7 +391,7 @@ void anna::oam::Module::alarmEvent(bool activation, const int & type, va_list ar //------------------------------------------------------------------------------ //------------------------------------------------------ Module::activateAlarm() //------------------------------------------------------------------------------ -void anna::oam::Module::activateAlarm(const int & type, ...) const throw(anna::RuntimeException) { +void anna::oam::Module::activateAlarm(int type, ...) const noexcept(false) { // LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "activateAlarm", ANNA_FILE_LOCATION)); // Checkings @@ -426,7 +399,7 @@ void anna::oam::Module::activateAlarm(const int & type, ...) const throw(anna::R LOGDEBUG ( std::string msg = "Alarm activation ignored over module '"; - msg += getClassName(); + msg += getName(); msg += "': alarms are disabled"; anna::Logger::debug(msg, ANNA_FILE_LOCATION); ); @@ -444,7 +417,7 @@ void anna::oam::Module::activateAlarm(const int & type, ...) const throw(anna::R //------------------------------------------------------------------------------ //-------------------------------------------------------- Module::cancelAlarm() //------------------------------------------------------------------------------ -void anna::oam::Module::cancelAlarm(const int & type, ...) const throw(anna::RuntimeException) { +void anna::oam::Module::cancelAlarm(int type, ...) const noexcept(false) { // LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "cancelAlarm", ANNA_FILE_LOCATION)); // Checkings @@ -452,7 +425,7 @@ void anna::oam::Module::cancelAlarm(const int & type, ...) const throw(anna::Run LOGDEBUG ( std::string msg = "Alarm cancellation ignored over module '"; - msg += getClassName(); + msg += getName(); msg += "': alarms are disabled"; anna::Logger::debug(msg, ANNA_FILE_LOCATION); ); @@ -470,7 +443,7 @@ void anna::oam::Module::cancelAlarm(const int & type, ...) const throw(anna::Run //------------------------------------------------------------------------------ //-------------------------------------------------------------- Module::count() //------------------------------------------------------------------------------ -void anna::oam::Module::count(const int & type, const int & amount) throw(anna::RuntimeException) { +void anna::oam::Module::count(const int & type, const int & amount) noexcept(false) { // LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "count", ANNA_FILE_LOCATION)); // Checkings @@ -478,7 +451,7 @@ void anna::oam::Module::count(const int & type, const int & amount) throw(anna:: LOGDEBUG ( std::string msg = "Count operation ignored over module '"; - msg += getClassName(); + msg += getName(); msg += "': counters are disabled"; anna::Logger::debug(msg, ANNA_FILE_LOCATION); ); @@ -492,7 +465,7 @@ void anna::oam::Module::count(const int & type, const int & amount) throw(anna:: //------------------------------------------------------------------------------ //------------------------------------------------------ Module::resetCounters() //------------------------------------------------------------------------------ -int anna::oam::Module::resetCounters(const int & scopeId) throw() { +int anna::oam::Module::resetCounters(const int & scopeId) { LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "resetCounters", ANNA_FILE_LOCATION)); int result = 0; // affected number @@ -507,23 +480,23 @@ 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; +} //------------------------------------------------------------------------------ //----------------------------------------------------- Module::recordCounters() //------------------------------------------------------------------------------ -void anna::oam::Module::recordCounters() throw(anna::RuntimeException) { +void anna::oam::Module::recordCounters() noexcept(false) { LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "recordCounters", ANNA_FILE_LOCATION)); if(a_counterRecorder == NULL) @@ -537,7 +510,6 @@ void anna::oam::Module::recordCounters() throw(anna::RuntimeException) { RecordingGuard guard(this); a_counterRecorder->open(); - Counter* counter = NULL; CounterScope* cscope = NULL; try { @@ -547,7 +519,7 @@ void anna::oam::Module::recordCounters() throw(anna::RuntimeException) { Guard csGuard(cscope, "oam::CounterScope from oam::Module::record"); - for(register int icounter = 0; icounter < CounterScope::MaxCounter; icounter ++) { + for(int icounter = 0; icounter < CounterScope::MaxCounter; icounter ++) { Counter* counter = cscope->a_counters [icounter]; if(counter == NULL) @@ -571,10 +543,10 @@ void anna::oam::Module::recordCounters() throw(anna::RuntimeException) { //------------------------------------------------------------------------------ //----------------------------------------------------------- Module::asString() //------------------------------------------------------------------------------ -std::string anna::oam::Module::asString(void) const throw() { +std::string anna::oam::Module::asString(void) const { std::string trace; trace = "Module name: '"; - trace += getClassName(); + trace += getName(); trace += "'"; trace += "\n\nCOUNTERS"; trace += "\n--------"; trace += "\nScoped counters "; trace += a_counters_enabled ? "Enabled" : "Disabled"; @@ -590,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: "; @@ -633,9 +616,9 @@ std::string anna::oam::Module::asString(void) const throw() { //------------------------------------------------------------------------------ //-------------------------------------------------------------- Module::asXML() //------------------------------------------------------------------------------ -anna::xml::Node* anna::oam::Module::asXML(anna::xml::Node* parent) const throw() { +anna::xml::Node* anna::oam::Module::asXML(anna::xml::Node* parent) const { anna::xml::Node* result = parent->createChild("oam.Module"); - result->createAttribute("Name", getClassName()); + result->createAttribute("Name", getName()); result->createAttribute("Counters", a_counters_enabled ? "Enabled" : "Disabled"); anna::xml::Node* registeredCounterScopes = result->createChild("RegisteredCounterScopes"); @@ -651,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));