You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by se...@apache.org on 2011/11/21 18:18:57 UTC
svn commit: r1204607 - in /jmeter/trunk:
src/core/org/apache/jmeter/reporters/ResultSaver.java
src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java
src/core/org/apache/jmeter/resources/messages.properties xdocs/changes.xml
Author: sebb
Date: Mon Nov 21 17:18:57 2011
New Revision: 1204607
URL: http://svn.apache.org/viewvc?rev=1204607&view=rev
Log:
Bug 52214 - Save Responses to a file - improve naming algorithm
- add fixed width numbers
- add optional timestamp
- fix synchronisation
Modified:
jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java
jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java
jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java?rev=1204607&r1=1204606&r2=1204607&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java Mon Nov 21 17:18:57 2011
@@ -23,6 +23,9 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import org.apache.jmeter.samplers.SampleEvent;
import org.apache.jmeter.samplers.SampleListener;
@@ -47,10 +50,22 @@ public class ResultSaver extends Abstrac
private static final long serialVersionUID = 240L;
+ private static final Object LOCK = new Object();
+
// File name sequence number
- //@GuardedBy("this")
+ //@GuardedBy("LOCK")
private static long sequenceNumber = 0;
+ //@GuardedBy("LOCK")
+ private static String timeStamp;
+
+ private static final String TIMESTAMP_FORMAT = "yyyyMMdd-HHmm_"; // $NON-NLS-1$
+
+ //@GuardedBy("LOCK")
+ private static int numberPadLength;
+
+ //+ JMX property names; do not change
+
public static final String FILENAME = "FileSaver.filename"; // $NON-NLS-1$
public static final String VARIABLE_NAME = "FileSaver.variablename"; // $NON-NLS-1$
@@ -63,6 +78,12 @@ public class ResultSaver extends Abstrac
public static final String SKIP_SUFFIX = "FileSaver.skipsuffix"; // $NON-NLS-1$
+ public static final String ADD_TIMESTAMP = "FileSaver.addTimstamp"; // $NON-NLS-1$
+
+ public static final String NUMBER_PAD_LENGTH = "FileSaver.numberPadLen"; // $NON-NLS-1$
+
+ //- JMX property names
+
private synchronized long nextNumber() {
return ++sequenceNumber;
}
@@ -96,10 +117,17 @@ public class ResultSaver extends Abstrac
*/
@Override
public void clear() {
- super.clear();
- synchronized(this){
+ synchronized(LOCK){
sequenceNumber = 0; // TODO is this the right thing to do?
+ if (getAddTimeStamp()) {
+ DateFormat format = new SimpleDateFormat(TIMESTAMP_FORMAT);
+ timeStamp = format.format(new Date());
+ } else {
+ timeStamp = "";
+ }
+ numberPadLength=getNumberPadLen();
}
+ super.clear();
}
/**
@@ -174,8 +202,13 @@ public class ResultSaver extends Abstrac
*/
private String makeFileName(String contentType, boolean skipAutoNumber, boolean skipSuffix) {
StringBuilder sb = new StringBuilder(FileServer.resolveBaseRelativeName(getFilename()));
+ sb.append(timeStamp); // may be the empty string
if (!skipAutoNumber){
- sb.append(nextNumber());
+ String number = Long.toString(nextNumber());
+ for(int i=number.length(); i < numberPadLength; i++) {
+ sb.append('0');
+ }
+ sb.append(number);
}
if (!skipSuffix){
sb.append('.');
@@ -236,6 +269,14 @@ public class ResultSaver extends Abstrac
return getPropertyAsBoolean(SUCCESS_ONLY);
}
+ private boolean getAddTimeStamp() {
+ return getPropertyAsBoolean(ADD_TIMESTAMP);
+ }
+
+ private int getNumberPadLen() {
+ return getPropertyAsInt(NUMBER_PAD_LENGTH, 0);
+ }
+
// Mutable int to keep track of sample count
private static class Counter{
int num;
Modified: jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java?rev=1204607&r1=1204606&r2=1204607&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java Mon Nov 21 17:18:57 2011
@@ -32,6 +32,7 @@ import org.apache.jmeter.testelement.Abs
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.visualizers.gui.AbstractListenerGui;
+import org.apache.jorphan.gui.JLabeledTextField;
/**
* Create a ResultSaver test element, which saves the sample information in set
@@ -54,6 +55,10 @@ public class ResultSaverGui extends Abst
private JCheckBox skipSuffix;
+ private JCheckBox addTimestamp;
+
+ private JLabeledTextField numberPadLength;
+
public ResultSaverGui() {
super();
init();
@@ -78,6 +83,8 @@ public class ResultSaverGui extends Abst
skipAutoNumber.setSelected(el.getPropertyAsBoolean(ResultSaver.SKIP_AUTO_NUMBER));
skipSuffix.setSelected(el.getPropertyAsBoolean(ResultSaver.SKIP_SUFFIX));
variableName.setText(el.getPropertyAsString(ResultSaver.VARIABLE_NAME,""));
+ addTimestamp.setSelected(el.getPropertyAsBoolean(ResultSaver.ADD_TIMESTAMP));
+ numberPadLength.setText(el.getPropertyAsString(ResultSaver.NUMBER_PAD_LENGTH,""));
}
/**
@@ -101,8 +108,10 @@ public class ResultSaverGui extends Abst
te.setProperty(ResultSaver.SKIP_AUTO_NUMBER, skipAutoNumber.isSelected());
te.setProperty(ResultSaver.SKIP_SUFFIX, skipSuffix.isSelected());
te.setProperty(ResultSaver.SUCCESS_ONLY, successOnly.isSelected());
+ te.setProperty(ResultSaver.ADD_TIMESTAMP, addTimestamp.isSelected(), false);
AbstractTestElement at = (AbstractTestElement) te;
at.setProperty(ResultSaver.VARIABLE_NAME, variableName.getText(),""); //$NON-NLS-1$
+ at.setProperty(ResultSaver.NUMBER_PAD_LENGTH, numberPadLength.getText(),""); //$NON-NLS-1$
}
/**
@@ -117,7 +126,9 @@ public class ResultSaverGui extends Abst
filename.setText(""); //$NON-NLS-1$
errorsOnly.setSelected(false);
successOnly.setSelected(false);
+ addTimestamp.setSelected(false);
variableName.setText(""); //$NON-NLS-1$
+ numberPadLength.setText(""); //$NON-NLS-1$
}
private void init() {
@@ -135,6 +146,10 @@ public class ResultSaverGui extends Abst
box.add(skipAutoNumber);
skipSuffix = new JCheckBox(JMeterUtils.getResString("resultsaver_skipsuffix")); // $NON-NLS-1$
box.add(skipSuffix);
+ addTimestamp = new JCheckBox(JMeterUtils.getResString("resultsaver_addtimestamp")); // $NON-NLS-1$
+ box.add(addTimestamp);
+ numberPadLength = new JLabeledTextField(JMeterUtils.getResString("resultsaver_numberpadlen"));// $NON-NLS-1$
+ box.add(numberPadLength);
add(box, BorderLayout.NORTH);
}
@@ -167,7 +182,6 @@ public class ResultSaverGui extends Abst
return filenamePanel;
}
-
// Needed to avoid Class cast error in Clear.java
public void clearData() {
}
Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1204607&r1=1204606&r2=1204607&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Mon Nov 21 17:18:57 2011
@@ -694,7 +694,9 @@ reset_gui=Reset Gui
response_save_as_md5=Save response as MD5 hash?
restart=Restart
resultaction_title=Result Status Action Handler
+resultsaver_addtimestamp=Add timestamp
resultsaver_errors=Save Failed Responses only
+resultsaver_numberpadlen=Minumum Length of sequence number
resultsaver_prefix=Filename prefix\:
resultsaver_skipautonumber=Don't add number to prefix
resultsaver_skipsuffix=Don't add suffix
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1204607&r1=1204606&r2=1204607&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Mon Nov 21 17:18:57 2011
@@ -181,6 +181,7 @@ This behaviour can be changed with prope
<ul>
<li>Bug 52022 - In View Results Tree rather than showing just a message if the results are to big, show as much of the result as are configured</li>
<li>Bug 52201 - Add option to TableVisualiser to display child samples instead of parent </li>
+<li>Bug 52214 - Save Responses to a file - improve naming algorithm</li>
</ul>
<h3>Timers, Assertions, Config, Pre- & Post-Processors</h3>