package kg.apc.cmdtools; import kg.apc.cmd.UniversalRunner; import kg.apc.jmeter.JMeterPluginsUtils; import kg.apc.jmeter.vizualizers.CorrectedResultCollector; import org.apache.jmeter.samplers.SampleSaveConfiguration; import org.apache.jorphan.logging.LoggingManager; import org.apache.log.Logger; import org.apache.log.Priority; import org.jmeterplugins.tools.FilterResults; import java.io.PrintStream; import java.util.ListIterator; public class FilterResultsTool extends AbstractCMDTool { private static final Logger log = LoggingManager.getLoggerForClass(); private FilterResults filterResults = null; public FilterResultsTool() { super(); JMeterPluginsUtils.prepareJMeterEnv(UniversalRunner.getJARLocation()); filterResults = new FilterResults(); } @Override protected void showHelp(PrintStream os) { os.println("Options for tool 'FilterResults': --input-file <filenameIn> --output-file <filenameFilteredOut> " + " [ " + "--success-filter <true/false> " + "--include-labels <labels list> " + "--exclude-labels <labels list> " + "--include-label-regex <true/false> " + "--exclude-label-regex <true/false> " + "--start-offset <sec> " + "--end-offset <sec> " + "--save-as-xml <true/false> (false : CSV format by default) " + " ]"); } @Override protected int processParams(ListIterator args) throws UnsupportedOperationException, IllegalArgumentException { String outputFile = "out.res"; LoggingManager.setPriority(Priority.INFO); // first process params without worker created while (args.hasNext()) { String nextArg = (String) args.next(); if (nextArg.equals("--loglevel")) { args.remove(); String loglevelStr = (String) args.next(); args.remove(); LoggingManager.setPriority(loglevelStr); } } // rewind it while (args.hasPrevious()) { args.previous(); } CorrectedResultCollector collector = filterResults.getCollector(); SampleSaveConfiguration saveConfig = collector.getSaveConfig(); while (args.hasNext()) { String nextArg = (String) args.next(); log.debug("Arg: " + nextArg); if (nextArg.equalsIgnoreCase("--input-file")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing input file JTL (or CSV) file name"); } collector.setProperty("filename", (String) args.next()); log.info("--input-file " + collector.getFilename()); } else if (nextArg.equalsIgnoreCase("--output-file")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing Output file name"); } // outputfile is a parameter to FilterResults outputFile = (String) args.next(); log.info("--output-file " + outputFile); } else if (nextArg.equalsIgnoreCase("--include-labels")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing include labels list"); } collector .setIncludeLabels((String) args.next()); log.info("--include-labels " + collector .getList(CorrectedResultCollector.INCLUDE_SAMPLE_LABELS)); } else if (nextArg.equalsIgnoreCase("--exclude-labels")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing exclude labels list"); } collector .setExcludeLabels((String) args.next()); log.info("--exclude-labels " + collector .getList(CorrectedResultCollector.EXCLUDE_SAMPLE_LABELS)); } else if (nextArg.equalsIgnoreCase("--success-filter")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing success filter flag (true/false)"); } collector.setSuccessOnlyLogging(Boolean.valueOf((String) args .next())); log.info("--success-filter " + collector.isSuccessOnlyLogging()); } else if (nextArg.equalsIgnoreCase("--include-label-regex")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing include label regex flag (true/false)"); } collector .setEnabledIncludeRegex(Boolean.valueOf((String) args .next())); log.info("--include-label-regex " + collector .getRegexChkboxState(CorrectedResultCollector.INCLUDE_REGEX_CHECKBOX_STATE)); } else if (nextArg.equalsIgnoreCase("--exclude-label-regex")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing exclude label regex flag (true/false)"); } collector .setEnabledExcludeRegex(Boolean.valueOf((String) args .next())); log.info("--exclude-label-regex " + collector .getRegexChkboxState(CorrectedResultCollector.EXCLUDE_REGEX_CHECKBOX_STATE)); } else if (nextArg.equalsIgnoreCase("--start-offset")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing start offset flag (sec)"); } collector .setStartOffset((String) args.next()); log.info("--start-offset " + collector .getPropertyAsString(CorrectedResultCollector.START_OFFSET)); } else if (nextArg.equalsIgnoreCase("--end-offset")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing end offset flag (sec)"); } collector .setEndOffset((String) args.next()); log.info("--end-offset " + collector .getPropertyAsString(CorrectedResultCollector.END_OFFSET)); } else if (nextArg.equalsIgnoreCase("--save-as-xml")) { if (!args.hasNext()) { throw new IllegalArgumentException( "Missing save as xml flag (true/false, true = XML/false = CSV)"); } saveConfig.setAsXml(Boolean.valueOf((String) args.next())); log.info("--save-as-xml " + saveConfig.saveAsXml()); } else { throw new UnsupportedOperationException("Unrecognized option: " + nextArg); } } collector.setSaveConfig(saveConfig); return doJob(collector, outputFile); } private int doJob(CorrectedResultCollector collector, String outputFile) { return filterResults.doJob(collector, outputFile); } }