Remove core-comm dependency through CounterManager/timex in core/oam subsystem. Basic...
[anna.git] / include / anna / core / oam / Module.hpp
index 2f0bbe6..4999d1e 100644 (file)
@@ -57,6 +57,7 @@ class Node;
 }
 namespace oam {
 class CounterScope;
+class CounterRecorder;
 }
 }
 
@@ -206,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;
@@ -223,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();
 
 
   /**
@@ -435,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)
@@ -499,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;
 };
 
 }