X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fcore%2Foam%2FModule.hpp;h=10e051fb5aaf4f4d56256b8130f4e2b1dc32e485;hb=706c5ba5c35199816446453e6e144200cf79265b;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..10e051f 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; } } @@ -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; @@ -223,21 +205,25 @@ class Module { public: + static const int MaxScope = 100; /**< Numero maximo de ambitos */ + + /** Constructor @param className Logical name for the class (better use fullNaming format including namespace resolution) */ Module(const std::string &className) : a_className(className), a_handler(&a_defaultHandler), a_counters_enabled(true), + a_counterRecorder(NULL), + a_counterRecording(false), a_alarms_enabled(true), a_alarms_preffix_enabled(true), a_alarms_suffix_enabled(true) {;} - /** * Destructor */ - virtual ~Module() {;} + virtual ~Module(); /** @@ -435,6 +421,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 +444,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 +454,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 +501,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; }; }