Remove core-comm dependency through CounterManager/timex in core/oam subsystem. Basic...
[anna.git] / include / anna / core / oam / CounterManager.hpp
diff --git a/include/anna/core/oam/CounterManager.hpp b/include/anna/core/oam/CounterManager.hpp
deleted file mode 100644 (file)
index e98b253..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-// 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
-
-
-#ifndef anna_core_oam_CounterManager_hpp
-#define anna_core_oam_CounterManager_hpp
-
-#include <anna/core/functions.hpp>
-#include <anna/core/Singleton.hpp>
-
-#include <anna/timex/Timer.hpp>
-
-#include <anna/core/oam/Counter.hpp>
-#include <anna/core/oam/CounterScope.hpp>
-
-namespace anna {
-
-namespace xml {
-class Node;
-}
-
-namespace timex {
-class Engine;
-}
-
-namespace oam {
-
-class CounterScope;
-class CounterRecorder;
-class CounterSummarizer;
-class Counter;
-
-/**
-   Gestor de contadores.
-
-   Mantiene la lista de ambitos y contadores definidas en nuestra aplicacion. Ademas establece
-   el periodo de grabacion de los contadores modificados.
-
-   El periodo de grabacion se iniciara cada vez que se incremente un contador.
-*/
-class CounterManager : public Singleton <CounterManager> {
-public:
-  static const int MaxScope = 100; /**< Numero maximo de ambitos */
-
-  /**
-     Destructor.
-  */
-  virtual ~CounterManager();
-
-  /**
-   * Devuelve el gestor de tiempos asociado al gestor de contadores.
-   * \return   el gestor de tiempos asociado al gestor de contadores.
-   */
-  timex::Engine* getEngine() throw() { return a_timeController; }
-
-  /**
-     Establece el gestor de tiempos usado para establecer el periodo de grabacion
-     de contadores.
-     \param timeController Gestor de tiempos usado para establecer el periodo de
-     grabacion de contadores.
-  */
-  void setEngine(timex::Engine* timeController) throw() { a_timeController = timeController; }
-
-  /**
-     Establece la instancia de la clase encargada de grabar el fichero con la informacion
-     de los contadores.
-     \param  counterRecorder Instancia encargada de grabar los contadores.
-     \warning Sera invocado automaticamente cuando se cumpla el periodo de grabacion indicado en
-     la configuracion de esta clase.
-
-  */
-  void setCounterRecorder(CounterRecorder* counterRecorder) throw() { a_counterRecorder = counterRecorder; }
-
-  /**
-     Establece la instancia de la clase encargada de calcular los contadores acumulados o
-     expresados en funcion de algunos otros.
-     \param  counterSummarizer Instancia encargada de calcular los contadores acumulados o
-     expresados en funcion de algunos otros.
-     \warning Sera invocado automaticamente cuando se cumpla el periodo de grabacion indicado en
-     la configuracion de esta clase.
-
-  */
-  void setCounterSummarizer(CounterSummarizer* counterSummarizer) throw() { a_counterSummarizer = counterSummarizer; }
-
-  /**
-     Establece el periodo de grabacion de los contadores. Por defecto sera 600000 (10 minutos).
-     \param millisecond Periodo de grabacion de contadores expresado en milisegundos.
-  */
-  void setRecordPeriod(const anna::Millisecond & millisecond) throw() { a_timer.setTimeout(millisecond); }
-
-  /**
-     Operador de acceso. El ambito solicitado deberia estar creado mediate #create.
-     \param scope Indica el numero de ambito al que deseamos acceder.
-     \return El ambito de contadores.
-  */
-  CounterScope& operator [](const int scope) throw(RuntimeException) { return find(scope); }
-
-  /**
-     Operador de acceso. El ambito solicitado deberia estar creado mediate #create.
-     \param scope Indica el numero de ambito al que deseamos acceder.
-     \return El ambito de contadores.
-  */
-  const CounterScope& operator [](const int scope) const throw(RuntimeException) { return find(scope); }
-
-  /**
-     Crea un nuevo ambito de contadores.
-     \param scope Índice del ambito. Debera ser menor de MaxScope.
-     \param name Nombre logico del ambito.
-     \param reuse Reusa el ambito si ya fue creado o da excepcion (por defecto).
-  */
-  CounterScope& create(const int scope, const char* name, bool reuse = false) throw(RuntimeException);
-
-  /**
-     Crea un nuevo ambito de contadores. Creara el ambito 0.
-     \param name Nombre logico del ambito.
-  */
-  CounterScope& create(const char* name) throw(RuntimeException) { return create(0, name); }
-
-  /**
-     Devuelve el ambito de contadores asociado al numero recibido como parametro.
-     El ambito solicitado deberia estar creado mediate #create.
-     \param scope Indica el numero de ambito al que deseamos acceder.
-     \return El ambito de contadores.
-  */
-  CounterScope& find(const int scope) throw(RuntimeException);
-
-  /**
-     Devuelve el ambito de contadores asociado al numero recibido como parametro.
-     El ambito solicitado deberia estar creado mediate #create.
-     \param scope Indica el numero de ambito al que deseamos acceder.
-     \return El ambito de contadores.
-  */
-  const CounterScope& find(const int scope) const throw(RuntimeException);
-
-  /**
-    Vuelca los contadores modificados desde la ultima llamada a este metodo.
-
-    \warning Si se ha establecido un anna::timex::Engine valido mediante la invocacion al
-    metodo #setEngine no seria necesario invocar a este metodo, ya que se invocara automaticamente
-    cuando se cumpla el periodo de grabacion establecido por la configuracion.
-  */
-  void record() throw(RuntimeException);
-
-  /**
-   * Devuelve la información relevante de esta instancia en un documento XML.
-   * \return la información relevante de esta instancia en un documento XML.
-   */
-  xml::Node* asXML(xml::Node* parent) const throw(RuntimeException);
-
-  /**
-     Incrementa la cuenta del contador identificador por (scope, counter)
-     El ambito solicitado deberia estar creado mediate #create, ademas el contador debera
-     estar creado mediante CounterScope::create.
-     \param scope Ámbito del contador.
-     \param counter Identificador del contador.
-     \param value Valor con el que incrementar el contador.
-  */
-  static void count(const int scope, const int counter, const oam::Counter::type_t value = 1) throw();
-
-  /**
-     Incrementa la cuenta del contador identificador por (scope = 0, counter)
-     El ambito solicitado deberia estar creado mediate #create, ademas el contador debera
-     estar creado mediante CounterScope::create.
-     \param counter Identificador del contador.
-  */
-  static void count(const int counter) { count(0, counter, 1); }
-
-private:
-  class Timer : public timex::Timer {
-  public:
-    Timer(CounterManager& counterManager) :
-      timex::Timer("anna::oam:CounterManager::Timer", Millisecond(600000)),
-      a_counterManager(counterManager)
-    {;}
-
-  private:
-    CounterManager& a_counterManager;
-    void expire(timex::Engine *) throw(RuntimeException) { a_counterManager.record(); }
-  };
-
-  class RecordingGuard {
-  public:
-    RecordingGuard(CounterManager*);
-    ~RecordingGuard();
-  private:
-    CounterManager* a_counterManager;
-  };
-
-  CounterScope* a_scopes [MaxScope];
-  Timer a_timer;
-  timex::Engine* a_timeController;
-  CounterRecorder* a_counterRecorder;
-  CounterSummarizer* a_counterSummarizer;
-  bool a_recording;
-
-  CounterManager();
-  CounterManager(const CounterManager&);
-  void activateTimer() throw(RuntimeException);
-
-  friend class Singleton <CounterManager>;
-  friend class Timer;
-
-  friend class CounterScope;
-  // activateTimer
-
-  friend class RecordingGuard;
-};
-
-}
-}
-
-#endif
-