-// ANNA - Anna is Not 'N' Anymore
+// ANNA - Anna is Not Nothingness Anymore
//
// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
//
-// https://bitbucket.org/testillano/anna
+// http://redmine.teslayout.com/projects/anna-suite
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// 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
+// * Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
#include <anna/core/oam/defines.hpp>
#include <anna/core/oam/Handler.hpp>
+#include <cstdarg>
+
namespace anna {
namespace xml {
}
namespace oam {
class CounterScope;
+class CounterRecorder;
}
}
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;
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();
/**
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)
* @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;
};
}