/** * @brief execDaemons - executes "command" on multiple daemons * @param command "start", "stop", "restart" * @param clioption * @param args */ void CLI::execDaemons(const QString &command, QCommandLineOption &clioption, QStringList args, QCommandLineParser &parser) { // the value of the key "--start|--stop|--restart" is the first daemon QString daemon = parser.value(clioption); if(daemon.isEmpty()) { printHelpText(QString("Error: no <daemon> specified.")); } // ok, add first daemon to the list QStringList daemons; daemons << daemon; // add the others args if(!args.isEmpty()) { daemons << args; } Servers::Servers *servers = new Servers::Servers(); for (int i = 0; i < daemons.size(); ++i) { QString daemon = daemons.at(i); // check if daemon is whitelisted if(!servers->getListOfServerNames().contains(daemon)) { printHelpText( QString("Error: \"%1\" is not a valid <daemon>.") .arg(daemon.toLocal8Bit().constData()) ); } QString methodName = command + servers->getCamelCasedServerName(daemon); QMetaObject::invokeMethod(servers, methodName.toLocal8Bit().constData()); } exit(0); }
void CLI::handleCommandLineArguments() { // lets support multiple cli options, each with different options // this should handle, e.g. "wpn-xm.exe --service nginx start" QCommandLineParser parser; /** * Definition of Command Line Arguments */ // -h, --help, -? QCommandLineOption helpOption(QStringList() << "h" << "help" << "?", "Prints this help message."); parser.addOption(helpOption); // -v, --version QCommandLineOption versionOption(QStringList() << "v" << "version", "Display the version."); parser.addOption(versionOption); // -s, --service // TODO: install / uninstall daemon as service from CLI (part1) //QCommandLineOption serviceOption(QStringList() << "s" << "service", "Install/Uninstall daemon as service.", "[daemon] [command]"); //parser.addOption(serviceOption); // -d, --daemon QCommandLineOption daemonOption(QStringList() << "d" << "daemon", "Execute a command on daemon.", "[daemon] [command]"); parser.addOption(daemonOption); // --start QCommandLineOption startOption("start", "Starts a daemon.", "[daemon/s]"); parser.addOption(startOption); // --stop QCommandLineOption stopOption("stop", "Stops a daemon.", "[daemon/s]"); parser.addOption(stopOption); // --restart QCommandLineOption restartOption("stop", "Restarts a daemon.", "[daemon/s]"); parser.addOption(restartOption); /** * Handling of Command Line Arguments */ // find out the positional arguments. parser.parse(QCoreApplication::arguments()); const QStringList args = parser.positionalArguments(); const QString command = args.isEmpty() ? QString() : args.first(); // -h, --help, -? if(parser.isSet(helpOption)) { printHelpText(); } // -v, --version if(parser.isSet(versionOption)) { colorPrint("WPN-XM Server Stack " APP_VERSION "\n", "brightwhite"); exit(0); } // -s, --service <daemon> <command>, where <command> is on|off //if (parser.isSet(serviceOption)) { // TODO: install / uninstall daemon as service from CLI (part2) // https://github.com/WPN-XM/WPN-XM/issues/39 //} // -d, --daemon <daemon> <command>, where <command> is start|stop|restart if (parser.isSet(daemonOption)) { // at this point we already have "--daemon <daemon>", but not <command>// // daemon is the value QString daemon = parser.value(daemonOption); if(daemon.isEmpty()) { printHelpText(QString("Error: no <daemon> specified.")); } Servers::Servers *servers = new Servers::Servers(); // check if daemon is whitelisted if(!servers->getListOfServerNames().contains(daemon)) { printHelpText( QString("Error: \"%1\" is not a valid <daemon>.") .arg(daemon.toLocal8Bit().constData()) ); } if(command.isEmpty()) { printHelpText(QString("Error: no <command> specified.")); } QStringList availableCommands = QStringList() << "start" << "stop" << "restart"; if(!availableCommands.contains(command)) { printHelpText( QString("Error: \"%1\" is not a valid <command>.") .arg(command.toLocal8Bit().constData()) ); } QString methodName = command + servers->getCamelCasedServerName(daemon); if(QMetaObject::invokeMethod(servers, methodName.toLocal8Bit().constData())) { exit(0); } printHelpText( QString("Command not handled, yet! (daemon = %1) (command = %2) \n") .arg(daemon.toLocal8Bit().constData(), command.toLocal8Bit().constData()) ); exit(0); } // --start <daemons> if (parser.isSet(startOption)) { execDaemons("start", startOption, args, parser); } // --stop <daemons> if (parser.isSet(stopOption)) { execDaemons("stop", stopOption, args, parser); } // --restart <daemons> if (parser.isSet(restartOption)) { execDaemons("stop", restartOption, args, parser); } //if(parser.unknownOptionNames().count() > 1) { printHelpText(QString("Error: Unknown option.")); //} }
void ZmfConsole::startConsole() { std::cout << &std::endl; std::cout << "---------- ZMF Console ----------" << &std::endl; printHelpText(); std::string line; while (!instanceController_->isStopped()) { std::getline(std::cin, line); // Split commands Poco::StringTokenizer lineCommandSplit(line, " ", 0); if (lineCommandSplit.count() == 0) { std::cerr << ">>Nothing entered" << &std::endl; continue; } if (line.compare("en") == 0 || line.compare("enable") == 0) { std::cout << "Requesting module enable" << &std::endl; instanceController_->requestEnableModule(); } else if (line.compare("dis") == 0 || line.compare("disable") == 0) { std::cout << "Requesting module disable" << &std::endl; instanceController_->requestDisableModule(); } else if (line.compare("stop") == 0) { std::cout << "Requesting instance stop" << &std::endl; instanceController_->requestStopInstance(); instanceController_->joinExecution(); return; } else if (lineCommandSplit[0].compare("ren") == 0 || lineCommandSplit[0].compare("renable") == 0) { zmf::data::ModuleUniqueId moduleIdR; if (!tryStringToModuleId(lineCommandSplit[1], moduleIdR)) { continue; } // Remote enable std::cout << "Requesting remote enable " << moduleIdR.getString() << &std::endl; bool result = instanceController_->requestEnableRemoteInstance(moduleIdR, 1000); if (result) { std::cout << "Remote Enable Success" << &std::endl; } else { std::cout << "Remote Enable Failed" << &std::endl; } } else if (lineCommandSplit[0].compare("rdis") == 0 || lineCommandSplit[0].compare("rdisable") == 0) { zmf::data::ModuleUniqueId moduleIdR; if (!tryStringToModuleId(lineCommandSplit[1], moduleIdR)) { continue; } // Remote disable std::cout << "Requesting remote disable " << moduleIdR.getString() << &std::endl; bool result = instanceController_->requestDisableRemoteInstance(moduleIdR, 1000); if (result) { std::cout << "Remote Disable Success" << &std::endl; } else { std::cout << "Remote Disable Failed" << &std::endl; } } else if (lineCommandSplit[0].compare("rstop") == 0) { zmf::data::ModuleUniqueId moduleIdR; if (!tryStringToModuleId(lineCommandSplit[1], moduleIdR)) { continue; } // Remote stop std::cout << "Requesting remote stop " << moduleIdR.getString() << &std::endl; bool result = instanceController_->requestStopRemoteInstance(moduleIdR, 1000); if (result) { std::cout << "Remote Stop Success" << &std::endl; } else { std::cout << "Remote Stop Failed" << &std::endl; } } else { std::cout << "Unknown command" << &std::endl; printHelpText(); } } }
bool HandlerStandard::parseCommand(int argc, _TCHAR* argv[]){ if(argc < 2){ printHelpText(); return false; } for(unsigned int i=1; i<argc; i+=2){ if(m_supportedParameters.find(argv[i]) != m_supportedParameters.end() && i+1 <= argc) m_parameterMap[argv[i]] = argv[i+1]; else{ std::cerr << "Invalid parameter syntax used!\n\n\n"; printHelpText(); return false; } } std::map<std::wstring,std::wstring>::iterator itr; if((itr = m_parameterMap.find(L"d")) != m_parameterMap.end()) m_gui->setText(IDC_EDIT_FILEPATH,itr->second); else return false; if((itr = m_parameterMap.find(L"pThreads")) != m_parameterMap.end()) DataMiner::ConfigManager::setSetting("pThreads",std::string(itr->second.begin(),itr->second.end())); else DataMiner::ConfigManager::setSetting("pThreads","All"); // Algorithm if((itr = m_parameterMap.find(L"a")) != m_parameterMap.end()){ if(itr->second.compare(L"GPURF") == 0) m_gui->setText(IDC_RANDFOREST_ITSELECTOR,L"Iteration_2"); else if(itr->second.compare(L"GPUERT") == 0) m_gui->setText(IDC_RANDFOREST_ITSELECTOR,L"Iteration_4"); if(itr->second.find(L"GPU") != std::string::npos) m_gui->setText(IDC_COMBO_ALGO,L"GPURandomForest"); else if(itr->second.find(L"CPU") != std::string::npos) m_gui->setText(IDC_COMBO_ALGO,L"CPURandomForest"); } else{ m_gui->setText(IDC_COMBO_ALGO,L"CPURandomForest"); } // Evaluation if((itr = m_parameterMap.find(L"e")) != m_parameterMap.end()){ if(itr->second.compare(L"cValidation") == 0){ m_gui->setText(IDC_COMBO_EVALUATION,L"CrossValidation"); if((itr = m_parameterMap.find(L"pE")) != m_parameterMap.end()){ m_gui->setText(IDC_EDIT_EVALPARAM,itr->second); } else m_gui->setText(IDC_EDIT_EVALPARAM,L"10"); } else if(itr->second.compare(L"pSplit") == 0){ m_gui->setText(IDC_COMBO_EVALUATION,L"PercentageSplit"); if((itr = m_parameterMap.find(L"pE")) != m_parameterMap.end()){ m_gui->setText(IDC_EDIT_EVALPARAM,itr->second); } else m_gui->setText(IDC_EDIT_EVALPARAM,L"70"); } else m_gui->setText(IDC_COMBO_EVALUATION,L"CrossValidation"); } else{ m_gui->setText(IDC_COMBO_EVALUATION,L"CrossValidation"); if((itr = m_parameterMap.find(L"pE")) != m_parameterMap.end()){ m_gui->setText(IDC_EDIT_EVALPARAM,itr->second); } else m_gui->setText(IDC_EDIT_EVALPARAM,L"10"); } // Parameters if((itr = m_parameterMap.find(L"pTrees")) != m_parameterMap.end()) m_gui->setText(IDC_RANDFOREST_NUMTREES,itr->second); else m_gui->setText(IDC_RANDFOREST_NUMTREES,L"100"); if((itr = m_parameterMap.find(L"pMIPN")) != m_parameterMap.end()) m_gui->setText(IDC_RANDFOREST_MAXINST,itr->second); else m_gui->setText(IDC_RANDFOREST_MAXINST,L"10"); if((itr = m_parameterMap.find(L"pDepth")) != m_parameterMap.end()) m_gui->setText(IDC_RANDFOREST_TREEDEPTH,itr->second); else m_gui->setText(IDC_RANDFOREST_TREEDEPTH,L"100"); if((itr = m_parameterMap.find(L"pSeed")) != m_parameterMap.end()) m_gui->setText(IDC_RANDFOREST_SEED,itr->second); else m_gui->setText(IDC_RANDFOREST_SEED,L"1"); if((itr = m_parameterMap.find(L"pK")) != m_parameterMap.end()) m_gui->setText(IDC_RANDFOREST_NUMFEATURES,itr->second); else m_gui->setText(IDC_RANDFOREST_NUMFEATURES,L"0"); m_gui->setText(IDC_ALGORITHM_GPUAPI,L"CUDA"); return true; }