Updated license
[anna.git] / include / anna / core / oam / Module.hpp
index ccc5ab9..2208e48 100644 (file)
@@ -1,4 +1,4 @@
-// ANNA - Anna is Not 'N' Anymore
+// ANNA - Anna is Not Nothingness Anymore
 //
 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
 //
@@ -48,6 +48,8 @@
 #include <anna/core/oam/defines.hpp>
 #include <anna/core/oam/Handler.hpp>
 
+#include <cstdarg>
+
 
 namespace anna {
 namespace xml {
@@ -55,6 +57,7 @@ class Node;
 }
 namespace oam {
 class CounterScope;
+class CounterRecorder;
 }
 }
 
@@ -204,7 +207,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;
@@ -221,21 +233,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();
 
 
   /**
@@ -433,6 +449,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)
@@ -497,6 +529,9 @@ protected:
   * @param components Alarm suffix components defined by oam module. Empty on default implementation.
   */
   virtual void readAlarmSuffixComponents(std::vector<std::string> & components) const throw() {;}
+
+
+  friend class RecordingGuard;
 };
 
 }