You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by mi...@apache.org on 2015/07/04 20:04:18 UTC
svn commit: r1689187 [23/32] - in /jmeter/branches/HC4: ./ bin/
bin/templates/ bin/testfiles/ docs/ docs/css/ docs/images/screenshots/
docs/images/screenshots/assertion/ docs/images/screenshots/changes/2.13/
docs/usermanual/ lib/ licenses/bin/ res/mave...
Modified: jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java (original)
+++ jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java Sat Jul 4 18:04:12 2015
@@ -29,8 +29,15 @@ import org.apache.jmeter.util.JMeterUtil
public class SamplerMetric {
private static final int SLIDING_WINDOW_SIZE = JMeterUtils.getPropDefault("backend_metrics_window", 100); //$NON-NLS-1$
+ // Response times for OK samples
// Limit to sliding window of SLIDING_WINDOW_SIZE values
- private DescriptiveStatistics responsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
+ private DescriptiveStatistics okResponsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
+ // Response times for KO samples
+ // Limit to sliding window of SLIDING_WINDOW_SIZE values
+ private DescriptiveStatistics koResponsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
+ // Response times for All samples
+ // Limit to sliding window of SLIDING_WINDOW_SIZE values
+ private DescriptiveStatistics allResponsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
private int successes;
private int failures;
/**
@@ -50,10 +57,13 @@ public class SamplerMetric {
failures+=result.getErrorCount();
}
long time = result.getTime();
+ allResponsesStats.addValue(time);
if(result.isSuccessful()) {
// Should we also compute KO , all response time ?
// only take successful requests for time computing
- responsesStats.addValue(time);
+ okResponsesStats.addValue(time);
+ }else {
+ koResponsesStats.addValue(time);
}
}
@@ -68,12 +78,59 @@ public class SamplerMetric {
}
/**
+ * Get the number of total requests for the current time slot
+ *
+ * @return number of total requests
+ */
+ public int getTotal() {
+ return successes+failures;
+ }
+
+ /**
+ * Get the number of successful requests for the current time slot
+ *
+ * @return number of successful requests
+ */
+ public int getSuccesses() {
+ return successes;
+ }
+
+ /**
+ * Get the number of failed requests for the current time slot
+ *
+ * @return number of failed requests
+ */
+ public int getFailures() {
+ return failures;
+ }
+
+ /**
+ * Get the maximal elapsed time for requests within sliding window
+ *
+ * @return the maximal elapsed time, or <code>0</code> if no requests have
+ * been added yet
+ */
+ public double getOkMaxTime() {
+ return okResponsesStats.getMax();
+ }
+
+ /**
+ * Get the minimal elapsed time for requests within sliding window
+ *
+ * @return the minTime, or {@link Long#MAX_VALUE} if no requests have been
+ * added yet
+ */
+ public double getOkMinTime() {
+ return okResponsesStats.getMin();
+ }
+
+ /**
* Get the arithmetic mean of the stored values
*
* @return The arithmetic mean of the stored values
*/
- public double getMean() {
- return responsesStats.getMean();
+ public double getOkMean() {
+ return okResponsesStats.getMean();
}
/**
@@ -84,45 +141,59 @@ public class SamplerMetric {
* @return Returns an estimate for the requested percentile of the stored
* values.
*/
- public double getPercentile(double percentile) {
- return responsesStats.getPercentile(percentile);
+ public double getOkPercentile(double percentile) {
+ return okResponsesStats.getPercentile(percentile);
}
/**
- * Get the number of total requests for the current time slot
+ * Get the maximal elapsed time for requests within sliding window
*
- * @return number of total requests
+ * @return the maximal elapsed time, or <code>0</code> if no requests have
+ * been added yet
*/
- public int getTotal() {
- return successes+failures;
+ public double getKoMaxTime() {
+ return koResponsesStats.getMax();
+ }
+
+ /**
+ * Get the minimal elapsed time for requests within sliding window
+ *
+ * @return the minTime, or {@link Long#MAX_VALUE} if no requests have been
+ * added yet
+ */
+ public double getKoMinTime() {
+ return koResponsesStats.getMin();
}
/**
- * Get the number of successful requests for the current time slot
+ * Get the arithmetic mean of the stored values
*
- * @return number of successful requests
+ * @return The arithmetic mean of the stored values
*/
- public int getSuccesses() {
- return successes;
+ public double getKoMean() {
+ return koResponsesStats.getMean();
}
-
+
/**
- * Get the number of failed requests for the current time slot
+ * Returns an estimate for the requested percentile of the stored values.
*
- * @return number of failed requests
+ * @param percentile
+ * the requested percentile (scaled from 0 - 100)
+ * @return Returns an estimate for the requested percentile of the stored
+ * values.
*/
- public int getFailures() {
- return failures;
+ public double getKoPercentile(double percentile) {
+ return koResponsesStats.getPercentile(percentile);
}
-
+
/**
* Get the maximal elapsed time for requests within sliding window
*
* @return the maximal elapsed time, or <code>0</code> if no requests have
* been added yet
*/
- public double getMaxTime() {
- return responsesStats.getMax();
+ public double getAllMaxTime() {
+ return allResponsesStats.getMax();
}
/**
@@ -131,7 +202,28 @@ public class SamplerMetric {
* @return the minTime, or {@link Long#MAX_VALUE} if no requests have been
* added yet
*/
- public double getMinTime() {
- return responsesStats.getMin();
+ public double getAllMinTime() {
+ return allResponsesStats.getMin();
+ }
+
+ /**
+ * Get the arithmetic mean of the stored values
+ *
+ * @return The arithmetic mean of the stored values
+ */
+ public double getAllMean() {
+ return allResponsesStats.getMean();
+ }
+
+ /**
+ * Returns an estimate for the requested percentile of the stored values.
+ *
+ * @param percentile
+ * the requested percentile (scaled from 0 - 100)
+ * @return Returns an estimate for the requested percentile of the stored
+ * values.
+ */
+ public double getAllPercentile(double percentile) {
+ return allResponsesStats.getPercentile(percentile);
}
}
Modified: jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/AbstractGraphiteMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/AbstractGraphiteMetricsSender.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/AbstractGraphiteMetricsSender.java (original)
+++ jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/AbstractGraphiteMetricsSender.java Sat Jul 4 18:04:12 2015
@@ -31,8 +31,11 @@ import org.apache.commons.pool2.impl.Gen
abstract class AbstractGraphiteMetricsSender implements GraphiteMetricsSender {
/**
- * @return GenericKeyedObjectPool
- *
+ * Create a new keyed pool of {@link SocketOutputStream}s using a
+ * {@link SocketOutputStreamPoolFactory}. The keys for the pool are
+ * {@link SocketConnectionInfos} instances.
+ *
+ * @return GenericKeyedObjectPool the newly generated pool
*/
protected GenericKeyedObjectPool<SocketConnectionInfos, SocketOutputStream> createSocketOutputStreamPool() {
GenericKeyedObjectPoolConfig config = new GenericKeyedObjectPoolConfig();
@@ -55,8 +58,10 @@ abstract class AbstractGraphiteMetricsSe
* <li>'\\' by '-'</li>
* <li>'.' by '_'</li>
* </ul>
+ *
* @param s
- * @return
+ * text to be sanitized
+ * @return the sanitized text
*/
static final String sanitizeString(String s) {
// String#replace uses regexp
Modified: jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java (original)
+++ jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java Sat Jul 4 18:04:12 2015
@@ -45,22 +45,46 @@ import org.apache.log.Logger;
*/
public class GraphiteBackendListenerClient extends AbstractBackendListenerClient implements Runnable {
private static final int DEFAULT_PLAINTEXT_PROTOCOL_PORT = 2003;
- private static final String CUMULATED_CONTEXT_NAME = "cumulated";
+ private static final String TEST_CONTEXT_NAME = "test";
+ private static final String ALL_CONTEXT_NAME = "all";
private static final Logger LOGGER = LoggingManager.getLoggerForClass();
private static final String DEFAULT_METRICS_PREFIX = "jmeter."; //$NON-NLS-1$
private static final String CUMULATED_METRICS = "__cumulated__"; //$NON-NLS-1$
- private static final String METRIC_MAX_ACTIVE_THREADS = "maxActiveThreads"; //$NON-NLS-1$
- private static final String METRIC_MIN_ACTIVE_THREADS = "minActiveThreads"; //$NON-NLS-1$
- private static final String METRIC_MEAN_ACTIVE_THREADS = "meanActiveThreads"; //$NON-NLS-1$
- private static final String METRIC_STARTED_THREADS = "startedThreads"; //$NON-NLS-1$
- private static final String METRIC_STOPPED_THREADS = "stoppedThreads"; //$NON-NLS-1$
- private static final String METRIC_FAILED_REQUESTS = "failure"; //$NON-NLS-1$
- private static final String METRIC_SUCCESSFUL_REQUESTS = "success"; //$NON-NLS-1$
- private static final String METRIC_TOTAL_REQUESTS = "total"; //$NON-NLS-1$
+ // User Metrics
+ private static final String METRIC_MAX_ACTIVE_THREADS = "maxAT"; //$NON-NLS-1$
+ private static final String METRIC_MIN_ACTIVE_THREADS = "minAT"; //$NON-NLS-1$
+ private static final String METRIC_MEAN_ACTIVE_THREADS = "meanAT"; //$NON-NLS-1$
+ private static final String METRIC_STARTED_THREADS = "startedT"; //$NON-NLS-1$
+ private static final String METRIC_FINISHED_THREADS = "endedT"; //$NON-NLS-1$
+
+ // Response time Metrics
+ private static final String METRIC_SEPARATOR = "."; //$NON-NLS-1$
+ private static final String METRIC_OK_PREFIX = "ok"; //$NON-NLS-1$
+ private static final String METRIC_KO_PREFIX = "ko"; //$NON-NLS-1$
+ private static final String METRIC_ALL_PREFIX = "a";
+
+
+ private static final String METRIC_COUNT = "count"; //$NON-NLS-1$
private static final String METRIC_MIN_RESPONSE_TIME = "min"; //$NON-NLS-1$
private static final String METRIC_MAX_RESPONSE_TIME = "max"; //$NON-NLS-1$
- private static final String METRIC_PERCENTILE_PREFIX = "percentile"; //$NON-NLS-1$
+ private static final String METRIC_PERCENTILE = "pct"; //$NON-NLS-1$
+
+ private static final String METRIC_OK_COUNT = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_COUNT;
+ private static final String METRIC_OK_MIN_RESPONSE_TIME = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_MIN_RESPONSE_TIME;
+ private static final String METRIC_OK_MAX_RESPONSE_TIME = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_MAX_RESPONSE_TIME;
+ private static final String METRIC_OK_PERCENTILE_PREFIX = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_PERCENTILE;
+
+ private static final String METRIC_KO_COUNT = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_COUNT;
+ private static final String METRIC_KO_MIN_RESPONSE_TIME = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_MIN_RESPONSE_TIME;
+ private static final String METRIC_KO_MAX_RESPONSE_TIME = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_MAX_RESPONSE_TIME;
+ private static final String METRIC_KO_PERCENTILE_PREFIX = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_PERCENTILE;
+
+ private static final String METRIC_ALL_COUNT = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_COUNT;
+ private static final String METRIC_ALL_MIN_RESPONSE_TIME = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_MIN_RESPONSE_TIME;
+ private static final String METRIC_ALL_MAX_RESPONSE_TIME = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_MAX_RESPONSE_TIME;
+ private static final String METRIC_ALL_PERCENTILE_PREFIX = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_PERCENTILE;
+
private static final long ONE_SECOND = 1L;
private static final int MAX_POOL_SIZE = 1;
private static final String DEFAULT_PERCENTILES = "90;95;99";
@@ -73,7 +97,9 @@ public class GraphiteBackendListenerClie
private String rootMetricsPrefix;
private String samplersList = ""; //$NON-NLS-1$
private Set<String> samplersToFilter;
- private Map<String, Float> percentiles;
+ private Map<String, Float> okPercentiles;
+ private Map<String, Float> koPercentiles;
+ private Map<String, Float> allPercentiles;
private GraphiteMetricsSender graphiteMetricsManager;
@@ -100,7 +126,7 @@ public class GraphiteBackendListenerClie
for (Map.Entry<String, SamplerMetric> entry : getMetricsPerSampler().entrySet()) {
SamplerMetric metric = entry.getValue();
if(entry.getKey().equals(CUMULATED_METRICS)) {
- addMetrics(timestampInSeconds, CUMULATED_CONTEXT_NAME, metric);
+ addMetrics(timestampInSeconds, ALL_CONTEXT_NAME, metric);
} else {
addMetrics(timestampInSeconds, AbstractGraphiteMetricsSender.sanitizeString(entry.getKey()), metric);
}
@@ -108,11 +134,11 @@ public class GraphiteBackendListenerClie
metric.resetForTimeInterval();
}
}
- graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_MIN_ACTIVE_THREADS, Integer.toString(getUserMetrics().getMaxActiveThreads()));
- graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_MAX_ACTIVE_THREADS, Integer.toString(getUserMetrics().getMinActiveThreads()));
- graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_MEAN_ACTIVE_THREADS, Integer.toString(getUserMetrics().getMeanActiveThreads()));
- graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_STARTED_THREADS, Integer.toString(getUserMetrics().getStartedThreads()));
- graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_STOPPED_THREADS, Integer.toString(getUserMetrics().getFinishedThreads()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_MIN_ACTIVE_THREADS, Integer.toString(getUserMetrics().getMinActiveThreads()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_MAX_ACTIVE_THREADS, Integer.toString(getUserMetrics().getMaxActiveThreads()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_MEAN_ACTIVE_THREADS, Integer.toString(getUserMetrics().getMeanActiveThreads()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_STARTED_THREADS, Integer.toString(getUserMetrics().getStartedThreads()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_FINISHED_THREADS, Integer.toString(getUserMetrics().getFinishedThreads()));
graphiteMetricsManager.writeAndSendMetrics();
}
@@ -126,17 +152,38 @@ public class GraphiteBackendListenerClie
* @param metric {@link SamplerMetric}
*/
private void addMetrics(long timestampInSeconds, String contextName, SamplerMetric metric) {
- graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_FAILED_REQUESTS, Integer.toString(metric.getFailures()));
- graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_SUCCESSFUL_REQUESTS, Integer.toString(metric.getSuccesses()));
- graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_TOTAL_REQUESTS, Integer.toString(metric.getTotal()));
- // See https://issues.apache.org/bugzilla/show_bug.cgi?id=57350
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_OK_COUNT, Integer.toString(metric.getSuccesses()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_KO_COUNT, Integer.toString(metric.getFailures()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_ALL_COUNT, Integer.toString(metric.getTotal()));
+ // See https://bz.apache.org/bugzilla/show_bug.cgi?id=57350
if(metric.getTotal() > 0) {
- graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_MIN_RESPONSE_TIME, Double.toString(metric.getMinTime()));
- graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_MAX_RESPONSE_TIME, Double.toString(metric.getMaxTime()));
- for (Map.Entry<String, Float> entry : percentiles.entrySet()) {
- graphiteMetricsManager.addMetric(timestampInSeconds, contextName,
- entry.getKey(),
- Double.toString(metric.getPercentile(entry.getValue().floatValue())));
+ if(metric.getSuccesses()>0) {
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_OK_MIN_RESPONSE_TIME, Double.toString(metric.getOkMinTime()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_OK_MAX_RESPONSE_TIME, Double.toString(metric.getOkMaxTime()));
+ for (Map.Entry<String, Float> entry : okPercentiles.entrySet()) {
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName,
+ entry.getKey(),
+ Double.toString(metric.getOkPercentile(entry.getValue().floatValue())));
+ }
+ }
+ if(metric.getFailures()>0) {
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_KO_MIN_RESPONSE_TIME, Double.toString(metric.getKoMinTime()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_KO_MAX_RESPONSE_TIME, Double.toString(metric.getKoMaxTime()));
+ for (Map.Entry<String, Float> entry : koPercentiles.entrySet()) {
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName,
+ entry.getKey(),
+ Double.toString(metric.getKoPercentile(entry.getValue().floatValue())));
+ }
+ }
+ if(metric.getTotal()>0) {
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_ALL_MIN_RESPONSE_TIME, Double.toString(metric.getAllMinTime()));
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_ALL_MAX_RESPONSE_TIME, Double.toString(metric.getAllMaxTime()));
+ for (Map.Entry<String, Float> entry : allPercentiles.entrySet()) {
+ graphiteMetricsManager.addMetric(timestampInSeconds, contextName,
+ entry.getKey(),
+ Double.toString(metric.getAllPercentile(entry.getValue().floatValue())));
+ }
+
}
}
}
@@ -182,15 +229,24 @@ public class GraphiteBackendListenerClie
rootMetricsPrefix = context.getParameter("rootMetricsPrefix", DEFAULT_METRICS_PREFIX);
String percentilesAsString = context.getParameter("percentiles", DEFAULT_METRICS_PREFIX);
String[] percentilesStringArray = percentilesAsString.split(SEPARATOR);
- percentiles = new HashMap<String, Float>(percentilesStringArray.length);
+ okPercentiles = new HashMap<String, Float>(percentilesStringArray.length);
+ koPercentiles = new HashMap<String, Float>(percentilesStringArray.length);
+ allPercentiles = new HashMap<String, Float>(percentilesStringArray.length);
DecimalFormat format = new DecimalFormat("0.##");
for (int i = 0; i < percentilesStringArray.length; i++) {
if(!StringUtils.isEmpty(percentilesStringArray[i].trim())) {
try {
Float percentileValue = Float.parseFloat(percentilesStringArray[i].trim());
- percentiles.put(
- METRIC_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
+ okPercentiles.put(
+ METRIC_OK_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
+ percentileValue);
+ koPercentiles.put(
+ METRIC_KO_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
percentileValue);
+ allPercentiles.put(
+ METRIC_ALL_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
+ percentileValue);
+
} catch(Exception e) {
LOGGER.error("Error parsing percentile:'"+percentilesStringArray[i]+"'", e);
}
Modified: jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java (original)
+++ jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java Sat Jul 4 18:04:12 2015
@@ -109,6 +109,7 @@ class PickleGraphiteMetricsSender extend
out = socketOutputStreamPool.borrowObject(socketConnectionInfos);
out.write(header);
+ // pickleWriter is not closed as it would close the underlying pooled out
Writer pickleWriter = new OutputStreamWriter(out, CHARSET_NAME);
pickleWriter.write(payload);
pickleWriter.flush();
Modified: jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/SocketOutputStreamPoolFactory.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/SocketOutputStreamPoolFactory.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/SocketOutputStreamPoolFactory.java (original)
+++ jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/SocketOutputStreamPoolFactory.java Sat Jul 4 18:04:12 2015
@@ -25,6 +25,7 @@ import org.apache.commons.pool2.BaseKeye
import org.apache.commons.pool2.KeyedPooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
+import org.apache.jorphan.util.JOrphanUtils;
/**
* Pool Factory of {@link SocketOutputStream}
@@ -51,8 +52,8 @@ public class SocketOutputStreamPoolFacto
public void destroyObject(SocketConnectionInfos socketConnectionInfos, PooledObject<SocketOutputStream> socketOutputStream) throws Exception {
super.destroyObject(socketConnectionInfos, socketOutputStream);
SocketOutputStream outputStream = socketOutputStream.getObject();
- outputStream.close();
- outputStream.getSocket().close();
+ JOrphanUtils.closeQuietly(outputStream);
+ JOrphanUtils.closeQuietly(outputStream.getSocket());
}
/**
Modified: jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java (original)
+++ jmeter/branches/HC4/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java Sat Jul 4 18:04:12 2015
@@ -85,6 +85,7 @@ class TextGraphiteMetricsSender extends
SocketOutputStream out = null;
try {
out = socketOutputStreamPool.borrowObject(socketConnectionInfos);
+ // pw is not closed as it would close the underlying pooled out
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out, CHARSET_NAME), false);
for (MetricTuple metric: metrics) {
pw.printf("%s %s %d%n", metric.name, metric.value, Long.valueOf(metric.timestamp));
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/JMeter.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/JMeter.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/JMeter.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/JMeter.java Sat Jul 4 18:04:12 2015
@@ -31,7 +31,6 @@ import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.SocketException;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
@@ -54,6 +53,7 @@ import org.apache.commons.cli.avalon.CLO
import org.apache.commons.cli.avalon.CLUtil;
import org.apache.jmeter.control.ReplaceableController;
import org.apache.jmeter.engine.ClientJMeterEngine;
+import org.apache.jmeter.engine.DistributedRunner;
import org.apache.jmeter.engine.JMeterEngine;
import org.apache.jmeter.engine.RemoteJMeterEngineImpl;
import org.apache.jmeter.engine.StandardJMeterEngine;
@@ -244,14 +244,12 @@ public class JMeter implements JMeterPlu
main.setVisible(true);
ActionRouter.getInstance().actionPerformed(new ActionEvent(main, 1, ActionNames.ADD_ALL));
if (testFile != null) {
- FileInputStream reader = null;
try {
File f = new File(testFile);
log.info("Loading file: " + f);
FileServer.getFileServer().setBaseForScript(f);
- reader = new FileInputStream(f);
- HashTree tree = SaveService.loadTree(reader);
+ HashTree tree = SaveService.loadTree(f);
GuiPackage.getInstance().setTestPlanFile(f.getAbsolutePath());
@@ -262,8 +260,6 @@ public class JMeter implements JMeterPlu
} catch (Exception e) {
log.error("Failure loading test file", e);
JMeterUtils.reportErrorToUser(e.toString());
- } finally {
- JOrphanUtils.closeQuietly(reader);
}
} else {
JTree jTree = GuiPackage.getInstance().getMainFrame().getTree();
@@ -331,6 +327,8 @@ public class JMeter implements JMeterPlu
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());
@@ -743,7 +741,6 @@ public class JMeter implements JMeterPlu
// run test in batch mode
private void runNonGui(String testFile, String logFile, boolean remoteStart, String remote_hosts_string) {
- FileInputStream reader = null;
try {
File f = new File(testFile);
if (!f.exists() || !f.isFile()) {
@@ -752,10 +749,7 @@ public class JMeter implements JMeterPlu
}
FileServer.getFileServer().setBaseForScript(f);
- reader = new FileInputStream(f);
- log.info("Loading file: " + f);
-
- HashTree tree = SaveService.loadTree(reader);
+ HashTree tree = SaveService.loadTree(f);
@SuppressWarnings("deprecation") // Deliberate use of deprecated ctor
JMeterTreeModel treeModel = new JMeterTreeModel(new Object());// Create non-GUI version to avoid headless problems
@@ -811,42 +805,22 @@ public class JMeter implements JMeterPlu
engines.add(engine);
} else {
java.util.StringTokenizer st = new java.util.StringTokenizer(remote_hosts_string, ",");//$NON-NLS-1$
- List<String> failingEngines = new ArrayList<String>(st.countTokens());
+ List<String> hosts = new LinkedList<String>();
while (st.hasMoreElements()) {
- String el = (String) st.nextElement();
- println("Configuring remote engine for " + el);
- log.info("Configuring remote engine for " + el);
- JMeterEngine eng = doRemoteInit(el.trim(), tree);
- if (null != eng) {
- engines.add(eng);
- } else {
- failingEngines.add(el);
- println("Failed to configure "+el);
- }
- }
- if (engines.isEmpty()) {
- println("No remote engines were started.");
- return;
+ hosts.add((String) st.nextElement());
}
- if(failingEngines.size()>0) {
- throw new IllegalArgumentException("The following remote engines could not be configured:"+failingEngines);
- }
- println("Starting remote engines");
- log.info("Starting remote engines");
- long now=System.currentTimeMillis();
- println("Starting the test @ "+new Date(now)+" ("+now+")");
- for (JMeterEngine engine : engines) {
- engine.runTest();
- }
- println("Remote engines have been started");
- log.info("Remote engines have been started");
+
+ DistributedRunner distributedRunner=new DistributedRunner(this.remoteProps);
+ distributedRunner.setStdout(System.out);
+ distributedRunner.setStdErr(System.err);
+ distributedRunner.init(hosts, tree);
+ engines.addAll(distributedRunner.getEngines());
+ distributedRunner.start();
}
startUdpDdaemon(engines);
} catch (Exception e) {
System.out.println("Error in NonGUIDriver " + e.toString());
log.error("Error in NonGUIDriver", e);
- } finally {
- JOrphanUtils.closeQuietly(reader);
}
}
@@ -929,22 +903,6 @@ public class JMeter implements JMeterPlu
return rc;
}
- private JMeterEngine doRemoteInit(String hostName, HashTree testTree) {
- JMeterEngine engine = null;
- try {
- engine = new ClientJMeterEngine(hostName);
- } catch (Exception e) {
- log.fatalError("Failure connecting to remote host: "+hostName, e);
- System.err.println("Failure connecting to remote host: "+hostName+" "+e);
- return null;
- }
- engine.configure(testTree);
- if (!remoteProps.isEmpty()) {
- engine.setProperties(remoteProps);
- }
- return engine;
- }
-
/*
* Listen to test and handle tidyup after non-GUI test completes.
* If running a remote test, then after waiting a few seconds for listeners to finish files,
@@ -1152,7 +1110,7 @@ public class JMeter implements JMeterPlu
private static void waitForSignals(final List<JMeterEngine> engines, DatagramSocket socket) {
byte[] buf = new byte[80];
- System.out.println("Waiting for possible shutdown message on port "+socket.getLocalPort());
+ System.out.println("Waiting for possible Shutdown/StopTestNow/Heapdump message on port "+socket.getLocalPort());
DatagramPacket request = new DatagramPacket(buf, buf.length);
try {
while(true) {
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/NewDriver.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/NewDriver.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/NewDriver.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/NewDriver.java Sat Jul 4 18:04:12 2015
@@ -253,12 +253,7 @@ public final class NewDriver {
}
try {
- Class<?> initialClass;
- if (args != null && args.length > 0 && args[0].equals("report")) {// $NON-NLS-1$
- initialClass = loader.loadClass("org.apache.jmeter.JMeterReport");// $NON-NLS-1$
- } else {
- initialClass = loader.loadClass("org.apache.jmeter.JMeter");// $NON-NLS-1$
- }
+ Class<?> initialClass = loader.loadClass("org.apache.jmeter.JMeter");// $NON-NLS-1$
Object instance = initialClass.newInstance();
Method startup = initialClass.getMethod("start", new Class[] { new String[0].getClass() });// $NON-NLS-1$
startup.invoke(instance, new Object[] { args });
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/config/gui/RowDetailDialog.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/config/gui/RowDetailDialog.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/config/gui/RowDetailDialog.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/config/gui/RowDetailDialog.java Sat Jul 4 18:04:12 2015
@@ -76,13 +76,13 @@ public class RowDetailDialog extends JDi
private JButton nextButton;
private JButton previousButton;
-
+
private JButton closeButton;
private ObjectTableModel tableModel;
private int selectedRow;
-
+
private boolean textChanged = true; // change to false after the first insert
@@ -102,9 +102,7 @@ public class RowDetailDialog extends JDi
JRootPane rootPane = new JRootPane();
// Hide Window on ESC
Action escapeAction = new AbstractAction("ESCAPE") {
- /**
- *
- */
+
private static final long serialVersionUID = -8699034338969407625L;
@Override
@@ -114,9 +112,7 @@ public class RowDetailDialog extends JDi
};
// Do update on Enter
Action enterAction = new AbstractAction("ENTER") {
- /**
- *
- */
+
private static final long serialVersionUID = -1529005452976176873L;
@Override
@@ -198,22 +194,22 @@ public class RowDetailDialog extends JDi
@Override
public void actionPerformed(ActionEvent e) {
String action = e.getActionCommand();
- if(action.equals(CLOSE)) {
+ if (action.equals(CLOSE)) {
this.setVisible(false);
}
- else if(action.equals(NEXT)) {
+ else if (action.equals(NEXT)) {
selectedRow++;
previousButton.setEnabled(true);
nextButton.setEnabled(selectedRow < tableModel.getRowCount()-1);
setValues(selectedRow);
}
- else if(action.equals(PREVIOUS)) {
+ else if (action.equals(PREVIOUS)) {
selectedRow--;
nextButton.setEnabled(true);
previousButton.setEnabled(selectedRow > 0);
setValues(selectedRow);
}
- else if(action.equals(UPDATE)) {
+ else if (action.equals(UPDATE)) {
doUpdate(e);
}
}
@@ -265,5 +261,5 @@ public class RowDetailDialog extends JDi
public void changedUpdate(DocumentEvent e) {
changeLabelButton();
}
-
+
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestFragmentControllerGui.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestFragmentControllerGui.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestFragmentControllerGui.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestFragmentControllerGui.java Sat Jul 4 18:04:12 2015
@@ -46,6 +46,7 @@ public class TestFragmentControllerGui e
@Override
public TestElement createTestElement() {
TestFragmentController controller = new TestFragmentController();
+ setEnabled(false);
modifyTestElement(controller);
return controller;
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestPlanGui.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestPlanGui.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestPlanGui.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/control/gui/TestPlanGui.java Sat Jul 4 18:04:12 2015
@@ -158,14 +158,14 @@ public class TestPlanGui extends Abstrac
super.configure(el);
if (el instanceof TestPlan) {
TestPlan tp = (TestPlan) el;
- functionalMode.setSelected(tp.isFunctionalMode());
- serializedMode.setSelected(tp.isSerialized());
- tearDownOnShutdown.setSelected(tp.isTearDownOnShutdown());
- final JMeterProperty udv = tp.getUserDefinedVariablesAsProperty();
- if (udv != null) {
- argsPanel.configure((Arguments) udv.getObjectValue());
- }
- browseJar.setFiles(tp.getTestPlanClasspathArray());
+ functionalMode.setSelected(tp.isFunctionalMode());
+ serializedMode.setSelected(tp.isSerialized());
+ tearDownOnShutdown.setSelected(tp.isTearDownOnShutdown());
+ final JMeterProperty udv = tp.getUserDefinedVariablesAsProperty();
+ if (udv != null) {
+ argsPanel.configure((Arguments) udv.getObjectValue());
+ }
+ browseJar.setFiles(tp.getTestPlanClasspathArray());
}
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java Sat Jul 4 18:04:12 2015
@@ -107,7 +107,7 @@ public class ClientJMeterEngine implemen
public void runTest() throws JMeterEngineException {
log.info("running clientengine run method");
- // See https://issues.apache.org/bugzilla/show_bug.cgi?id=55510
+ // See https://bz.apache.org/bugzilla/show_bug.cgi?id=55510
JMeterContextService.clearTotalThreads();
HashTree testTree = test;
@@ -123,7 +123,7 @@ public class ClientJMeterEngine implemen
/*
* Add fix for Deadlocks, see:
*
- * See https://issues.apache.org/bugzilla/show_bug.cgi?id=48350
+ * See https://bz.apache.org/bugzilla/show_bug.cgi?id=48350
*/
File baseDirRelative = FileServer.getFileServer().getBaseDirRelative();
String scriptName = FileServer.getFileServer().getScriptName();
@@ -197,4 +197,8 @@ public class ClientJMeterEngine implemen
public boolean isActive() {
return true;
}
+
+ public String getHost() {
+ return host;
+ }
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java Sat Jul 4 18:04:12 2015
@@ -91,6 +91,7 @@ public final class RemoteJMeterEngineImp
if( host==null ) {
localHost = InetAddress.getLocalHost();
} else {
+ log.info("Resolving by name the value of System property 'java.rmi.server.hostname':"+host);
localHost = InetAddress.getByName(host);
}
} catch (UnknownHostException e1) {
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java Sat Jul 4 18:04:12 2015
@@ -446,7 +446,7 @@ public class StandardJMeterEngine implem
}
notifyTestListenersOfEnd(testListeners);
-
+ JMeterContextService.endTest();
if (JMeter.isNonGUI() && SYSTEM_EXIT_FORCED) {
log.info("Forced JVM shutdown requested at end of test");
System.exit(0);
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/functions/gui/FunctionHelper.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/functions/gui/FunctionHelper.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/functions/gui/FunctionHelper.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/functions/gui/FunctionHelper.java Sat Jul 4 18:04:12 2015
@@ -35,7 +35,6 @@ import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRootPane;
-import javax.swing.KeyStroke;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -69,31 +68,28 @@ public class FunctionHelper extends JDia
init();
JMeterUtils.addLocaleChangeListener(this);
}
-
+
/**
* Allow Dialog to be closed by ESC key
*/
@Override
protected JRootPane createRootPane() {
JRootPane rootPane = new JRootPane();
- KeyStroke stroke = KeyStrokes.ESC;
javax.swing.Action escapeAction = new AbstractAction("ESCAPE") {
- /**
- *
- */
+
private static final long serialVersionUID = -4036804004190858925L;
@Override
- public void actionPerformed(ActionEvent actionEvent) {
+ public void actionPerformed(ActionEvent actionEvent) {
setVisible(false);
}
};
rootPane.getActionMap().put(escapeAction.getValue(Action.NAME), escapeAction);
InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
- inputMap.put(stroke, escapeAction.getValue(Action.NAME));
+ inputMap.put(KeyStrokes.ESC, escapeAction.getValue(Action.NAME));
return rootPane;
}
-
+
private void init() {
parameterPanel = new ArgumentsPanel(JMeterUtils.getResString("function_params"), false); //$NON-NLS-1$
initializeFunctionList();
@@ -112,7 +108,7 @@ public class FunctionHelper extends JDia
generateButton.addActionListener(this);
resultsPanel.add(generateButton);
this.getContentPane().add(resultsPanel, BorderLayout.SOUTH);
-
+
this.pack();
ComponentUtil.centerComponentInWindow(this);
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/GuiPackage.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/GuiPackage.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/GuiPackage.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/GuiPackage.java Sat Jul 4 18:04:12 2015
@@ -351,13 +351,7 @@ public final class GuiPackage implements
"Missing jar? See log file." ,
JOptionPane.ERROR_MESSAGE);
throw new RuntimeException(e.toString(), e); // Probably a missing jar
- } catch (ClassNotFoundException e) {
- log.error("Problem retrieving gui for " + objClass, e);
- throw new RuntimeException(e.toString(), e); // Programming error: bail out.
- } catch (InstantiationException e) {
- log.error("Problem retrieving gui for " + objClass, e);
- throw new RuntimeException(e.toString(), e); // Programming error: bail out.
- } catch (IllegalAccessException e) {
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
log.error("Problem retrieving gui for " + objClass, e);
throw new RuntimeException(e.toString(), e); // Programming error: bail out.
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/LoggerPanel.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/LoggerPanel.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/LoggerPanel.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/LoggerPanel.java Sat Jul 4 18:04:12 2015
@@ -23,6 +23,7 @@ import java.awt.Insets;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
@@ -42,7 +43,7 @@ public class LoggerPanel extends JPanel
private static final long serialVersionUID = 6911128494402594429L;
- private JSyntaxTextArea textArea;
+ private final JTextArea textArea;
private final PatternFormatter format;
@@ -50,8 +51,6 @@ public class LoggerPanel extends JPanel
private static final int LOGGER_PANEL_MAX_LENGTH =
JMeterUtils.getPropDefault("jmeter.loggerpanel.maxlength", 80000); // $NON-NLS-1$
- private static final int LOGGER_PANEL_MAX_LINES_COUNT = LOGGER_PANEL_MAX_LENGTH / 80; // $NON-NLS-1$
-
// Make panel handle event even if closed
private static final boolean LOGGER_PANEL_RECEIVE_WHEN_CLOSED =
JMeterUtils.getPropDefault("jmeter.loggerpanel.enable_when_closed", true); // $NON-NLS-1$
@@ -60,27 +59,37 @@ public class LoggerPanel extends JPanel
* Pane for display JMeter log file
*/
public LoggerPanel() {
- init();
+ textArea = init();
format = new PatternFormatter(LoggingManager.DEFAULT_PATTERN + "\n"); // $NON-NLS-1$
}
- private void init() {
+ private JTextArea init() {
this.setLayout(new BorderLayout());
+ final JScrollPane areaScrollPane;
+ final JTextArea jTextArea;
- // TEXTAREA
- textArea = new JSyntaxTextArea(15, 80, true);
- textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE);
- textArea.setCodeFoldingEnabled(false);
- textArea.setAntiAliasingEnabled(false);
- textArea.setEditable(false);
- textArea.setLineWrap(false);
- textArea.setLanguage("text");
- textArea.setMargin(new Insets(2, 2, 2, 2)); // space between borders and text
- JScrollPane areaScrollPane = new JTextScrollPane(textArea);
+ if (JMeterUtils.getPropDefault("loggerpanel.usejsyntaxtext", true)) {
+ // JSyntax Text Area
+ JSyntaxTextArea jSyntaxTextArea = new JSyntaxTextArea(15, 80, true);
+ jSyntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE);
+ jSyntaxTextArea.setCodeFoldingEnabled(false);
+ jSyntaxTextArea.setAntiAliasingEnabled(false);
+ jSyntaxTextArea.setEditable(false);
+ jSyntaxTextArea.setLineWrap(false);
+ jSyntaxTextArea.setLanguage("text");
+ jSyntaxTextArea.setMargin(new Insets(2, 2, 2, 2)); // space between borders and text
+ areaScrollPane = new JTextScrollPane(jSyntaxTextArea);
+ jTextArea = jSyntaxTextArea;
+ } else {
+ // Plain text area
+ jTextArea = new JTextArea(15, 80);
+ areaScrollPane = new JScrollPane(jTextArea);
+ }
areaScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
areaScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- this.add(areaScrollPane, BorderLayout.CENTER);
+ this.add(areaScrollPane, BorderLayout.CENTER);
+ return jTextArea;
}
/* (non-Javadoc)
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/MainFrame.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/MainFrame.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/MainFrame.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/MainFrame.java Sat Jul 4 18:04:12 2015
@@ -47,11 +47,14 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DropMode;
import javax.swing.ImageIcon;
+import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
@@ -63,6 +66,7 @@ import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
+import javax.swing.KeyStroke;
import javax.swing.MenuElement;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -74,15 +78,19 @@ import javax.swing.tree.TreePath;
import org.apache.commons.lang3.StringUtils;
import org.apache.jmeter.gui.action.ActionNames;
import org.apache.jmeter.gui.action.ActionRouter;
+import org.apache.jmeter.gui.action.KeyStrokes;
import org.apache.jmeter.gui.action.LoadDraggedFile;
import org.apache.jmeter.gui.tree.JMeterCellRenderer;
import org.apache.jmeter.gui.tree.JMeterTreeListener;
+import org.apache.jmeter.gui.tree.JMeterTreeNode;
import org.apache.jmeter.gui.tree.JMeterTreeTransferHandler;
import org.apache.jmeter.gui.util.EscapeDialog;
import org.apache.jmeter.gui.util.JMeterMenuBar;
import org.apache.jmeter.gui.util.JMeterToolBar;
+import org.apache.jmeter.gui.util.MenuFactory;
import org.apache.jmeter.samplers.Clearable;
import org.apache.jmeter.samplers.Remoteable;
+import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestStateListener;
import org.apache.jmeter.threads.JMeterContextService;
@@ -196,6 +204,7 @@ public class MainFrame extends JFrame im
totalThreads = new JLabel("0"); // $NON-NLS-1$
totalThreads.setToolTipText(JMeterUtils.getResString("total_threads_tooltip")); // $NON-NLS-1$
+
activeThreads = new JLabel("0"); // $NON-NLS-1$
activeThreads.setToolTipText(JMeterUtils.getResString("active_threads_tooltip")); // $NON-NLS-1$
@@ -206,9 +215,9 @@ public class MainFrame extends JFrame im
warnIndicator.setContentAreaFilled(false);
warnIndicator.setBorderPainted(false);
warnIndicator.setCursor(new Cursor(Cursor.HAND_CURSOR));
-
warnIndicator.setToolTipText(JMeterUtils.getResString("error_indicator_tooltip")); // $NON-NLS-1$
warnIndicator.addActionListener(this);
+
errorsOrFatalsLabel = new JLabel("0"); // $NON-NLS-1$
errorsOrFatalsLabel.setToolTipText(JMeterUtils.getResString("error_indicator_tooltip")); // $NON-NLS-1$
@@ -320,8 +329,8 @@ public class MainFrame extends JFrame im
if (menuBar.isSelected()) {
MenuElement[] menuElement = menuBar.getSubElements();
if (menuElement != null) {
- for (int i = 0; i < menuElement.length; i++) {
- JMenu menu = (JMenu) menuElement[i];
+ for (MenuElement element : menuElement) {
+ JMenu menu = (JMenu) element;
if (menu.isSelected()) {
menu.setPopupMenuVisible(false);
menu.setSelected(false);
@@ -345,7 +354,7 @@ public class MainFrame extends JFrame im
}
stoppingMessage = new EscapeDialog(this, JMeterUtils.getResString("stopping_test_title"), true); //$NON-NLS-1$
String label = JMeterUtils.getResString("stopping_test"); //$NON-NLS-1
- if(!StringUtils.isEmpty(host)) {
+ if (!StringUtils.isEmpty(host)) {
label = label + JMeterUtils.getResString("stopping_test_host")+ ": " + host;
}
JLabel stopLabel = new JLabel(label); //$NON-NLS-1$$NON-NLS-2$
@@ -356,7 +365,7 @@ public class MainFrame extends JFrame im
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
- if (stoppingMessage != null) {// TODO - how can this be null?
+ if (stoppingMessage != null) { // TODO - how can this be null?
stoppingMessage.setVisible(true);
}
}
@@ -409,7 +418,7 @@ public class MainFrame extends JFrame im
activeThreads.setText("0"); // $NON-NLS-1$
totalThreads.setText("0"); // $NON-NLS-1$
menuBar.setRunning(true, host);
- if(LOCAL.equals(host)) {
+ if (LOCAL.equals(host)) {
toolbar.setLocalTestStarted(true);
} else {
toolbar.setRemoteTestStarted(true);
@@ -442,7 +451,7 @@ public class MainFrame extends JFrame im
JMeterContextService.endTest();
}
menuBar.setRunning(false, host);
- if(LOCAL.equals(host)) {
+ if (LOCAL.equals(host)) {
toolbar.setLocalTestStarted(false);
} else {
toolbar.setRemoteTestStarted(false);
@@ -640,15 +649,63 @@ public class MainFrame extends JFrame im
treevar.addTreeSelectionListener(treeListener);
treevar.addMouseListener(treeListener);
treevar.addKeyListener(treeListener);
-
+
// enable drag&drop, install a custom transfer handler
treevar.setDragEnabled(true);
treevar.setDropMode(DropMode.ON_OR_INSERT);
treevar.setTransferHandler(new JMeterTreeTransferHandler());
+ addQuickComponentHotkeys(treevar);
+
return treevar;
}
+ private void addQuickComponentHotkeys(JTree treevar) {
+ Action quickComponent = new AbstractAction("Quick Component") {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void actionPerformed(ActionEvent actionEvent) {
+ String propname = "gui.quick_" + actionEvent.getActionCommand();
+ String comp = JMeterUtils.getProperty(propname);
+ log.debug("Event " + propname + ": " + comp);
+
+ if (comp == null) {
+ log.warn("No component set through property: " + propname);
+ return;
+ }
+
+ GuiPackage guiPackage = GuiPackage.getInstance();
+ try {
+ guiPackage.updateCurrentNode();
+ TestElement testElement = guiPackage.createTestElement(SaveService.aliasToClass(comp));
+ JMeterTreeNode parentNode = guiPackage.getCurrentNode();
+ while (!MenuFactory.canAddTo(parentNode, testElement)) {
+ parentNode = (JMeterTreeNode) parentNode.getParent();
+ }
+ if (parentNode.getParent() == null) {
+ log.debug("Cannot add element on very top level");
+ } else {
+ JMeterTreeNode node = guiPackage.getTreeModel().addComponent(testElement, parentNode);
+ guiPackage.getMainFrame().getTree().setSelectionPath(new TreePath(node.getPath()));
+ }
+ } catch (Exception err) {
+ log.warn("Failed to perform quick component add: " + comp, err); // $NON-NLS-1$
+ }
+ }
+ };
+
+ InputMap inputMap = treevar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+ KeyStroke[] keyStrokes = new KeyStroke[]{KeyStrokes.CTRL_0,
+ KeyStrokes.CTRL_1, KeyStrokes.CTRL_2, KeyStrokes.CTRL_3,
+ KeyStrokes.CTRL_4, KeyStrokes.CTRL_5, KeyStrokes.CTRL_6,
+ KeyStrokes.CTRL_7, KeyStrokes.CTRL_8, KeyStrokes.CTRL_9,};
+ for (int n = 0; n < keyStrokes.length; n++) {
+ treevar.getActionMap().put(ActionNames.QUICK_COMPONENT + String.valueOf(n), quickComponent);
+ inputMap.put(keyStrokes[n], ActionNames.QUICK_COMPONENT + String.valueOf(n));
+ }
+ }
+
/**
* Create the tree cell renderer used to draw the nodes in the test tree.
*
@@ -701,9 +758,9 @@ public class MainFrame extends JFrame im
try {
Transferable tr = dtde.getTransferable();
DataFlavor[] flavors = tr.getTransferDataFlavors();
- for (int i = 0; i < flavors.length; i++) {
+ for (DataFlavor flavor : flavors) {
// Check for file lists specifically
- if (flavors[i].isFlavorJavaFileListType()) {
+ if (flavor.isFlavorJavaFileListType()) {
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
try {
openJmxFilesFromDragAndDrop(tr);
@@ -713,9 +770,7 @@ public class MainFrame extends JFrame im
return;
}
}
- } catch (UnsupportedFlavorException e) {
- log.warn("Dnd failed" , e);
- } catch (IOException e) {
+ } catch (UnsupportedFlavorException | IOException e) {
log.warn("Dnd failed" , e);
}
@@ -725,18 +780,18 @@ public class MainFrame extends JFrame im
@SuppressWarnings("unchecked")
List<File> files = (List<File>)
tr.getTransferData(DataFlavor.javaFileListFlavor);
- if(files.isEmpty()) {
+ if (files.isEmpty()) {
return false;
}
File file = files.get(0);
- if(!file.getName().endsWith(".jmx")) {
+ if (!file.getName().endsWith(".jmx")) {
log.warn("Importing file:" + file.getName()+ "from DnD failed because file extension does not end with .jmx");
return false;
}
ActionEvent fakeEvent = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, ActionNames.OPEN);
LoadDraggedFile.loadProject(fakeEvent, file);
-
+
return true;
}
@@ -781,7 +836,7 @@ public class MainFrame extends JFrame im
@Override
public void clearData() {
logPanel.clear();
- if(DISPLAY_ERROR_FATAL_COUNTER) {
+ if (DISPLAY_ERROR_FATAL_COUNTER) {
errorsAndFatalsCounterLogTarget.clearData();
}
}
@@ -791,7 +846,7 @@ public class MainFrame extends JFrame im
*/
@Override
public void actionPerformed(ActionEvent event) {
- if(event.getSource()==warnIndicator) {
+ if (event.getSource() == warnIndicator) {
ActionRouter.getInstance().doActionNow(new ActionEvent(event.getSource(), event.getID(), ActionNames.LOGGER_PANEL_ENABLE_DISABLE));
}
}
@@ -806,10 +861,8 @@ public class MainFrame extends JFrame im
final Field awtAppClassName = xtoolkit.getDeclaredField("awtAppClassName"); // $NON-NLS-1$
awtAppClassName.setAccessible(true);
awtAppClassName.set(null, DEFAULT_APP_NAME);
- } catch (NoSuchFieldException nsfe) {
+ } catch (NoSuchFieldException | IllegalAccessException nsfe) {
log.warn("Error awt title: " + nsfe); // $NON-NLS-1$
- } catch (IllegalAccessException iae) {
- log.warn("Error awt title: " + iae); // $NON-NLS-1$
}
}
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/SavePropertyDialog.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/SavePropertyDialog.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/SavePropertyDialog.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/SavePropertyDialog.java Sat Jul 4 18:04:12 2015
@@ -114,9 +114,7 @@ public class SavePropertyDialog extends
if (!functors.containsKey(actionCommand)) {
functors.put(actionCommand, new Functor(actionCommand));
}
- } catch (IllegalAccessException e) {
- log.warn("Problem creating save config dialog", e);
- } catch (InvocationTargetException e) {
+ } catch (IllegalAccessException | InvocationTargetException e) {
log.warn("Problem creating save config dialog", e);
}
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/ActionNames.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/ActionNames.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/ActionNames.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/ActionNames.java Sat Jul 4 18:04:12 2015
@@ -97,6 +97,7 @@ public final class ActionNames {
public static final String MOVE_RIGHT = "move_right"; // $NON-NLS-1$
public static final String UNDO = "undo"; // $NON-NLS-1$
public static final String REDO = "redo"; // $NON-NLS-1$
+ public static final String QUICK_COMPONENT = "quick_component"; // $NON-NLS-1$
// Prevent instantiation
private ActionNames(){
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/AddToTree.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/AddToTree.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/AddToTree.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/AddToTree.java Sat Jul 4 18:04:12 2015
@@ -45,7 +45,6 @@ public class AddToTree implements Comman
commandSet = Collections.unmodifiableSet(commands);
}
-
public AddToTree() {
}
@@ -76,7 +75,7 @@ public class AddToTree implements Comman
log.error("", err); // $NON-NLS-1$
String msg = err.getMessage();
if (msg == null) {
- msg=err.toString();
+ msg = err.toString();
}
JMeterUtils.reportErrorToUser(msg);
}
@@ -84,7 +83,7 @@ public class AddToTree implements Comman
log.error("", err); // $NON-NLS-1$
String msg = err.getMessage();
if (msg == null) {
- msg=err.toString();
+ msg = err.toString();
}
JMeterUtils.reportErrorToUser(msg);
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/KeyStrokes.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/KeyStrokes.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/KeyStrokes.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/KeyStrokes.java Sat Jul 4 18:04:12 2015
@@ -74,6 +74,18 @@ public final class KeyStrokes {
public static final KeyStroke ALT_DOWN_ARROW = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.ALT_DOWN_MASK);
public static final KeyStroke ALT_LEFT_ARROW = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.ALT_DOWN_MASK);
public static final KeyStroke ALT_RIGHT_ARROW = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.ALT_DOWN_MASK);
+
+ // component hotkeys
+ public static final KeyStroke CTRL_0 = KeyStroke.getKeyStroke(KeyEvent.VK_0, CONTROL_MASK);
+ public static final KeyStroke CTRL_1 = KeyStroke.getKeyStroke(KeyEvent.VK_1, CONTROL_MASK);
+ public static final KeyStroke CTRL_2 = KeyStroke.getKeyStroke(KeyEvent.VK_2, CONTROL_MASK);
+ public static final KeyStroke CTRL_3 = KeyStroke.getKeyStroke(KeyEvent.VK_3, CONTROL_MASK);
+ public static final KeyStroke CTRL_4 = KeyStroke.getKeyStroke(KeyEvent.VK_4, CONTROL_MASK);
+ public static final KeyStroke CTRL_5 = KeyStroke.getKeyStroke(KeyEvent.VK_5, CONTROL_MASK);
+ public static final KeyStroke CTRL_6 = KeyStroke.getKeyStroke(KeyEvent.VK_6, CONTROL_MASK);
+ public static final KeyStroke CTRL_7 = KeyStroke.getKeyStroke(KeyEvent.VK_7, CONTROL_MASK);
+ public static final KeyStroke CTRL_8 = KeyStroke.getKeyStroke(KeyEvent.VK_8, CONTROL_MASK);
+ public static final KeyStroke CTRL_9 = KeyStroke.getKeyStroke(KeyEvent.VK_9, CONTROL_MASK);
/**
* Check if an event matches the KeyStroke definition.
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/Load.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/Load.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/Load.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/Load.java Sat Jul 4 18:04:12 2015
@@ -20,9 +20,7 @@ package org.apache.jmeter.gui.action;
import java.awt.event.ActionEvent;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;
@@ -44,7 +42,6 @@ import org.apache.jmeter.testelement.Wor
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.logging.LoggingManager;
-import org.apache.jorphan.util.JOrphanUtils;
import org.apache.log.Logger;
import com.thoughtworks.xstream.converters.ConversionException;
@@ -81,10 +78,10 @@ public class Load implements Command {
return;
}
final File selectedFile = chooser.getSelectedFile();
- if(selectedFile != null) {
+ if (selectedFile != null) {
final boolean merging = e.getActionCommand().equals(ActionNames.MERGE);
// We must ask the user if it is ok to close current project
- if(!merging) { // i.e. it is OPEN
+ if (!merging) { // i.e. it is OPEN
if (!Close.performAction(e)) {
return;
}
@@ -119,27 +116,26 @@ public class Load implements Command {
final GuiPackage guiPackage = GuiPackage.getInstance();
if (f != null) {
- InputStream reader = null;
try {
- if (merging) {
- log.info("Merging file: " + f);
- } else {
- log.info("Loading file: " + f);
- // TODO should this be done even if not a full test plan?
- // and what if load fails?
- if(setDetails) {
- FileServer.getFileServer().setBaseForScript(f);
- }
- }
- reader = new FileInputStream(f);
- final HashTree tree = SaveService.loadTree(reader);
- final boolean isTestPlan = insertLoadedTree(e.getID(), tree, merging);
-
- // don't change name if merging
- if (!merging && isTestPlan && setDetails) {
- // TODO should setBaseForScript be called here rather than above?
- guiPackage.setTestPlanFile(f.getAbsolutePath());
+ if (merging) {
+ log.info("Merging file: " + f);
+ } else {
+ log.info("Loading file: " + f);
+ // TODO should this be done even if not a full test plan?
+ // and what if load fails?
+ if (setDetails) {
+ FileServer.getFileServer().setBaseForScript(f);
}
+ }
+ final HashTree tree = SaveService.loadTree(f);
+ final boolean isTestPlan = insertLoadedTree(e.getID(), tree, merging);
+
+ // don't change name if merging
+ if (!merging && isTestPlan && setDetails) {
+ // TODO should setBaseForScript be called here rather than
+ // above?
+ guiPackage.setTestPlanFile(f.getAbsolutePath());
+ }
} catch (NoClassDefFoundError ex) {// Allow for missing optional jars
reportError("Missing jar file", ex, true);
} catch (ConversionException ex) {
@@ -149,8 +145,6 @@ public class Load implements Command {
reportError("Error reading file: ", ex, false);
} catch (Exception ex) {
reportError("Unexpected error", ex, true);
- } finally {
- JOrphanUtils.closeQuietly(reader);
}
FileDialoger.setLastJFCDirectory(f.getParentFile().getAbsolutePath());
guiPackage.updateCurrentGui();
@@ -204,7 +198,7 @@ public class Load implements Command {
// Send different event wether we are merging a test plan into another test plan,
// or loading a testplan from scratch
ActionEvent actionEvent =
- new ActionEvent(subTree.get(subTree.getArray()[subTree.size() - 1]), id,
+ new ActionEvent(subTree.get(subTree.getArray()[subTree.size() - 1]), id,
merging ? ActionNames.SUB_TREE_MERGED : ActionNames.SUB_TREE_LOADED);
ActionRouter.getInstance().actionPerformed(actionEvent);
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/LookAndFeelCommand.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/LookAndFeelCommand.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/LookAndFeelCommand.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/LookAndFeelCommand.java Sat Jul 4 18:04:12 2015
@@ -139,13 +139,7 @@ public class LookAndFeelCommand implemen
}
}
PREFS.put(USER_PREFS_KEY, className);
- } catch (javax.swing.UnsupportedLookAndFeelException e) {
- JMeterUtils.reportErrorToUser("Look and Feel unavailable:" + e.toString());
- } catch (InstantiationException e) {
- JMeterUtils.reportErrorToUser("Look and Feel unavailable:" + e.toString());
- } catch (ClassNotFoundException e) {
- JMeterUtils.reportErrorToUser("Look and Feel unavailable:" + e.toString());
- } catch (IllegalAccessException e) {
+ } catch (javax.swing.UnsupportedLookAndFeelException | InstantiationException | ClassNotFoundException | IllegalAccessException e) {
JMeterUtils.reportErrorToUser("Look and Feel unavailable:" + e.toString());
}
}
Modified: jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/RemoteStart.java
URL: http://svn.apache.org/viewvc/jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/RemoteStart.java?rev=1689187&r1=1689186&r2=1689187&view=diff
==============================================================================
--- jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/RemoteStart.java (original)
+++ jmeter/branches/HC4/src/core/org/apache/jmeter/gui/action/RemoteStart.java Sat Jul 4 18:04:12 2015
@@ -20,26 +20,21 @@ package org.apache.jmeter.gui.action;
import java.awt.Component;
import java.awt.event.ActionEvent;
-import java.util.HashMap;
+import java.util.Arrays;
import java.util.HashSet;
-import java.util.Map;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Set;
-
+import java.util.StringTokenizer;
import org.apache.jmeter.JMeter;
-import org.apache.jmeter.engine.ClientJMeterEngine;
-import org.apache.jmeter.engine.JMeterEngine;
-import org.apache.jmeter.engine.JMeterEngineException;
+import org.apache.jmeter.engine.DistributedRunner;
import org.apache.jmeter.gui.GuiPackage;
import org.apache.jmeter.threads.RemoteThreadsListenerTestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
-import org.apache.jorphan.logging.LoggingManager;
-import org.apache.log.Logger;
public class RemoteStart extends AbstractAction {
- private static final Logger log = LoggingManager.getLoggerForClass();
-
private static final String LOCAL_HOST = "127.0.0.1"; // $NON-NLS-1$
private static final String REMOTE_HOSTS = "remote_hosts"; // $NON-NLS-1$ jmeter.properties
@@ -59,7 +54,7 @@ public class RemoteStart extends Abstrac
commands.add(ActionNames.REMOTE_EXIT_ALL);
}
- private final Map<String, JMeterEngine> remoteEngines = new HashMap<String, JMeterEngine>();
+ private DistributedRunner distributedRunner = new DistributedRunner();
public RemoteStart() {
}
@@ -72,123 +67,37 @@ public class RemoteStart extends Abstrac
}
String action = e.getActionCommand();
if (action.equals(ActionNames.REMOTE_STOP)) {
- doRemoteStop(name, true);
+ GuiPackage.getInstance().getMainFrame().showStoppingMessage(name);
+ distributedRunner.stop(Arrays.asList(name));
} else if (action.equals(ActionNames.REMOTE_SHUT)) {
- doRemoteStop(name, false);
+ GuiPackage.getInstance().getMainFrame().showStoppingMessage(name);
+ distributedRunner.shutdown(Arrays.asList(name));
} else if (action.equals(ActionNames.REMOTE_START)) {
popupShouldSave(e);
- doRemoteInit(name);
- doRemoteStart(name);
+ distributedRunner.init(Arrays.asList(name), getTestTree());
+ distributedRunner.start(Arrays.asList(name));
} else if (action.equals(ActionNames.REMOTE_START_ALL)) {
popupShouldSave(e);
- String remote_hosts_string = JMeterUtils.getPropDefault(REMOTE_HOSTS, LOCAL_HOST);
- java.util.StringTokenizer st = new java.util.StringTokenizer(remote_hosts_string, REMOTE_HOSTS_SEPARATOR);
- while (st.hasMoreElements()) {
- String el = (String) st.nextElement();
- doRemoteInit(el.trim());
- }
- st = new java.util.StringTokenizer(remote_hosts_string, REMOTE_HOSTS_SEPARATOR);
- while (st.hasMoreElements()) {
- String el = (String) st.nextElement();
- doRemoteStart(el.trim());
- }
+ distributedRunner.init(getRemoteHosts(), getTestTree());
+ distributedRunner.start();
} else if (action.equals(ActionNames.REMOTE_STOP_ALL)) {
- doRemoteStopAll(true);
+ distributedRunner.stop(getRemoteHosts());
} else if (action.equals(ActionNames.REMOTE_SHUT_ALL)) {
- doRemoteStopAll(false);
+ distributedRunner.shutdown(getRemoteHosts());
} else if (action.equals(ActionNames.REMOTE_EXIT)) {
- doRemoteExit(name);
+ distributedRunner.exit(Arrays.asList(name));
} else if (action.equals(ActionNames.REMOTE_EXIT_ALL)) {
- String remote_hosts_string = JMeterUtils.getPropDefault(REMOTE_HOSTS, LOCAL_HOST);
- java.util.StringTokenizer st = new java.util.StringTokenizer(remote_hosts_string, REMOTE_HOSTS_SEPARATOR);
- while (st.hasMoreElements()) {
- String el = (String) st.nextElement();
- doRemoteExit(el.trim());
- }
+ distributedRunner.exit(getRemoteHosts());
}
}
- private void doRemoteStopAll(boolean now) {
+ private List<String> getRemoteHosts() {
String remote_hosts_string = JMeterUtils.getPropDefault(REMOTE_HOSTS, LOCAL_HOST);
- java.util.StringTokenizer st = new java.util.StringTokenizer(remote_hosts_string, REMOTE_HOSTS_SEPARATOR);
- while (st.hasMoreElements()) {
- String el = (String) st.nextElement();
- doRemoteStop(el.trim(), now);
- }
- }
-
- /**
- * Stops a remote testing engine
- *
- * @param name
- * the DNS name or IP address of the remote testing engine
- *
- */
- private void doRemoteStop(String name, boolean now) {
- GuiPackage.getInstance().getMainFrame().showStoppingMessage(name);
- JMeterEngine engine = remoteEngines.get(name);
- // Engine may be null if it has not correctly started
- if(engine != null) {
- engine.stopTest(now);
- }
- }
-
- /**
- * Exits a remote testing engine
- *
- * @param name
- * the DNS name or IP address of the remote testing engine
- *
- */
- private void doRemoteExit(String name) {
- JMeterEngine engine = remoteEngines.get(name);
- if (engine == null) {
- return;
- }
- // GuiPackage.getInstance().getMainFrame().showStoppingMessage(name);
- engine.exit();
- }
-
- /**
- * Starts a remote testing engine
- *
- * @param name
- * the DNS name or IP address of the remote testing engine
- *
- */
- private void doRemoteStart(String name) {
- JMeterEngine engine = remoteEngines.get(name);
- if (engine != null) {
- try {
- engine.runTest();
- } catch (IllegalStateException e) {
- JMeterUtils.reportErrorToUser(e.getMessage(),JMeterUtils.getResString("remote_error_starting")); // $NON-NLS-1$
- } catch (JMeterEngineException e) {
- JMeterUtils.reportErrorToUser(e.getMessage(),JMeterUtils.getResString("remote_error_starting")); // $NON-NLS-1$
- }
- }
- }
-
- /**
- * Initializes remote engines
- */
- private void doRemoteInit(String name) {
- JMeterEngine engine = remoteEngines.get(name);
- if (engine == null) {
- try {
- log.info("Initialising remote engine: "+name);
- engine = new ClientJMeterEngine(name);
- remoteEngines.put(name, engine);
- } catch (Exception ex) {
- log.error("Failed to initialise remote engine", ex);
- JMeterUtils.reportErrorToUser(ex.getMessage(),
- JMeterUtils.getResString("remote_error_init") + ": " + name); // $NON-NLS-1$ $NON-NLS-2$
- return;
- }
- } else {
- engine.reset();
- }
- initEngine(engine);
+ StringTokenizer st = new StringTokenizer(remote_hosts_string, REMOTE_HOSTS_SEPARATOR);
+ List<String> list = new LinkedList<String>();
+ while (st.hasMoreElements())
+ list.add((String) st.nextElement());
+ return list;
}
@Override
@@ -196,19 +105,13 @@ public class RemoteStart extends Abstrac
return commands;
}
- /**
- * Initializes test on engine.
- *
- * @param engine
- * remote engine object
- */
- private void initEngine(JMeterEngine engine) {
+ private HashTree getTestTree() {
GuiPackage gui = GuiPackage.getInstance();
HashTree testTree = gui.getTreeModel().getTestPlan();
JMeter.convertSubTree(testTree);
testTree.add(testTree.getArray()[0], gui.getMainFrame());
// Used for remote notification of threads start/stop,see BUG 54152
testTree.add(testTree.getArray()[0], new RemoteThreadsListenerTestElement());
- engine.configure(testTree);
+ return testTree;
}
}