Until now, stacks could not be delta-loaded. All the stacks might be
loaded in a unique single xml file (or xml representation through
rest api). This was due to counterscope initialization restriction:
once a counter was registered (due to event received), you could not
initialize more counter scopes.
We removed this restriction (now commented on initializeCountersScope).
New scopes() method to know current registered ones in order to put
the correct start point at services load procedure.
The services "node" nodes always could be loaded separately, so, no
impact on functional behaviour for this.
Fixed: https://redmine.teslayout.com/issues/48
// We will register a scope per stack id registered. The counters will be dynamically registered at count method.
anna::diameter::comm::ApplicationMessageOamModule & appMsgOamModule = anna::diameter::comm::ApplicationMessageOamModule::instantiate();
appMsgOamModule.enableCounters(); // this special module is disabled by default (the only)
// We will register a scope per stack id registered. The counters will be dynamically registered at count method.
anna::diameter::comm::ApplicationMessageOamModule & appMsgOamModule = anna::diameter::comm::ApplicationMessageOamModule::instantiate();
appMsgOamModule.enableCounters(); // this special module is disabled by default (the only)
- static int scope_id = 3;
+ static int scope_id = 3 + appMsgOamModule.scopes();
+
unsigned int id_value;
std::string codecEngineName;
unsigned int id_value;
std::string codecEngineName;
+ /**
+ * Number of scopes registered
+ */
+ int scopes() const { return a_scopes.size(); }
/**
* Enable all the counters registered in this module (enabled by default at constructor).
/**
* Enable all the counters registered in this module (enabled by default at constructor).
if (a_counters [index] == NULL) { \
string msg (asString ()); \
msg += functions::asText (" | CounterId: ", index); \
if (a_counters [index] == NULL) { \
string msg (asString ()); \
msg += functions::asText (" | CounterId: ", index); \
- msg += " | Counter Id is not defined"; \
+ msg += " | Counter Id is not defined yet"; \
throw RuntimeException (msg, __FILE__, __LINE__); \
}
throw RuntimeException (msg, __FILE__, __LINE__); \
}
LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "initializeCounterScope", ANNA_FILE_LOCATION));
// Order of use:
LOGMETHOD(anna::TraceMethod tttm("anna::oam::Module", "initializeCounterScope", ANNA_FILE_LOCATION));
// Order of use:
- if(a_counters.size() != 0) // any counter have been registered
- throw anna::RuntimeException("After use of counter registration can't initialize more scope ids!. Do initializations firstly", ANNA_FILE_LOCATION);
+ // https://redmine.teslayout.com/issues/48
+ //if(a_counters.size() != 0) // any counter have been registered
+ // throw anna::RuntimeException("After use of counter registration can't initialize more scope ids!. Do initializations firstly", ANNA_FILE_LOCATION);
// Scope range: 0 - 99
if(scopeId < 0 || scopeId >= MaxScope) {
// Scope range: 0 - 99
if(scopeId < 0 || scopeId >= MaxScope) {
//------------------------------------- Module::RecordingGuard::RecordingGuard()
//------------------------------------------------------------------------------
anna::oam::Module::RecordingGuard::RecordingGuard(anna::oam::Module* module) :
//------------------------------------- Module::RecordingGuard::RecordingGuard()
//------------------------------------------------------------------------------
anna::oam::Module::RecordingGuard::RecordingGuard(anna::oam::Module* module) :
- a_module(module) {
- module->a_counterRecording = true;
-}
-
+ a_module(module) {
+ module->a_counterRecording = true;
+}
+
//------------------------------------------------------------------------------
//------------------------------------ Module::RecordingGuard::~RecordingGuard()
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------ Module::RecordingGuard::~RecordingGuard()
//------------------------------------------------------------------------------
-anna::oam::Module::RecordingGuard::~RecordingGuard() {
- a_module->a_counterRecording = false;
-}
+anna::oam::Module::RecordingGuard::~RecordingGuard() {
+ a_module->a_counterRecording = false;
+}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
for(const_counter_iterator cnt_it = counter_begin(); cnt_it != counter_end(); cnt_it++) {
ptrCounterData = (counter_data_t *) & ((*cnt_it).second);
for(const_counter_iterator cnt_it = counter_begin(); cnt_it != counter_end(); cnt_it++) {
ptrCounterData = (counter_data_t *) & ((*cnt_it).second);
+
+ // Counter registered ?
+ int offset = ptrCounterData->Offset;
+ unsigned long long int accValue = 0ULL;
+ try {
+ const anna::oam::CounterScope *csAux = scope(scope_it);
+ accValue = csAux->getAccValue(offset);
+ } catch(anna::RuntimeException &ex) {
+ ex.trace();
+ continue;
+ }
+
// Counter:
trace += "\n\tType: "; trace += anna::functions::asString((*cnt_it).first);
trace += " | Description: '"; trace += ptrCounterData->Description; trace += "'";
// Counter:
trace += "\n\tType: "; trace += anna::functions::asString((*cnt_it).first);
trace += " | Description: '"; trace += ptrCounterData->Description; trace += "'";
- int offset = ptrCounterData->Offset;
int realId = (1000 * scopeId) + offset;
trace += " | ScopeId/Offset: "; trace += anna::functions::asString(scopeId); trace += "/"; trace += anna::functions::asString(offset);
trace += " | RealId: "; trace += anna::functions::asString(realId);
int realId = (1000 * scopeId) + offset;
trace += " | ScopeId/Offset: "; trace += anna::functions::asString(scopeId); trace += "/"; trace += anna::functions::asString(offset);
trace += " | RealId: "; trace += anna::functions::asString(realId);
- unsigned long long int accValue = scope(scope_it)->getAccValue(offset);
+ accValue = scope(scope_it)->getAccValue(offset);
if(accValue != 0ULL) {
trace += " | AccumulatedAmount: ";
if(accValue != 0ULL) {
trace += " | AccumulatedAmount: ";
for(const_counter_iterator cnt_it = counter_begin(); cnt_it != counter_end(); cnt_it++) {
ptrCounterData = (counter_data_t *) & ((*cnt_it).second);
for(const_counter_iterator cnt_it = counter_begin(); cnt_it != counter_end(); cnt_it++) {
ptrCounterData = (counter_data_t *) & ((*cnt_it).second);
+
+ // Counter registered ?
+ int offset = ptrCounterData->Offset;
+ unsigned long long int accValue = 0ULL;
+ try {
+ const anna::oam::CounterScope *csAux = scope(scope_it);
+ accValue = csAux->getAccValue(offset);
+ } catch(anna::RuntimeException &ex) {
+ ex.trace();
+ continue;
+ }
+
// Counter:
anna::xml::Node* counter = registeredCounters->createChild("Counter");
counter->createAttribute("Type", anna::functions::asString((*cnt_it).first));
counter->createAttribute("Description", ptrCounterData->Description);
// Counter:
anna::xml::Node* counter = registeredCounters->createChild("Counter");
counter->createAttribute("Type", anna::functions::asString((*cnt_it).first));
counter->createAttribute("Description", ptrCounterData->Description);
- int offset = ptrCounterData->Offset;
int realId = (1000 * scopeId) + offset;
counter->createAttribute("ScopeId", anna::functions::asString(scopeId));
counter->createAttribute("Offset", anna::functions::asString(offset));
counter->createAttribute("RealId", anna::functions::asString(realId));
int realId = (1000 * scopeId) + offset;
counter->createAttribute("ScopeId", anna::functions::asString(scopeId));
counter->createAttribute("Offset", anna::functions::asString(offset));
counter->createAttribute("RealId", anna::functions::asString(realId));
- unsigned long long int accValue = scope(scope_it)->getAccValue(offset);
if(accValue != 0ULL)
counter->createAttribute("AccumulatedAmount", anna::functions::asString("%llu", accValue));
if(accValue != 0ULL)
counter->createAttribute("AccumulatedAmount", anna::functions::asString("%llu", accValue));