X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fcore%2Foam%2FModule.hpp;h=d3c35420b8d9ad5062e2e9f03329cbc80875a684;hb=refs%2Fheads%2Fdynamic_procedure_library;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..d3c3542 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; } } @@ -164,9 +137,9 @@ class Module { Handler a_defaultHandler; // default OAM handler Handler *a_handler; // Handler reference - 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') + std::string a_name; // module description + 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') // dynamic modifications over alarm text bool a_alarms_preffix_enabled; // Show own module alarm preffix @@ -206,7 +179,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 +202,27 @@ 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_name(name), a_handler(&a_defaultHandler), - a_counters_enabled(true), - a_alarms_enabled(true), + a_counters_enabled(false), + a_counterRecorder(NULL), + a_counterRecording(false), + a_alarms_enabled(false), a_alarms_preffix_enabled(true), a_alarms_suffix_enabled(true) {;} - /** * 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; }; }