Example usage for org.apache.commons.cli.avalon CLArgsParser getArgumentById

List of usage examples for org.apache.commons.cli.avalon CLArgsParser getArgumentById

Introduction

In this page you can find the example usage for org.apache.commons.cli.avalon CLArgsParser getArgumentById.

Prototype

public final CLOption getArgumentById(final int id) 

Source Link

Document

Retrieve the CLOption with specified id, or null if no command line option is found.

Usage

From source file:org.apache.jmeter.JMeter.java

/**
 * Takes the command line arguments and uses them to determine how to
 * startup JMeter.//from w  w w .j  av a 2  s.c o m
 * 
 * Called reflectively by {@link NewDriver#main(String[])}
 * @param args The arguments for JMeter
 */
public void start(String[] args) {
    CLArgsParser parser = new CLArgsParser(args, options);
    String error = parser.getErrorString();
    if (error == null) {// Check option combinations
        boolean gui = parser.getArgumentById(NONGUI_OPT) == null;
        boolean nonGuiOnly = parser.getArgumentById(REMOTE_OPT) != null
                || parser.getArgumentById(REMOTE_OPT_PARAM) != null
                || parser.getArgumentById(REMOTE_STOP) != null;
        if (gui && nonGuiOnly) {
            error = "-r and -R and -X are only valid in non-GUI mode";
        }
    }
    if (null != error) {
        System.err.println("Error: " + error);
        System.out.println("Usage");
        System.out.println(CLUtil.describeOptions(options).toString());
        // repeat the error so no need to scroll back past the usage to see it
        System.out.println("Error: " + error);
        return;
    }
    try {
        initializeProperties(parser); // Also initialises JMeter logging
        /*
         * The following is needed for HTTPClient.
         * (originally tried doing this in HTTPSampler2,
         * but it appears that it was done too late when running in GUI mode)
         * Set the commons logging default to Avalon Logkit, if not already defined
         */
        if (System.getProperty("org.apache.commons.logging.Log") == null) { // $NON-NLS-1$
            System.setProperty("org.apache.commons.logging.Log" // $NON-NLS-1$
                    , "org.apache.commons.logging.impl.LogKitLogger"); // $NON-NLS-1$
        }

        Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                if (!(e instanceof ThreadDeath)) {
                    log.error("Uncaught exception: ", e);
                    System.err.println("Uncaught Exception " + e + ". See log file for details.");
                }
            }
        });

        log.info(JMeterUtils.getJMeterCopyright());
        log.info("Version " + JMeterUtils.getJMeterVersion());
        logProperty("java.version"); //$NON-NLS-1$
        logProperty("java.vm.name"); //$NON-NLS-1$
        logProperty("os.name"); //$NON-NLS-1$
        logProperty("os.arch"); //$NON-NLS-1$
        logProperty("os.version"); //$NON-NLS-1$
        logProperty("file.encoding"); // $NON-NLS-1$
        log.info("Max memory     =" + Runtime.getRuntime().maxMemory());
        log.info("Available Processors =" + Runtime.getRuntime().availableProcessors());
        log.info("Default Locale=" + Locale.getDefault().getDisplayName());
        log.info("JMeter  Locale=" + JMeterUtils.getLocale().getDisplayName());
        log.info("JMeterHome=" + JMeterUtils.getJMeterHome());
        logProperty("user.dir", "  ="); //$NON-NLS-1$
        log.info("PWD       =" + new File(".").getCanonicalPath());//$NON-NLS-1$
        log.info("IP: " + JMeterUtils.getLocalHostIP() + " Name: " + JMeterUtils.getLocalHostName()
                + " FullName: " + JMeterUtils.getLocalHostFullName());
        setProxy(parser);

        updateClassLoader();
        if (log.isDebugEnabled()) {
            String jcp = System.getProperty("java.class.path");// $NON-NLS-1$
            String[] bits = jcp.split(File.pathSeparator);
            log.debug("ClassPath");
            for (String bit : bits) {
                log.debug(bit);
            }
        }

        // Set some (hopefully!) useful properties
        long now = System.currentTimeMillis();
        JMeterUtils.setProperty("START.MS", Long.toString(now));// $NON-NLS-1$
        Date today = new Date(now); // so it agrees with above
        // TODO perhaps should share code with __time() function for this...
        JMeterUtils.setProperty("START.YMD", new SimpleDateFormat("yyyyMMdd").format(today));// $NON-NLS-1$ $NON-NLS-2$
        JMeterUtils.setProperty("START.HMS", new SimpleDateFormat("HHmmss").format(today));// $NON-NLS-1$ $NON-NLS-2$

        if (parser.getArgumentById(VERSION_OPT) != null) {
            displayAsciiArt();
        } else if (parser.getArgumentById(HELP_OPT) != null) {
            displayAsciiArt();
            System.out.println(JMeterUtils.getResourceFileAsText("org/apache/jmeter/help.txt"));// $NON-NLS-1$
        } else if (parser.getArgumentById(OPTIONS_OPT) != null) {
            displayAsciiArt();
            System.out.println(CLUtil.describeOptions(options).toString());
        } else if (parser.getArgumentById(SERVER_OPT) != null) {
            // Start the server
            try {
                RemoteJMeterEngineImpl.startServer(JMeterUtils.getPropDefault("server_port", 0)); // $NON-NLS-1$
            } catch (Exception ex) {
                System.err.println("Server failed to start: " + ex);
                log.error("Giving up, as server failed with:", ex);
                throw ex;
            }
            startOptionalServers();
        } else {
            String testFile = null;
            CLOption testFileOpt = parser.getArgumentById(TESTFILE_OPT);
            if (testFileOpt != null) {
                testFile = testFileOpt.getArgument();
                if (USE_LAST_JMX.equals(testFile)) {
                    testFile = LoadRecentProject.getRecentFile(0);// most recent
                }
            }
            CLOption testReportOpt = parser.getArgumentById(REPORT_GENERATING_OPT);
            if (testReportOpt != null) { // generate report from existing file
                String reportFile = testReportOpt.getArgument();
                extractAndSetReportOutputFolder(parser);
                ReportGenerator generator = new ReportGenerator(reportFile, null);
                generator.generate();
            } else if (parser.getArgumentById(NONGUI_OPT) == null) { // not non-GUI => GUI
                startGui(testFile);
                startOptionalServers();
            } else { // NON-GUI must be true
                extractAndSetReportOutputFolder(parser);

                CLOption rem = parser.getArgumentById(REMOTE_OPT_PARAM);
                if (rem == null) {
                    rem = parser.getArgumentById(REMOTE_OPT);
                }
                CLOption jtl = parser.getArgumentById(LOGFILE_OPT);
                String jtlFile = null;
                if (jtl != null) {
                    jtlFile = processLAST(jtl.getArgument(), ".jtl"); // $NON-NLS-1$
                }
                CLOption reportAtEndOpt = parser.getArgumentById(REPORT_AT_END_OPT);
                if (reportAtEndOpt != null) {
                    if (jtlFile == null) {
                        throw new IllegalUserActionException("Option -" + ((char) REPORT_AT_END_OPT)
                                + " requires -" + ((char) LOGFILE_OPT) + " option");
                    }
                }
                startNonGui(testFile, jtlFile, rem, reportAtEndOpt != null);
                startOptionalServers();
            }
        }
    } catch (IllegalUserActionException e) {
        System.out.println("Incorrect Usage:" + e.getMessage());
        System.out.println(CLUtil.describeOptions(options).toString());
    } catch (Throwable e) {
        log.fatalError("An error occurred: ", e);
        System.out.println("An error occurred: " + e.getMessage());
        System.exit(1); // TODO - could this be return?
    }
}

From source file:org.apache.jmeter.JMeter.java

/**
 * Extract option JMeter#REPORT_OUTPUT_FOLDER_OPT and if defined sets property 
 * {@link JMeter#JMETER_REPORT_OUTPUT_DIR_PROPERTY} after checking folder can
 * be safely written to//from   ww w.ja  v  a  2 s. c o  m
 * @param parser {@link CLArgsParser}
 * @throws IllegalArgumentException
 */
private void extractAndSetReportOutputFolder(CLArgsParser parser) throws IllegalArgumentException {
    CLOption reportOutputFolderOpt = parser.getArgumentById(REPORT_OUTPUT_FOLDER_OPT);
    if (reportOutputFolderOpt != null) {
        String reportOutputFolder = parser.getArgumentById(REPORT_OUTPUT_FOLDER_OPT).getArgument();
        File reportOutputFolderAsFile = new File(reportOutputFolder);

        JOrphanUtils.canSafelyWriteToFolder(reportOutputFolderAsFile);
        log.info("Setting property '" + JMETER_REPORT_OUTPUT_DIR_PROPERTY + "' to:'"
                + reportOutputFolderAsFile.getAbsolutePath() + "'");
        JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAsFile.getAbsolutePath());
    }
}

From source file:org.apache.jmeter.JMeter.java

/**
 * Sets a proxy server for the JVM if the command line arguments are
 * specified.//from  w  ww. j a v a  2s .  co m
 */
private void setProxy(CLArgsParser parser) throws IllegalUserActionException {
    if (parser.getArgumentById(PROXY_USERNAME) != null) {
        Properties jmeterProps = JMeterUtils.getJMeterProperties();
        if (parser.getArgumentById(PROXY_PASSWORD) != null) {
            String u, p;
            Authenticator
                    .setDefault(new ProxyAuthenticator(u = parser.getArgumentById(PROXY_USERNAME).getArgument(),
                            p = parser.getArgumentById(PROXY_PASSWORD).getArgument()));
            log.info("Set Proxy login: " + u + "/" + p);
            jmeterProps.setProperty(HTTP_PROXY_USER, u);//for Httpclient
            jmeterProps.setProperty(HTTP_PROXY_PASS, p);//for Httpclient
        } else {
            String u;
            Authenticator.setDefault(
                    new ProxyAuthenticator(u = parser.getArgumentById(PROXY_USERNAME).getArgument(), ""));
            log.info("Set Proxy login: " + u);
            jmeterProps.setProperty(HTTP_PROXY_USER, u);
        }
    }
    if (parser.getArgumentById(PROXY_HOST) != null && parser.getArgumentById(PROXY_PORT) != null) {
        String h = parser.getArgumentById(PROXY_HOST).getArgument();
        String p = parser.getArgumentById(PROXY_PORT).getArgument();
        System.setProperty("http.proxyHost", h);// $NON-NLS-1$
        System.setProperty("https.proxyHost", h);// $NON-NLS-1$
        System.setProperty("http.proxyPort", p);// $NON-NLS-1$
        System.setProperty("https.proxyPort", p);// $NON-NLS-1$
        log.info("Set http[s].proxyHost: " + h + " Port: " + p);
    } else if (parser.getArgumentById(PROXY_HOST) != null || parser.getArgumentById(PROXY_PORT) != null) {
        throw new IllegalUserActionException(JMeterUtils.getResString("proxy_cl_error"));// $NON-NLS-1$
    }

    if (parser.getArgumentById(NONPROXY_HOSTS) != null) {
        String n = parser.getArgumentById(NONPROXY_HOSTS).getArgument();
        System.setProperty("http.nonProxyHosts", n);// $NON-NLS-1$
        System.setProperty("https.nonProxyHosts", n);// $NON-NLS-1$
        log.info("Set http[s].nonProxyHosts: " + n);
    }
}

From source file:org.apache.jmeter.JMeter.java

private void initializeProperties(CLArgsParser parser) {
    if (parser.getArgumentById(PROPFILE_OPT) != null) {
        JMeterUtils.loadJMeterProperties(parser.getArgumentById(PROPFILE_OPT).getArgument());
    } else {/*w w  w .ja v a 2 s.  c o m*/
        JMeterUtils.loadJMeterProperties(NewDriver.getJMeterDir() + File.separator + "bin" + File.separator // $NON-NLS-1$
                + "jmeter.properties");// $NON-NLS-1$
    }

    if (parser.getArgumentById(JMLOGFILE_OPT) != null) {
        String jmlogfile = parser.getArgumentById(JMLOGFILE_OPT).getArgument();
        jmlogfile = processLAST(jmlogfile, ".log");// $NON-NLS-1$
        JMeterUtils.setProperty(LoggingManager.LOG_FILE, jmlogfile);
    }

    JMeterUtils.initLogging();
    JMeterUtils.initLocale();
    // Bug 33845 - allow direct override of Home dir
    if (parser.getArgumentById(JMETER_HOME_OPT) == null) {
        JMeterUtils.setJMeterHome(NewDriver.getJMeterDir());
    } else {
        JMeterUtils.setJMeterHome(parser.getArgumentById(JMETER_HOME_OPT).getArgument());
    }

    Properties jmeterProps = JMeterUtils.getJMeterProperties();
    remoteProps = new Properties();

    // Add local JMeter properties, if the file is found
    String userProp = JMeterUtils.getPropDefault("user.properties", ""); //$NON-NLS-1$
    if (userProp.length() > 0) { //$NON-NLS-1$
        FileInputStream fis = null;
        try {
            File file = JMeterUtils.findFile(userProp);
            if (file.canRead()) {
                log.info("Loading user properties from: " + file.getCanonicalPath());
                fis = new FileInputStream(file);
                Properties tmp = new Properties();
                tmp.load(fis);
                jmeterProps.putAll(tmp);
                LoggingManager.setLoggingLevels(tmp);//Do what would be done earlier
            }
        } catch (IOException e) {
            log.warn("Error loading user property file: " + userProp, e);
        } finally {
            JOrphanUtils.closeQuietly(fis);
        }
    }

    // Add local system properties, if the file is found
    String sysProp = JMeterUtils.getPropDefault("system.properties", ""); //$NON-NLS-1$
    if (sysProp.length() > 0) {
        FileInputStream fis = null;
        try {
            File file = JMeterUtils.findFile(sysProp);
            if (file.canRead()) {
                log.info("Loading system properties from: " + file.getCanonicalPath());
                fis = new FileInputStream(file);
                System.getProperties().load(fis);
            }
        } catch (IOException e) {
            log.warn("Error loading system property file: " + sysProp, e);
        } finally {
            JOrphanUtils.closeQuietly(fis);
        }
    }

    // Process command line property definitions
    // These can potentially occur multiple times

    List<CLOption> clOptions = parser.getArguments();
    for (CLOption option : clOptions) {
        String name = option.getArgument(0);
        String value = option.getArgument(1);
        FileInputStream fis = null;

        switch (option.getDescriptor().getId()) {

        // Should not have any text arguments
        case CLOption.TEXT_ARGUMENT:
            throw new IllegalArgumentException("Unknown arg: " + option.getArgument());

        case PROPFILE2_OPT: // Bug 33920 - allow multiple props
            try {
                fis = new FileInputStream(new File(name));
                Properties tmp = new Properties();
                tmp.load(fis);
                jmeterProps.putAll(tmp);
                LoggingManager.setLoggingLevels(tmp);//Do what would be done earlier
            } catch (FileNotFoundException e) {
                log.warn("Can't find additional property file: " + name, e);
            } catch (IOException e) {
                log.warn("Error loading additional property file: " + name, e);
            } finally {
                JOrphanUtils.closeQuietly(fis);
            }
            break;
        case SYSTEM_PROPFILE:
            log.info("Setting System properties from file: " + name);
            try {
                fis = new FileInputStream(new File(name));
                System.getProperties().load(fis);
            } catch (IOException e) {
                log.warn("Cannot find system property file " + e.getLocalizedMessage());
            } finally {
                JOrphanUtils.closeQuietly(fis);
            }
            break;
        case SYSTEM_PROPERTY:
            if (value.length() > 0) { // Set it
                log.info("Setting System property: " + name + "=" + value);
                System.getProperties().setProperty(name, value);
            } else { // Reset it
                log.warn("Removing System property: " + name);
                System.getProperties().remove(name);
            }
            break;
        case JMETER_PROPERTY:
            if (value.length() > 0) { // Set it
                log.info("Setting JMeter property: " + name + "=" + value);
                jmeterProps.setProperty(name, value);
            } else { // Reset it
                log.warn("Removing JMeter property: " + name);
                jmeterProps.remove(name);
            }
            break;
        case JMETER_GLOBAL_PROP:
            if (value.length() > 0) { // Set it
                log.info("Setting Global property: " + name + "=" + value);
                remoteProps.setProperty(name, value);
            } else {
                File propFile = new File(name);
                if (propFile.canRead()) {
                    log.info("Setting Global properties from the file " + name);
                    try {
                        fis = new FileInputStream(propFile);
                        remoteProps.load(fis);
                    } catch (FileNotFoundException e) {
                        log.warn("Could not find properties file: " + e.getLocalizedMessage());
                    } catch (IOException e) {
                        log.warn("Could not load properties file: " + e.getLocalizedMessage());
                    } finally {
                        JOrphanUtils.closeQuietly(fis);
                    }
                }
            }
            break;
        case LOGLEVEL:
            if (value.length() > 0) { // Set category
                log.info("LogLevel: " + name + "=" + value);
                LoggingManager.setPriority(value, name);
            } else { // Set root level
                log.warn("LogLevel: " + name);
                LoggingManager.setPriority(name);
            }
            break;
        case REMOTE_STOP:
            remoteStop = true;
            break;
        default:
            // ignored
            break;
        }
    }

    String sampleVariables = (String) jmeterProps.get(SampleEvent.SAMPLE_VARIABLES);
    if (sampleVariables != null) {
        remoteProps.put(SampleEvent.SAMPLE_VARIABLES, sampleVariables);
    }
    jmeterProps.put("jmeter.version", JMeterUtils.getJMeterVersion());
}

From source file:org.apache.jmeter.JMeterReport.java

/**
 *
 * @param args/*from   w  ww .  j ava  2 s  .co m*/
 */
public void start(String[] args) {
    CLArgsParser parser = new CLArgsParser(args, options);
    if (null != parser.getErrorString()) {
        System.err.println("Error: " + parser.getErrorString());
        System.out.println("Usage");
        System.out.println(CLUtil.describeOptions(options).toString());
        return;
    }
    try {
        initializeProperties(parser);
        log.info("Version " + JMeterUtils.getJMeterVersion());
        log.info("java.version=" + System.getProperty("java.version"));
        log.info(JMeterUtils.getJMeterCopyright());
        if (parser.getArgumentById(VERSION_OPT) != null) {
            System.out.println(JMeterUtils.getJMeterCopyright());
            System.out.println("Version " + JMeterUtils.getJMeterVersion());
        } else if (parser.getArgumentById(HELP_OPT) != null) {
            System.out.println(JMeterUtils.getResourceFileAsText("org/apache/jmeter/help.txt"));
        } else if (parser.getArgumentById(NONGUI_OPT) == null) {
            startGui(parser.getArgumentById(TESTFILE_OPT));
        } else {
            startNonGui(parser.getArgumentById(TESTFILE_OPT), parser.getArgumentById(LOGFILE_OPT));
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("An error occurred: " + e.getMessage());
        System.exit(-1);
    }
}

From source file:org.apache.jmeter.JMeterReport.java

private void initializeProperties(CLArgsParser parser) {
    if (parser.getArgumentById(PROPFILE_OPT) != null) {
        JMeterUtils.getProperties(parser.getArgumentById(PROPFILE_OPT).getArgument());
    } else {/*from   w  w w  . j  ava 2 s.  c  om*/
        JMeterUtils.getProperties(
                NewDriver.getJMeterDir() + File.separator + "bin" + File.separator + "jmeter.properties");
    }

    // Bug 33845 - allow direct override of Home dir
    if (parser.getArgumentById(JMETER_HOME_OPT) == null) {
        JMeterUtils.setJMeterHome(NewDriver.getJMeterDir());
    } else {
        JMeterUtils.setJMeterHome(parser.getArgumentById(JMETER_HOME_OPT).getArgument());
    }

    // Process command line property definitions (can occur multiple times)

    Properties jmeterProps = JMeterUtils.getJMeterProperties();
    List<CLOption> clOptions = parser.getArguments();
    int size = clOptions.size();

    for (int i = 0; i < size; i++) {
        CLOption option = clOptions.get(i);
        String name = option.getArgument(0);
        String value = option.getArgument(1);

        switch (option.getDescriptor().getId()) {
        case PROPFILE2_OPT: // Bug 33920 - allow multiple props
            File f = new File(name);
            FileInputStream inStream = null;
            try {
                inStream = new FileInputStream(f);
                jmeterProps.load(inStream);
            } catch (FileNotFoundException e) {
                log.warn("Can't find additional property file: " + name, e);
            } catch (IOException e) {
                log.warn("Error loading additional property file: " + name, e);
            } finally {
                IOUtils.closeQuietly(inStream);
            }
            break;
        case SYSTEM_PROPERTY:
            if (value.length() > 0) { // Set it
                log.info("Setting System property: " + name + "=" + value);
                System.getProperties().setProperty(name, value);
            } else { // Reset it
                log.warn("Removing System property: " + name);
                System.getProperties().remove(name);
            }
            break;
        case JMETER_PROPERTY:
            if (value.length() > 0) { // Set it
                log.info("Setting JMeter property: " + name + "=" + value);
                jmeterProps.setProperty(name, value);
            } else { // Reset it
                log.warn("Removing JMeter property: " + name);
                jmeterProps.remove(name);
            }
            break;
        case LOGLEVEL:
            if (value.length() > 0) { // Set category
                log.info("LogLevel: " + name + "=" + value);
                LoggingManager.setPriority(value, name);
            } else { // Set root level
                log.warn("LogLevel: " + name);
                LoggingManager.setPriority(name);
            }
            break;
        default:
            // ignored
            break;
        }
    }

}