X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fcore%2Foam%2FModule.hpp;h=533eaad700882e393097dbba017ab7fd3fff288d;hb=64d7c531cdf5f4bca4fa2d8c9736de98247dfe13;hp=2f0bbe60ffc89b1cd7c6b04ce3aeabfa022a5722;hpb=a97d4f54eb576a7c72e933fb3af992e9de8e5473;p=anna.git diff --git a/include/anna/core/oam/Module.hpp b/include/anna/core/oam/Module.hpp index 2f0bbe6..533eaad 100644 --- a/include/anna/core/oam/Module.hpp +++ b/include/anna/core/oam/Module.hpp @@ -1,37 +1,9 @@ -// ANNA - Anna is Not 'N' Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// https://bitbucket.org/testillano/anna -// -// 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 Google Inc. 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 // #ifndef anna_core_oam_Module_hpp @@ -57,6 +29,7 @@ class Node; } namespace oam { class CounterScope; +class CounterRecorder; } } @@ -163,15 +136,10 @@ class Module { Handler a_defaultHandler; // default OAM handler Handler *a_handler; // Handler reference + std::string a_name; // module description - std::string a_className; // module description - bool a_counters_enabled; // Enable/Disable registered counters over this module (default is 'true') - bool a_alarms_enabled; // Enable/Disable registered alarms over this module (default is 'true') - - // dynamic modifications over alarm text - bool a_alarms_preffix_enabled; // Show own module alarm preffix - bool a_alarms_suffix_enabled; // Show own module alarm suffix - std::string alarmComponentsToText(const std::vector & components, const std::string & psL, const std::string & psS, const std::string & psR) const throw(); + bool a_counters_enabled; // Enable/Disable registered counters over this module (default is 'false') + bool a_alarms_enabled; // Enable/Disable registered alarms over this module (default is 'false') // GENERIC COUNTERS anna::oam::CounterScope* a_active_counter_scope; // Current scope for counters generation @@ -183,9 +151,13 @@ class Module { // GENERIC ALARMS typedef std::map < int /*type*/, alarm_data_t > alarm_container; alarm_container a_alarms; - void alarmEvent(bool activation, const int & type, va_list argList) const throw(); + // dynamic modifications over alarm text + bool a_alarms_preffix_enabled; // Show own module alarm preffix + bool a_alarms_suffix_enabled; // Show own module alarm suffix + std::string alarmComponentsToText(const std::vector & components, const std::string & psL, const std::string & psS, const std::string & psR) const throw(); + // Counters typedef scope_container::iterator scope_iterator; typedef scope_container::const_iterator const_scope_iterator; @@ -206,7 +178,16 @@ class Module { counter_iterator counter_find(const int &key) throw() { return a_counters.find(key); } counter_iterator counter_begin() throw() { return a_counters.begin(); } counter_iterator counter_end() throw() { return a_counters.end(); } + CounterRecorder* a_counterRecorder; + bool a_counterRecording; + class RecordingGuard { + public: + RecordingGuard(Module*); + ~RecordingGuard(); + private: + Module *a_module; + }; // Alarms typedef alarm_container::iterator alarm_iterator; @@ -220,24 +201,28 @@ class Module { alarm_iterator alarm_end() throw() { return a_alarms.end(); } void getAlarmPreffixSuffixAndZoneSeparator(std::string & preffix, std::string & suffix, char & zS) const throw(); - public: + static const int MaxScope = 1000; /**< Numero maximo de ambitos */ + + /** Constructor - @param className Logical name for the class (better use fullNaming format including namespace resolution) + @param name Logical name for the class (better use fullNaming format including namespace resolution) */ - Module(const std::string &className) : a_className(className), + Module(const std::string &name) : a_handler(&a_defaultHandler), - a_counters_enabled(true), - a_alarms_enabled(true), + a_name(name), + a_counters_enabled(false), + a_alarms_enabled(false), a_alarms_preffix_enabled(true), - a_alarms_suffix_enabled(true) {;} - + a_alarms_suffix_enabled(true), + a_counterRecorder(NULL), + a_counterRecording(false) {;} /** * Destructor */ - virtual ~Module() {;} + virtual ~Module(); /** @@ -264,6 +249,16 @@ public: */ void disableAlarms(void) throw(); + /** + Getter for counters enabled + */ + bool countersEnabled() const throw() { return a_counters_enabled; } + + /** + Getter for alarms enabled + */ + bool alarmsEnabled() const throw() { return a_alarms_enabled; } + /** * Show own module alarm preffix (enabled by default at constructor). * Usually managed at PROCCESS implementation @@ -390,7 +385,7 @@ public: @param OAM module name */ - const char *getClassName() const throw() { return a_className.c_str(); } + const char *getName() const throw() { return a_name.c_str(); } /** @@ -435,6 +430,22 @@ public: int resetCounters(const int & scopeId = -1) throw(); + /** + * Sets the instance for the class which will save the counters information. + * @counterRecorder Provided instance + * @warning It should be invoked periodically as a common solution + */ + void setCounterRecorder(CounterRecorder* counterRecorder) throw() { a_counterRecorder = counterRecorder; } + + /** + * Dumps the modified counters from last invocation to this method. + * A counter recorder should have been assigned by mean setCounterRecorder(), which + * will have the specific behaviour. This procedure is oriented to have physical storage + * for counters information. + */ + void recordCounters() throw(anna::RuntimeException); + + /** * Activates alarm with dynamic-composed text parsed with provided data (...). * Used at MODULE implementation (library or proccess itself) @@ -442,7 +453,7 @@ public: * @param alarmType Alarm enum-identification within the own context/module * @param ... Optional parsing data for dynamic-composed text. */ - void activateAlarm(const int & type, ...) const throw(anna::RuntimeException); + void activateAlarm(int type, ...) const throw(anna::RuntimeException); /** @@ -452,7 +463,7 @@ public: * @param alarmType Alarm enum-identification within the own context/module * @param ... Optional parsing data for dynamic-composed text. */ - void cancelAlarm(const int & type, ...) const throw(anna::RuntimeException); + void cancelAlarm(int type, ...) const throw(anna::RuntimeException); /** @@ -499,6 +510,9 @@ protected: * @param components Alarm suffix components defined by oam module. Empty on default implementation. */ virtual void readAlarmSuffixComponents(std::vector & components) const throw() {;} + + + friend class RecordingGuard; }; }