You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2006/05/01 00:27:38 UTC

svn commit: r398454 - in /jakarta/jmeter/branches/rel-2-1: bin/ src/core/org/apache/jmeter/resources/ src/core/org/apache/jmeter/samplers/ src/core/org/apache/jmeter/save/ src/core/org/apache/jmeter/save/converters/ xdocs/ xdocs/usermanual/

Author: sebb
Date: Sun Apr 30 15:27:31 2006
New Revision: 398454

URL: http://svn.apache.org/viewcvs?rev=398454&view=rev
Log:
Add active thread counts to result files

Modified:
    jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties
    jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
    jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java
    jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java
    jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
    jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java
    jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
    jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml

Modified: jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties (original)
+++ jakarta/jmeter/branches/rel-2-1/bin/jmeter.properties Sun Apr 30 15:27:31 2006
@@ -262,6 +262,7 @@
 #jmeter.save.saveservice.bytes=false
 #jmeter.save.saveservice.url=false
 #jmeter.save.saveservice.filename=false
+#jmeter.save.saveservice.thread_counts=false
 
 # Timestamp format
 # legitimate values: none, ms, or a format suitable for SimpleDateFormat

Modified: jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/resources/messages.properties Sun Apr 30 15:27:31 2006
@@ -590,6 +590,7 @@
 save_samplerdata=Save Sampler Data
 save_subresults=Save Sub Results
 save_success=Save Success
+save_threadcounts=Save Active Thread Counts
 save_threadname=Save Thread Name
 save_time=Save Elapsed Time
 save_timestamp=Save Time Stamp

Modified: jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java Sun Apr 30 15:27:31 2006
@@ -35,6 +35,10 @@
  * - setXyz(boolean)
  * - saveXyz()
  * - update SampleSaveConfigurationConverter to add new field
+ * - update SampleResultConverter and/or HTTPSampleConverter
+ * - update CSV routines in OldSaveService
+ * - update messages.properties to add save_xyz entry
+ * 
  */
 /**
  * Holds details of which sample attributes to save.
@@ -43,12 +47,13 @@
  * For each field XXX
  * - methods have the signature "boolean saveXXX()" 
  * - a corresponding "void setXXX(boolean)" method
+ * - messages.properties contains the key save_XXX
  * 
  * @author mstover
  *
  */
 public class SampleSaveConfiguration implements Cloneable, Serializable {
-	static final long serialVersionUID = 3;
+	static final long serialVersionUID = 4;
 
 	// ---------------------------------------------------------------------
 	// PROPERTY FILE CONSTANTS
@@ -187,6 +192,8 @@
     // <?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report_21.xsl"?>
     private static final String XML_PI               = "jmeter.save.saveservice.xml_pi"; // $NON_NLS-1$
 
+    private static final String SAVE_THREAD_COUNTS = "jmeter.save.saveservice.thread_counts"; // $NON_NLS-1$
+
     // N.B. Remember to update the clone method when adding new variables.
     
 	// Initialise values from properties
@@ -200,6 +207,8 @@
 
 	private boolean url = _url, bytes = _bytes , fileName = _fileName;
 	
+    private boolean threadCounts = _threadCounts;
+    
 	private int assertionsResultsToSave = _assertionsResultsToSave;
 
 	private String delimiter = _delimiter;
@@ -241,6 +250,8 @@
 	
 	private static final boolean _fileName;
 
+    private static final boolean _threadCounts;
+    
 	private static final SimpleDateFormat _formatter;
 
 	/**
@@ -326,6 +337,7 @@
 			_xml = false;
 		}
 
+        _threadCounts=TRUE.equalsIgnoreCase(props.getProperty(SAVE_THREAD_COUNTS, FALSE));
 	}
 
 	private static final SampleSaveConfiguration _static = new SampleSaveConfiguration();
@@ -374,6 +386,7 @@
         s.url = url;
         s.bytes = bytes;
         s.fileName = fileName;
+        s.threadCounts = threadCounts;
 		return s;
 	}
 
@@ -565,6 +578,14 @@
 	public void setAssertionResultsFailureMessage(boolean b) {
 		saveAssertionResultsFailureMessage = b;
 	}
+
+    public boolean saveThreadCounts() {
+        return threadCounts;
+    }
+
+    public void setThreadCounts(boolean save) {
+        this.threadCounts = save;
+    }
 
 	///////////////// End of standard field accessors /////////////////////
 	

Modified: jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/OldSaveService.java Sun Apr 30 15:27:31 2006
@@ -46,6 +46,7 @@
 import org.apache.jmeter.testelement.property.MapProperty;
 import org.apache.jmeter.testelement.property.StringProperty;
 import org.apache.jmeter.testelement.property.TestElementProperty;
+import org.apache.jmeter.threads.JMeterContextService;
 import org.apache.jmeter.util.NameUpdater;
 import org.apache.jorphan.collections.HashTree;
 import org.apache.jorphan.collections.ListedHashTree;
@@ -93,6 +94,8 @@
 
     private static final String CSV_TIME = "elapsed"; // $NON-NLS-1$
     private static final String CSV_BYTES= "bytes"; // $NON-NLS-1$
+    private static final String CSV_THREAD_COUNT1 = "grpThreads"; // $NON-NLS-1$
+    private static final String CSV_THREAD_COUNT2 = "allThreads"; // $NON-NLS-1$
     private static final String CSV_URL = "URL"; // $NON-NLS-1$
     private static final String CSV_FILENAME = "Filename"; // $NON-NLS-1$
     
@@ -107,6 +110,11 @@
 	private OldSaveService() {
 	}
 
+    //////////////////////////////////////////////////////////////////////////////
+    //                  Start of CSV methods
+    
+    // TODO - move to separate file? If so, remember that some of the
+    
 	/**
 	 * Make a SampleResult given a delimited string.
 	 * 
@@ -247,6 +255,13 @@
             text.append(delim);
         }
 
+        if (saveConfig.saveThreadCounts()) {
+            text.append(CSV_THREAD_COUNT1);
+            text.append(delim);
+            text.append(CSV_THREAD_COUNT2);
+            text.append(delim);
+        }
+
         if (saveConfig.saveUrl()) {
             text.append(CSV_URL);
             text.append(delim);
@@ -270,21 +285,7 @@
 		return resultString;
 	}
 
-	public static void saveSubTree(HashTree subTree, OutputStream writer) throws IOException {
-		Configuration config = (Configuration) getConfigsFromTree(subTree).get(0);
-		DefaultConfigurationSerializer saver = new DefaultConfigurationSerializer();
-
-		saver.setIndent(true);
-		try {
-			saver.serialize(writer, config);
-		} catch (SAXException e) {
-			throw new IOException("SAX implementation problem");
-		} catch (ConfigurationException e) {
-			throw new IOException("Problem using Avalon Configuration tools");
-		}
-	}
-    
-    /**
+	/**
      * Method will save aggregate statistics as CSV. For now I put it here.
      * Not sure if it should go in the newer SaveService instead of here.
      * if we ever decide to get rid of this class, we'll need to move this
@@ -307,7 +308,145 @@
         }
     }
 
-	public static SampleResult getSampleResult(Configuration config) {
+    /**
+     * Convert a result into a string, where the fields of the result are
+     * separated by the default delimiter.
+     * 
+     * @param sample
+     *            the test result to be converted
+     * @return the separated value representation of the result
+     */
+    public static String resultToDelimitedString(SampleResult sample) {
+    	return resultToDelimitedString(sample, sample.getSaveConfig().getDelimiter());
+    }
+
+    /**
+     * Convert a result into a string, where the fields of the result are
+     * separated by a specified String.
+     * 
+     * @param sample
+     *            the test result to be converted
+     * @param delimiter
+     *            the separation string
+     * @return the separated value representation of the result
+     */
+    public static String resultToDelimitedString(SampleResult sample, String delimiter) {
+    	StringBuffer text = new StringBuffer();
+    	SampleSaveConfiguration saveConfig = sample.getSaveConfig();
+    
+    	if (saveConfig.saveTimestamp()) {
+    		if (saveConfig.printMilliseconds()){
+    			text.append(sample.getTimeStamp());
+    			text.append(delimiter);
+    		} else if (saveConfig.formatter() != null) {
+    			String stamp = saveConfig.formatter().format(new Date(sample.getTimeStamp()));
+    			text.append(stamp);
+    			text.append(delimiter);
+    		}
+    	}
+    
+    	if (saveConfig.saveTime()) {
+    		text.append(sample.getTime());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveLabel()) {
+    		text.append(sample.getSampleLabel());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveCode()) {
+    		text.append(sample.getResponseCode());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveMessage()) {
+    		text.append(sample.getResponseMessage());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveThreadName()) {
+    		text.append(sample.getThreadName());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveDataType()) {
+    		text.append(sample.getDataType());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveSuccess()) {
+    		text.append(sample.isSuccessful());
+    		text.append(delimiter);
+    	}
+    
+    	if (saveConfig.saveAssertionResultsFailureMessage()) {
+    		String message = null;
+    		AssertionResult[] results = sample.getAssertionResults();
+    
+    		if ((results != null) && (results.length > 0)) {
+    			message = results[0].getFailureMessage();
+    		}
+    
+    		if (message != null) {
+    			text.append(message);
+    		}
+    		text.append(delimiter);
+    	}
+    
+        if (saveConfig.saveBytes()) {
+            text.append(sample.getBytes());
+            text.append(delimiter);
+        }
+    
+        if (saveConfig.saveThreadCounts()) {
+            text.append(JMeterContextService.getContext().getThreadGroup().getNumberOfThreads());
+            text.append(delimiter);
+            text.append(JMeterContextService.getNumberOfThreads());
+            text.append(delimiter);
+        }
+        if (saveConfig.saveUrl()) {
+            text.append(sample.getURL());
+            text.append(delimiter);
+        }
+    
+        if (saveConfig.saveFileName()) {
+            text.append(sample.getResultFileName());
+            text.append(delimiter);
+        }
+    
+    	String resultString = null;
+    	int size = text.length();
+    	int delSize = delimiter.length();
+    
+    	// Strip off the trailing delimiter
+    	if (size >= delSize) {
+    		resultString = text.substring(0, size - delSize);
+    	} else {
+    		resultString = text.toString();
+    	}
+    	return resultString;
+    }
+
+    //              End of CSV methods
+    //////////////////////////////////////////////////////////////////////////////////////////
+    //              Start of Avalon methods
+    
+    public static void saveSubTree(HashTree subTree, OutputStream writer) throws IOException {
+		Configuration config = (Configuration) getConfigsFromTree(subTree).get(0);
+		DefaultConfigurationSerializer saver = new DefaultConfigurationSerializer();
+
+		saver.setIndent(true);
+		try {
+			saver.serialize(writer, config);
+		} catch (SAXException e) {
+			throw new IOException("SAX implementation problem");
+		} catch (ConfigurationException e) {
+			throw new IOException("Problem using Avalon Configuration tools");
+		}
+	}
+    
+    public static SampleResult getSampleResult(Configuration config) {
 		SampleResult result = new SampleResult(config.getAttributeAsLong(TIME_STAMP, 0L), config.getAttributeAsLong(
 				TIME, 0L));
 
@@ -460,120 +599,6 @@
 			config.addChild(getConfiguration(result.getResponseData()));
 		}
 		return config;
-	}
-
-	/**
-	 * Convert a result into a string, where the fields of the result are
-	 * separated by the default delimiter.
-	 * 
-	 * @param sample
-	 *            the test result to be converted
-	 * @return the separated value representation of the result
-	 */
-	public static String resultToDelimitedString(SampleResult sample) {
-		return resultToDelimitedString(sample, sample.getSaveConfig().getDelimiter());
-	}
-
-	/**
-	 * Convert a result into a string, where the fields of the result are
-	 * separated by a specified String.
-	 * 
-	 * @param sample
-	 *            the test result to be converted
-	 * @param delimiter
-	 *            the separation string
-	 * @return the separated value representation of the result
-	 */
-	public static String resultToDelimitedString(SampleResult sample, String delimiter) {
-		StringBuffer text = new StringBuffer();
-		SampleSaveConfiguration saveConfig = sample.getSaveConfig();
-
-		if (saveConfig.saveTimestamp()) {
-			if (saveConfig.printMilliseconds()){
-				text.append(sample.getTimeStamp());
-				text.append(delimiter);
-			} else if (saveConfig.formatter() != null) {
-				String stamp = saveConfig.formatter().format(new Date(sample.getTimeStamp()));
-				text.append(stamp);
-				text.append(delimiter);
-			}
-		}
-
-		if (saveConfig.saveTime()) {
-			text.append(sample.getTime());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveLabel()) {
-			text.append(sample.getSampleLabel());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveCode()) {
-			text.append(sample.getResponseCode());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveMessage()) {
-			text.append(sample.getResponseMessage());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveThreadName()) {
-			text.append(sample.getThreadName());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveDataType()) {
-			text.append(sample.getDataType());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveSuccess()) {
-			text.append(sample.isSuccessful());
-			text.append(delimiter);
-		}
-
-		if (saveConfig.saveAssertionResultsFailureMessage()) {
-			String message = null;
-			AssertionResult[] results = sample.getAssertionResults();
-
-			if ((results != null) && (results.length > 0)) {
-				message = results[0].getFailureMessage();
-			}
-
-			if (message != null) {
-				text.append(message);
-			}
-			text.append(delimiter);
-		}
-
-        if (saveConfig.saveBytes()) {
-            text.append(sample.getBytes());
-            text.append(delimiter);
-        }
-
-        if (saveConfig.saveUrl()) {
-            text.append(sample.getURL());
-            text.append(delimiter);
-        }
-
-        if (saveConfig.saveFileName()) {
-            text.append(sample.getResultFileName());
-            text.append(delimiter);
-        }
-
-		String resultString = null;
-		int size = text.length();
-		int delSize = delimiter.length();
-
-		// Strip off the trailing delimiter
-		if (size >= delSize) {
-			resultString = text.substring(0, size - delSize);
-		} else {
-			resultString = text.toString();
-		}
-		return resultString;
 	}
 
 	public static Configuration getConfigForTestElement(String named, TestElement item) {

Modified: jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java Sun Apr 30 15:27:31 2006
@@ -23,15 +23,13 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import java.net.URL;
 
 import org.apache.jmeter.assertions.AssertionResult;
 import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.samplers.SampleSaveConfiguration;
-//import org.apache.jorphan.logging.LoggingManager;
+import org.apache.jmeter.threads.JMeterContextService;
 import org.apache.jorphan.util.Converter;
 import org.apache.jorphan.util.JOrphanUtils;
-//import org.apache.log.Logger;
 
 import com.thoughtworks.xstream.alias.ClassMapper;
 import com.thoughtworks.xstream.converters.MarshallingContext;
@@ -41,10 +39,7 @@
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 
 /**
- * @author mstover
- * 
- * To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Generation - Code and Comments
+ * XStream Converter for the SampleResult class
  */
 public class SampleResultConverter extends AbstractCollectionConverter {
 	//private static final Logger log = LoggingManager.getLoggerForClass();
@@ -66,13 +61,16 @@
     protected static final String TAG_SAMPLER_DATA      = "samplerData";      //$NON-NLS-1$
     protected static final String TAG_RESPONSE_FILE     = "responseFile";     //$NON-NLS-1$
 
-    // samplerData attributes. Must be unique. Keep sorted.
+    // samplerData attributes. Must be unique. Keep sorted by string value.
     private static final String ATT_BYTES             = "by"; //$NON-NLS-1$
     private static final String ATT_DATA_ENCODING     = "de"; //$NON-NLS-1$
     private static final String ATT_DATA_TYPE         = "dt"; //$NON-NLS-1$
     private static final String ATT_LABEL             = "lb"; //$NON-NLS-1$
     private static final String ATT_LATENCY           = "lt"; //$NON-NLS-1$
 
+    private static final String ATT_ALL_THRDS         = "na"; //$NON-NLS-1$
+    private static final String ATT_GRP_THRDS         = "ng"; //$NON-NLS-1$
+
     // N.B. Originally the response code was saved with the code "rs" 
     // but retrieved with the code "rc". Changed to always use "rc", but
     // allow for "rs" when restoring values.
@@ -252,6 +250,12 @@
 			writer.addAttribute(ATT_DATA_ENCODING, ConversionHelp.encode(res.getDataEncoding()));
 		if (save.saveBytes())
 			writer.addAttribute(ATT_BYTES, String.valueOf(res.getBytes()));
+        if (save.saveThreadCounts()){// These cannot be restored
+            writer.addAttribute(ATT_GRP_THRDS,
+                    String.valueOf(JMeterContextService.getContext().getThreadGroup().getNumberOfThreads()));
+            writer.addAttribute(ATT_ALL_THRDS,
+                    String.valueOf(JMeterContextService.getNumberOfThreads()));
+        }
 	}
 
 	/**
@@ -348,6 +352,7 @@
 		res.setTimeStamp(Converter.getLong(reader.getAttribute(ATT_TIME_STAMP)));
 		res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY)));
 		res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES)));
+        // ATT_GRP_THRDS and ATT_ALL_THRDS are write only
 	}
 
     protected void readFile(String resultFileName, SampleResult res) {

Modified: jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java Sun Apr 30 15:27:31 2006
@@ -37,10 +37,12 @@
 
 	private static final ReflectionProvider rp = new JVM().bestReflectionProvider();
 
+    // N.B. These must agree with the names in SampleSaveConfiguration
     private static final String TRUE = "true"; // $NON-NLS-1$
 	private static final String NODE_FILENAME = "fileName"; // $NON-NLS-1$
 	private static final String NODE_URL = "url"; // $NON-NLS-1$
 	private static final String NODE_BYTES = "bytes"; // $NON-NLS-1$
+    private static final String NODE_THREAD_COUNT = "threadCounts"; // $NON-NLS-1$
 
 	static class MyWrapper extends MapperWrapper{
 
@@ -53,6 +55,7 @@
             if (fieldName.equals(NODE_BYTES)) return false; 
             if (fieldName.equals(NODE_URL)) return false; 
             if (fieldName.equals(NODE_FILENAME)) return false; 
+            if (fieldName.equals(NODE_THREAD_COUNT)) return false; 
             return true;
         }
     }
@@ -90,25 +93,19 @@
         SampleSaveConfiguration prop = (SampleSaveConfiguration) obj;
         
         // Save the new fields - but only if they are not the default
-        if (prop.saveBytes())
-        {
-            writer.startNode(NODE_BYTES);
-            writer.setValue(TRUE);
-            writer.endNode();
-        }
-        if (prop.saveUrl())
-        {
-            writer.startNode(NODE_URL);
-            writer.setValue(TRUE);
-            writer.endNode();
-        }
-        if (prop.saveFileName())
-        {
-            writer.startNode(NODE_FILENAME);
-            writer.setValue(TRUE);
-            writer.endNode();
-        }
+        createNode(writer,prop.saveBytes(),NODE_BYTES);
+        createNode(writer,prop.saveUrl(),NODE_URL);
+        createNode(writer,prop.saveFileName(),NODE_FILENAME);
+        createNode(writer,prop.saveThreadCounts(),NODE_THREAD_COUNT);
 	}
+
+    // Helper method to simplify marshall routine
+    private void createNode(HierarchicalStreamWriter writer, boolean save, String node) {
+        if (!save) return;
+        writer.startNode(node);
+        writer.setValue(TRUE);
+        writer.endNode();
+    }
 
 	/*
 	 * (non-Javadoc)

Modified: jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml Sun Apr 30 15:27:31 2006
@@ -86,6 +86,7 @@
 <li>Counter Pre-Processor now supports formatted numbers</li>
 <li>Add support for HEAD and PUT methods</li>
 <li>Allow default HTTP implementation to be changed</li>
+<li>Optionally save active thread counts (group and all) to result files</li>
 </ul>
 
 <h4>Bug fixes:</h4>

Modified: jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml?rev=398454&r1=398453&r2=398454&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/usermanual/listeners.xml Sun Apr 30 15:27:31 2006
@@ -244,6 +244,8 @@
 <tr><td>dt</td><td>Data type</td></tr>
 <tr><td>de</td><td>Data encoding</td></tr>
 <tr><td>by</td><td>Bytes</td></tr>
+<tr><td>ng</td><td>Number of active threads in this group</td></tr>
+<tr><td>na</td><td>Number of active threads for all thread groups</td></tr>
 </table>
 <p>
 Versions 2.1 and 2.1.1 of JMeter saved the Response Code as "rs", but read it back expecting to find "rc".



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org