--- /dev/null
+// ANNA - Anna is Not Nothingness Anymore //
+// //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
+// //
+// See project site at http://redmine.teslayout.com/projects/anna-suite //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+// Standard
+#include <string>
+
+// Project
+#include <anna/diameter.comm/MessageStatistics.hpp>
+#include <anna/statistics/Engine.hpp>
+#include <anna/diameter/functions.hpp>
+#include <anna/diameter/helpers/defines.hpp>
+#include <anna/diameter/codec/Message.hpp>
+#include <anna/diameter/codec/Engine.hpp>
+#include <anna/diameter/codec/EngineManager.hpp>
+
+
+void anna::diameter::comm::MessageStatistics::initialize(const std::string &name) throw(anna::RuntimeException) {
+ a_accumulator = anna::statistics::Engine::instantiate().createAccumulator(name);
+}
+
+
+void anna::diameter::comm::MessageStatistics::process(const ConceptType::_v &conceptType, const anna::diameter::CommandId &cid, const double & value) throw(anna::RuntimeException) {
+
+ // Development issue:
+// if (!a_accumulator) {
+// LOGWARNING(anna::Logger::warning("Cannot process uninitialized 'MessageStatistics' instance", ANNA_FILE_LOCATION));
+// return;
+// }
+
+ // retrieve the concept id for the pair:
+ ConceptId conceptId(cid, conceptType);
+ int engine_concept_id = 0;
+ concepts_map_it it = a_concepts.find(conceptId);
+ if (it != a_concepts.end()) { // found
+ engine_concept_id = it->second;
+ }
+ else { // register a new concept id
+ std::string description;
+ if(conceptType == ConceptType::SentRequestProcessingTime) {
+ description = anna::functions::asString("Processing time for outgoing requests (code = %d)", cid.first);
+ }
+ else if (conceptType == ConceptType::ReceivedMessageSize) {
+ description = "Message size for received messages ";
+ description += anna::diameter::functions::commandIdAsPairString(cid);
+ }
+
+ engine_concept_id = a_accumulator->addConcept(description, "ms", true/* integer values */);
+ a_concepts[conceptId] = engine_concept_id;
+ }
+
+ a_accumulator->process(engine_concept_id, value);
+}
+