Updated license
[anna.git] / example / diameter / launcher / main.cpp
index 17200e8..3b1b754 100644 (file)
@@ -1,4 +1,4 @@
-// ANNA - Anna is Not 'N' Anymore
+// ANNA - Anna is Not Nothingness Anymore
 //
 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
 //
 //          cisco.tierra@gmail.com
 
 
-/*
-   Establece un manejador externo para controlar el teclado, recoge los parametros de la operacion
-   por este y envia la peticion al servidor.
-*/
-#include <iostream>
 #include <fstream>
+#include <iostream>
 
 #include <string>
 #include <map>
@@ -57,6 +53,7 @@
 #include <anna/http/functions.hpp>
 #include <anna/comm/functions.hpp>
 #include <anna/timex/Engine.hpp>
+#include <anna/timex/Clock.hpp>
 #include <anna/diameter/stack/Engine.hpp>
 #include <anna/diameter/codec/Engine.hpp>
 #include <anna/diameter.comm/OamModule.hpp>
@@ -86,6 +83,7 @@ namespace diameter {
 namespace comm {
 class Entity;
 class Response;
+class LocalServer;
 }
 }
 }
@@ -98,8 +96,7 @@ class Response;
 anna::diameter::comm::Message G_commMsgSent2c, G_commMsgSent2e, G_commMsgFwd2c, G_commMsgFwd2e;
 anna::diameter::comm::Message G_commMsg;
 anna::diameter::codec::Message G_codecMsg, G_codecAnsMsg;
-anna::Recycler<anna::diameter::comm::Message> G_commMessages; // create en el forward de requets sin answer programada
-// realease en el forward de answers
+anna::Recycler<anna::diameter::comm::Message> G_commMessages; // create on requests forwards without programmed answer / release in answers forward
 
 
 // Auxiliary resources for answers programming
@@ -110,6 +107,32 @@ reacting_answers_container G_reactingAnswers2C, G_reactingAnswers2E;
 
 
 
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// COUNTERS RECORD PROCEDURE //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+class MyCounterRecorderClock : public anna::timex::Clock {
+  public:
+  MyCounterRecorderClock(const char *clockName, const anna::Millisecond & timeout) :
+    anna::timex::Clock(clockName, timeout) {;}
+  //virtual ~MyCounterRecorderClock();
+
+  virtual bool tick() throw (RuntimeException) {
+    anna::diameter::comm::OamModule::instantiate().recordCounters();
+    anna::diameter::codec::OamModule::instantiate().recordCounters(); 
+    return true;
+  }
+};
+
+class MyCounterRecorder : public anna::oam::CounterRecorder {
+
+   // pure virtual definitions:
+   void open() throw(anna::RuntimeException) {;}
+   void apply(const anna::oam::Counter& counter) throw(anna::RuntimeException) {;}
+   void close() throw() {;}
+   std::string asString() const throw() { return "Physical dump not implemented: see memory accumulations writting context (kill -10 <pid>)"; }
+};
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
 class MyDiameterEntity : public anna::diameter::comm::Entity {
 
    void eventResponse(const anna::diameter::comm::Response&) throw(anna::RuntimeException);
@@ -186,17 +209,6 @@ private:
    void eventBreakConnection(Server* server) throw();
 };
 
-
-class MyCounterRecorder : public anna::oam::CounterRecorder {
-
-   // pure virtual definitions:
-   void open() throw(anna::RuntimeException) {;}
-   void apply(const anna::oam::Counter& counter) throw(anna::RuntimeException) {;}
-   void close() throw() {;}
-   std::string asString() const throw() { return "Physical dump not implemented: see memory accumulations writting context (kill -10 <pid>)"; }
-};
-
-
 class Launcher : public anna::comm::Application {
 
    MyCommunicator *a_communicator;
@@ -208,6 +220,7 @@ class Launcher : public anna::comm::Application {
    anna::time::Date a_start_time;
    anna::timex::Engine* a_timeEngine;
    MyCounterRecorder *a_counterRecorder;
+   MyCounterRecorderClock *a_counterRecorderClock;
    std::string a_cerPathfile;
    std::string a_dwrPathfile;
 
@@ -909,6 +922,7 @@ Launcher::Launcher() : anna::comm::Application("launcher", "DiameterLauncher", "
    a_detailedLog = false;
    a_timeEngine = NULL;
    a_counterRecorder = NULL;
+   a_counterRecorderClock = NULL;
    a_entity = NULL;
    a_diameterLocalServer = NULL;
    a_cerPathfile = "cer.xml";
@@ -1183,6 +1197,8 @@ throw(anna::RuntimeException) {
    a_communicator = new MyCommunicator(workMode);
    a_timeEngine = new anna::timex::Engine((anna::Millisecond)300000, (anna::Millisecond)150);
    a_counterRecorder = new MyCounterRecorder();
+   a_counterRecorderClock = new MyCounterRecorderClock("Counters record procedure clock", Millisecond(10000));
+   //a_counterRecorderClock = new MyCounterRecorderClock("Counters record procedure clock", Millisecond(300000));
 }
 
 void Launcher::run()
@@ -1200,6 +1216,7 @@ throw(anna::RuntimeException) {
    oamDiameterComm.initializeCounterScope(1);  // 1000 - 1999
    anna::diameter::codec::OamModule & oamDiameterCodec = anna::diameter::codec::OamModule::instantiate();
    oamDiameterCodec.initializeCounterScope(2);  // 2000 - 2999
+
    /////////////////
    // COMM MODULE //
    /////////////////
@@ -1297,10 +1314,13 @@ throw(anna::RuntimeException) {
    oamDiameterCodec.registerCounter(anna::diameter::codec::OamModule::Counter::LevelValidation__FailedRuleForCardinalityMoreThanNeeded,                 "", 17 /*2017*/);
    oamDiameterCodec.registerCounter(anna::diameter::codec::OamModule::Counter::LevelValidation__FailedGenericAvpRuleForCardinalityFoundDisregardedItem, "", 18 /*2018*/);
    oamDiameterCodec.registerCounter(anna::diameter::codec::OamModule::Counter::LevelValidation__FoundDisregardedItemsAndGenericAVPWasNotSpecified,      "", 19 /*2019*/);
-   anna::oam::CounterManager& cm = anna::oam::CounterManager::instantiate();
-   cm.setEngine(a_timeEngine);
-   cm.setRecordPeriod(Millisecond(300000));
-   cm.setCounterRecorder(static_cast<anna::oam::CounterRecorder*>(a_counterRecorder));
+
+   /////////////////////////////////
+   // Counter recorder associated //
+   /////////////////////////////////
+   oamDiameterComm.setCounterRecorder(a_counterRecorder);
+   oamDiameterCodec.setCounterRecorder(a_counterRecorder);
+   a_timeEngine->activate(a_counterRecorderClock); // start clock
 
    // Checking command line parameters
    if (cl.exists("sessionBasedModelsClientSocketSelection")) {