コード例 #1
0
    /**
     * @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);
    }
コード例 #2
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."));
        //}
    }
コード例 #3
0
ファイル: ZmfConsole.cpp プロジェクト: fetzerms/ZMF
    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();
            }
        }
    }
コード例 #4
0
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;
}