X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2FLauncher.cpp;h=116c325e75285a49a5e0e2f3e7d6be04091e2256;hb=0c533bf948a63d134c8001e16b15194b197cb99a;hp=f58157fea06e4e3b329bb1350760a67a48deeb49;hpb=bc8edd446b493d53cd351b7ed4c62dce0e305e0c;p=anna.git diff --git a/example/diameter/launcher/Launcher.cpp b/example/diameter/launcher/Launcher.cpp index f58157f..116c325 100644 --- a/example/diameter/launcher/Launcher.cpp +++ b/example/diameter/launcher/Launcher.cpp @@ -345,6 +345,7 @@ void Launcher::servicesFromXML(const anna::xml::Node* servicesNode, bool eventOp // Assignments: commEngine->setMaxConnectionDelay(tcpConnectDelayMs); commEngine->setWatchdogPeriod(watchdogPeriodMs); + a_workingNode->setRequestRetransmissions(retransmissions); // Realm information: commEngine->setOriginHost(originHost->getValue()); @@ -365,7 +366,6 @@ void Launcher::servicesFromXML(const anna::xml::Node* servicesNode, bool eventOp // Register one entity for this engine: a_workingNode->createEntity(entity->getValue(), ceaTimeoutMs, answersTimeoutMs); - a_workingNode->setRequestRetransmissions(retransmissions); a_workingNode->getEntity()->setSessionBasedModelsType(sessionBasedModelsType); a_workingNode->getEntity()->setBalance(balance ? (balance->getValue() == "yes") : false); // for sendings if (eventOperation) a_workingNode->getEntity()->bind(); @@ -745,34 +745,11 @@ throw(anna::RuntimeException) { a_timeEngine->activate(a_counterRecorderClock); // start clock } - // Log statistics concepts - if(cl.exists("logStatisticSamples")) { - std::string list = cl.getValue("logStatisticSamples"); - anna::statistics::Engine &statEngine = anna::statistics::Engine::instantiate(); - - if(list == "all") { - if(statEngine.enableSampleLog(/* -1: all concepts */)) - LOGDEBUG(anna::Logger::debug("Sample log activation for all statistic concepts", ANNA_FILE_LOCATION)); - } else { - anna::Tokenizer lst; - lst.apply(cl.getValue("logStatisticSamples"), ","); - - if(lst.size() >= 1) { - anna::Tokenizer::const_iterator tok_min(lst.begin()); - anna::Tokenizer::const_iterator tok_max(lst.end()); - anna::Tokenizer::const_iterator tok_iter; - int conceptId; - - for(tok_iter = tok_min; tok_iter != tok_max; tok_iter++) { - conceptId = atoi(anna::Tokenizer::data(tok_iter)); - - if(statEngine.enableSampleLog(conceptId)) - LOGDEBUG(anna::Logger::debug(anna::functions::asString("Sample log activation for statistic concept id = %d", conceptId), ANNA_FILE_LOCATION)); - } - } - } - } - + ///////////////////////////// + // Log statistics concepts // + ///////////////////////////// + if(cl.exists("logStatisticSamples")) + logStatisticsSamples(cl.getValue("logStatisticSamples")); // Start client connections ////////////////////////////////////////////////////////////////////////////////// MyDiameterEntity *entity; @@ -1036,6 +1013,11 @@ std::string Launcher::help() const throw() { result += "\n This operation applies over all the registered host nodes"; result += "\n except if one specific working node has been set."; result += "\nforceCountersRecord Forces dump to file the current counters of the process."; + result += "\nlog-statistics-samples| Log statistics samples for the provided comma-separated concept id"; + result += "\n list, over './sample..csv' files. For example: \"1,2\""; + result += "\n will log concepts 1 and 2. Reserved words \"all\"/\"none\" activates/"; + result += "\n deactivates all registered statistics concept identifiers. That ids"; + result += "\n are shown at context dump."; result += "\nchange-dir[|directory] Changes the execution point which could be fine to ease some"; result += "\n file system interaction tasks. Be care about some requirements"; result += "\n (for example if you have a user defined counters directory as"; @@ -1195,6 +1177,9 @@ std::string Launcher::help() const throw() { result += "\n sendxml2e|[|]"; result += "\n Sends xml source file (pathfile) to entity (it would be a"; result += "\n 'forward' event if it came through local server endpoint)."; + result += "\n Take into account that the xml message is encoded just on"; + result += "\n call. The xml file is not longer needed neither interpreted"; + result += "\n in case of modification, after calling this command."; result += "\n The step number should be provided for answers to indicate"; result += "\n the 'wait for request' corresponding step. If you miss this"; result += "\n reference, the sequence information (hop-by-hop, end-to-end)"; @@ -1202,6 +1187,8 @@ std::string Launcher::help() const throw() { result += "\n the difficulty of predicting these information). Be sure to"; result += "\n refer to a 'wait for request' step. Conditions like 'regexp'"; result += "\n (as we will see later) are not verified."; + result += "\n In the case of requests, the step number is used to force the"; + result += "\n copy of Session-Id value from the referred step."; result += "\n"; result += "\n sendxml2c|[|]"; result += "\n Sends xml source file (pathfile) to client (it would be a"; @@ -1471,10 +1458,42 @@ std::string Launcher::help() const throw() { return result; } + +void Launcher::logStatisticsSamples(const std::string &conceptsList) throw() { + anna::statistics::Engine &statEngine = anna::statistics::Engine::instantiate(); + + if(conceptsList == "all") { + if(statEngine.enableSampleLog(/* -1: all concepts */)) + LOGDEBUG(anna::Logger::debug("Sample log activation for all statistic concepts", ANNA_FILE_LOCATION)); + } + else if(conceptsList == "none") { + if(statEngine.disableSampleLog(/* -1: all concepts */)) + LOGDEBUG(anna::Logger::debug("Sample log deactivation for all statistic concepts", ANNA_FILE_LOCATION)); + } else { + anna::Tokenizer lst; + lst.apply(conceptsList, ","); + + if(lst.size() >= 1) { + anna::Tokenizer::const_iterator tok_min(lst.begin()); + anna::Tokenizer::const_iterator tok_max(lst.end()); + anna::Tokenizer::const_iterator tok_iter; + int conceptId; + + for(tok_iter = tok_min; tok_iter != tok_max; tok_iter++) { + conceptId = atoi(anna::Tokenizer::data(tok_iter)); + + if(statEngine.enableSampleLog(conceptId)) + LOGDEBUG(anna::Logger::debug(anna::functions::asString("Sample log activation for statistic concept id = %d", conceptId), ANNA_FILE_LOCATION)); + } + } + } +} + + void Launcher::eventOperation(const std::string &operation, std::string &response_content) throw(anna::RuntimeException) { LOGMETHOD(anna::TraceMethod tm("Launcher", "eventOperation", ANNA_FILE_LOCATION)); if (operation == "") return; // ignore - LOGDEBUG(anna::Logger::debug(operation, ANNA_FILE_LOCATION)); + LOGDEBUG(anna::Logger::debug(anna::functions::asString("Operation: %s", operation.c_str()), ANNA_FILE_LOCATION)); // Default response: response_content = "Operation processed with exception: "; @@ -1568,6 +1587,7 @@ void Launcher::eventOperation(const std::string &operation, std::string &respons bool wrongBody = false; if((opType == "change-dir") && (numParams > 1)) wrongBody = true; + if((opType == "log-statistics-samples") && (numParams != 1)) wrongBody = true; if((opType == "node") && (numParams > 1)) wrongBody = true; if((opType == "node_auto") && (numParams > 0)) wrongBody = true; @@ -1598,6 +1618,12 @@ void Launcher::eventOperation(const std::string &operation, std::string &respons return; } + if(opType == "log-statistics-samples") { + logStatisticsSamples(param1); + response_content = anna::functions::asString("Log statistics samples for '%s' concepts", param1.c_str()); + return; + } + // Change execution directory: if(opType == "change-dir") { if (param1 == "") param1 = a_initialWorkingDirectory; @@ -2097,13 +2123,11 @@ void Launcher::eventOperation(const std::string &operation, std::string &respons throw anna::RuntimeException("Wrong body content format on HTTP Request. Use 'help' management command to see more information.", ANNA_FILE_LOCATION); if(param3 == "") throw anna::RuntimeException(anna::functions::asString("Missing xml file for '%s' command in test id operation", param2.c_str()), ANNA_FILE_LOCATION); codecMsg.loadXML(param3); - if (codecMsg.isRequest()) { - if (param4 != "") - throw anna::RuntimeException("Step number is provided with answers (to resolve the corresponding 'wait for request' step), but NOT with requests", ANNA_FILE_LOCATION); - } - else { - if (param4 == "") LOGWARNING(anna::Logger::warning("Step number has not been provided. Take into account that this answer message will be sent 'as is' and sequence information could be wrong at the remote peer", ANNA_FILE_LOCATION)); - } + LOGWARNING( + if (!codecMsg.isRequest() && (param4 == "")) + anna::Logger::warning("Step number has not been provided. Take into account that this answer message will be sent 'as is' and sequence information could be wrong at the remote peer", ANNA_FILE_LOCATION); + ); + updateOperatedOriginHostWithMessage(codecMsg); int stepNumber = ((param4 != "") ? atoi(param4.c_str()):-1);