Author: sebb Date: Thu Dec 10 01:20:41 2009 New Revision: 889049 URL: http://svn.apache.org/viewvc?rev=889049&view=rev Log: Allow Idle Time to be saved to sample log files
Modified: jakarta/jmeter/trunk/bin/jmeter.properties jakarta/jmeter/trunk/docs/images/screenshots/sample_result_config.png jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java jakarta/jmeter/trunk/xdocs/changes.xml jakarta/jmeter/trunk/xdocs/images/screenshots/sample_result_config.png jakarta/jmeter/trunk/xdocs/usermanual/listeners.xml Modified: jakarta/jmeter/trunk/bin/jmeter.properties URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/jmeter.properties?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/bin/jmeter.properties (original) +++ jakarta/jmeter/trunk/bin/jmeter.properties Thu Dec 10 01:20:41 2009 @@ -337,6 +337,7 @@ #jmeter.save.saveservice.hostname=false #jmeter.save.saveservice.thread_counts=false #jmeter.save.saveservice.sample_count=false +#jmeter.save.saveservice.idle_time=false # Timestamp format - this only affects CSV output files # legitimate values: none, ms, or a format suitable for SimpleDateFormat Modified: jakarta/jmeter/trunk/docs/images/screenshots/sample_result_config.png URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/sample_result_config.png?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== Binary files - no diff available. Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Thu Dec 10 01:20:41 2009 @@ -712,6 +712,7 @@ save_filename=Save Response Filename save_graphics=Save Graph save_hostname=Save Hostname +save_idletime=Save Idle Time save_label=Save Label save_latency=Save Latency save_message=Save Response Message Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java Thu Dec 10 01:20:41 2009 @@ -36,13 +36,17 @@ * N.B. to add a new field, remember the following * - static _xyz * - instance xyz=_xyz - * - clone s.xyz = xyz + * - clone s.xyz = xyz (perhaps) * - setXyz(boolean) * - saveXyz() * - update SampleSaveConfigurationConverter to add new fields to marshall() and shouldSerialiseMember() * - update SampleResultConverter and/or HTTPSampleConverter - * - update CSV routines in OldSaveService + * - update CSVSaveService: CSV_XXXX, makeResultFromDelimitedString, printableFieldNamesToString, static{} * - update messages.properties to add save_xyz entry + * - update jmeter.properties to add new property + * - update listeners.xml to add new property, CSV and XML names etc. + * - take screenshot sample_result_config.png + * - update listeners.xml and component_reference.xml with new dimensions (might not change) * */ /** @@ -199,10 +203,11 @@ // <?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$ + private static final String SAVE_THREAD_COUNTS = "jmeter.save.saveservice.thread_counts"; // $NON_NLS-1$ - private static final String SAVE_SAMPLE_COUNT = "jmeter.save.saveservice.sample_count"; // $NON_NLS-1$ + private static final String SAVE_SAMPLE_COUNT = "jmeter.save.saveservice.sample_count"; // $NON_NLS-1$ + private static final String SAVE_IDLE_TIME = "jmeter.save.saveservice.idle_time"; // $NON_NLS-1$ // N.B. Remember to update the equals and hashCode methods when adding new variables. // Initialise values from properties @@ -221,6 +226,8 @@ private boolean threadCounts = _threadCounts; private boolean sampleCount = _sampleCount; + + private boolean idleTime = _idleTime; // Does not appear to be used (yet) private int assertionsResultsToSave = _assertionsResultsToSave; @@ -277,6 +284,8 @@ * comma for CSV files. */ private static final String _delimiter; + + private static final boolean _idleTime; private static final String DEFAULT_DELIMITER = ","; // $NON_NLS-1$ @@ -378,6 +387,8 @@ _threadCounts=TRUE.equalsIgnoreCase(props.getProperty(SAVE_THREAD_COUNTS, FALSE)); _sampleCount=TRUE.equalsIgnoreCase(props.getProperty(SAVE_SAMPLE_COUNT, FALSE)); + + _idleTime=TRUE.equalsIgnoreCase(props.getProperty(SAVE_IDLE_TIME, FALSE)); } // Don't save this, as not settable via GUI @@ -495,6 +506,7 @@ s.fileName == fileName && s.hostname == hostname && s.sampleCount == sampleCount && + s.idleTime == idleTime && s.threadCounts == threadCounts; boolean stringValues = false; @@ -542,6 +554,7 @@ hash = 31 * hash + (delimiter != null ? delimiter.hashCode() : 0); hash = 31 * hash + (formatter != null ? formatter.hashCode() : 0); hash = 31 * hash + (sampleCount ? 1 : 0); + hash = 31 * hash + (idleTime ? 1 : 0); return hash; } @@ -804,4 +817,12 @@ public void setHostname(boolean save){ hostname = save; } + + public boolean saveIdleTime() { + return idleTime; + } + + public void setIdleTime(boolean save) { + idleTime = save; + } } \ No newline at end of file Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java Thu Dec 10 01:20:41 2009 @@ -90,6 +90,7 @@ private static final String CSV_LATENCY = "Latency"; // $NON-NLS-1$ private static final String CSV_ENCODING = "Encoding"; // $NON-NLS-1$ private static final String CSV_HOSTNAME = "Hostname"; // $NON-NLS-1$ + private static final String CSV_IDLETIME = "IdleTime"; // $NON-NLS-1$ // Used to enclose variable name labels, to distinguish from any of the above labels private static final String VARIABLE_NAME_QUOTE_CHAR = "\""; // $NON-NLS-1$ @@ -309,6 +310,12 @@ hostname = parts[i++]; } + if (saveConfig.saveIdleTime()) { + field = CSV_IDLETIME; + text = parts[i++]; + result.setIdleTime(Long.parseLong(text)); + } + if (i + saveConfig.getVarCount() < parts.length){ log.warn("Line: "+lineNumber+". Found "+parts.length+" fields, expected "+i+". Extra fields have been ignored."); } @@ -433,6 +440,11 @@ text.append(delim); } + if (saveConfig.saveIdleTime()) { + text.append(CSV_IDLETIME); + text.append(delim); + } + for (int i = 0; i < SampleEvent.getVarCount(); i++){ text.append(VARIABLE_NAME_QUOTE_CHAR); text.append(SampleEvent.getVarName(i)); @@ -480,6 +492,7 @@ headerLabelMethods.put(CSV_SAMPLE_COUNT, new Functor("setSampleCount")); headerLabelMethods.put(CSV_ERROR_COUNT, new Functor("setSampleCount")); headerLabelMethods.put(CSV_HOSTNAME, new Functor("setHostname")); + headerLabelMethods.put(CSV_IDLETIME, new Functor("setIdleTime")); } /** Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java Thu Dec 10 01:20:41 2009 @@ -89,6 +89,7 @@ private static final String ATT_SUCCESS = "s"; //$NON-NLS-1$ private static final String ATT_SAMPLE_COUNT = "sc"; //$NON-NLS-1$ private static final String ATT_TIME = "t"; //$NON-NLS-1$ + private static final String ATT_IDLETIME = "it"; //$NON-NLS-1$ private static final String ATT_THREADNAME = "tn"; //$NON-NLS-1$ private static final String ATT_TIME_STAMP = "ts"; //$NON-NLS-1$ @@ -100,24 +101,14 @@ return "$Revision$"; //$NON-NLS-1$ } - /* - * (non-Javadoc) - * - * @see com.thoughtworks.xstream.converters.Converter#canConvert(java.lang.Class) - */ + /** {...@inheritdoc} */ @Override @SuppressWarnings("unchecked") // superclass does not use types public boolean canConvert(Class arg0) { return SampleResult.class.equals(arg0); } - /* - * (non-Javadoc) - * - * @see com.thoughtworks.xstream.converters.Converter#marshal(java.lang.Object, - * com.thoughtworks.xstream.io.HierarchicalStreamWriter, - * com.thoughtworks.xstream.converters.MarshallingContext) - */ + /** {...@inheritdoc} */ @Override public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) { SampleResult res = (SampleResult) obj; @@ -244,6 +235,9 @@ if (save.saveTime()) { writer.addAttribute(ATT_TIME, Long.toString(res.getTime())); } + if (save.saveIdleTime()) { + writer.addAttribute(ATT_IDLETIME, Long.toString(res.getIdleTime())); + } if (save.saveLatency()) { writer.addAttribute(ATT_LATENCY, Long.toString(res.getLatency())); } @@ -283,12 +277,10 @@ writer.addAttribute(ATT_ALL_THRDS, String.valueOf(res.getAllThreads())); } SampleEvent event = (SampleEvent) context.get(SaveService.SAMPLE_EVENT_OBJECT); - if (save.saveHostname()){ - if (event != null) { + if (event != null) { + if (save.saveHostname()){ writer.addAttribute(ATT_HOSTNAME, event.getHostname()); } - } - if (event != null) { for (int i = 0; i < SampleEvent.getVarCount(); i++){ writer.addAttribute(SampleEvent.getVarName(i), ConversionHelp.encode(event.getVarValue(i))); } @@ -309,12 +301,7 @@ } } - /* - * (non-Javadoc) - * - * @see com.thoughtworks.xstream.converters.Converter#unmarshal(com.thoughtworks.xstream.io.HierarchicalStreamReader, - * com.thoughtworks.xstream.converters.UnmarshallingContext) - */ + /** {...@inheritdoc} */ @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { SampleResult res = (SampleResult) createCollection(context.getRequiredType()); @@ -394,6 +381,7 @@ res.setThreadName(ConversionHelp.decode(reader.getAttribute(ATT_THREADNAME))); res.setStampAndTime(Converter.getLong(reader.getAttribute(ATT_TIME_STAMP)), Converter.getLong(reader.getAttribute(ATT_TIME))); + res.setIdleTime(Converter.getLong(reader.getAttribute(ATT_IDLETIME))); res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY))); res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES))); res.setSampleCount(Converter.getInt(reader.getAttribute(ATT_SAMPLE_COUNT),1)); // default is 1 Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleSaveConfigurationConverter.java Thu Dec 10 01:20:41 2009 @@ -60,6 +60,7 @@ private static final String NODE_BYTES = "bytes"; // $NON-NLS-1$ private static final String NODE_THREAD_COUNT = "threadCounts"; // $NON-NLS-1$ private static final String NODE_SAMPLE_COUNT = "sampleCount"; // $NON-NLS-1$ + private static final String NODE_IDLE_TIME = "idleTime"; // $NON-NLS-1$ // Additional member names which are currently not written out private static final String NODE_DELIMITER = "delimiter"; // $NON-NLS-1$ @@ -86,6 +87,7 @@ if (fieldName.equals(NODE_HOSTNAME)) { return false; } if (fieldName.equals(NODE_THREAD_COUNT)) { return false; } if (fieldName.equals(NODE_SAMPLE_COUNT)) { return false; } + if (fieldName.equals(NODE_IDLE_TIME)) { return false; } // These fields are not currently saved or restored if (fieldName.equals(NODE_DELIMITER)) { return false; } @@ -127,6 +129,7 @@ createNode(writer,prop.saveHostname(),NODE_HOSTNAME); createNode(writer,prop.saveThreadCounts(),NODE_THREAD_COUNT); createNode(writer,prop.saveSampleCount(),NODE_SAMPLE_COUNT); + createNode(writer,prop.saveIdleTime(),NODE_IDLE_TIME); } // Helper method to simplify marshall routine Modified: jakarta/jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/changes.xml (original) +++ jakarta/jmeter/trunk/xdocs/changes.xml Thu Dec 10 01:20:41 2009 @@ -147,6 +147,7 @@ <li>Bug 47869 - Ability to cleanup fields of SampleResult</li> <li>Bug 47952 - Added JSR223 Listener</li> <li>Bug 47474 - View Results Tree support for plugin renderers</li> +<li>Allow Idle Time to be saved to sample log files</li> </ul> <h3>Timers, Assertions, Config, Pre- & Post-Processors</h3> Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/sample_result_config.png URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/sample_result_config.png?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== Binary files - no diff available. Modified: jakarta/jmeter/trunk/xdocs/usermanual/listeners.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/listeners.xml?rev=889049&r1=889048&r2=889049&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/usermanual/listeners.xml (original) +++ jakarta/jmeter/trunk/xdocs/usermanual/listeners.xml Thu Dec 10 01:20:41 2009 @@ -143,6 +143,7 @@ #jmeter.save.saveservice.hostname=false #jmeter.save.saveservice.thread_counts=false #jmeter.save.saveservice.sample_count=false +#jmeter.save.saveservice.idle_time=false # Timestamp format # legitimate values: none, ms, or a format suitable for SimpleDateFormat @@ -275,6 +276,7 @@ <li>SampleCount - number of samples (1, unless multiple samples are aggregated)</li> <li>ErrorCount - number of errors (0 or 1, unless multiple samples are aggregated)</li> <li>Hostname where the sample was generated</li> +<li>IdleTime - number of milliseconds of 'Idle' time (normally 0)</li> <li>Variables, if specified</li> </ul> @@ -416,6 +418,7 @@ <tr><td>dt</td><td>Data type</td></tr> <tr><td>ec</td><td>Error count (0 or 1, unless multiple samples are aggregated)</td></tr> <tr><td>hn</td><td>Hostname where the sample was generated</td></tr> +<tr><td>it</td><td>Idle Time = time not spent sampling (milliseconds) (generally 0)</td></tr> <tr><td>lb</td><td>Label</td></tr> <tr><td>lt</td><td>Latency = time to initial response (milliseconds) - not all samplers support this</td></tr> <tr><td>na</td><td>Number of active threads for all thread groups</td></tr> --------------------------------------------------------------------- To unsubscribe, e-mail: jmeter-dev-unsubscr...@jakarta.apache.org For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org