Thanks, that looks OK now.
On 6 January 2015 at 13:29, Andrey Pokhilko <[email protected]> wrote: > Done > > Andrey Pokhilko > > On 01/06/2015 04:16 PM, Andrey Pokhilko wrote: >> Thanks for pointing to the right place, I'll work on it right now. >> >> Andrey Pokhilko >> >> On 01/06/2015 04:10 PM, sebb wrote: >>> Ah - that class is different; the data is saved in >>> SampleSaveConfigurationConverter >>> But the principle is the same; don't save new properties unnecessarily. >>> >>> There is a comment at the beginning of the SampleSaveConfiguration >>> class which details all the changes that have to be made when adding a >>> new field, this includes: >>> >>> * - update SampleSaveConfigurationConverter to add new fields to >>> marshall() and shouldSerialiseMember() >>> >>> The sample config is used in lots of places so changes affect lots of >>> classes. >>> >>> Maybe one could do something clever with annotations so that some of >>> this config was no longer necessary, >>> But that will be quite a lot of work for something that rarely changes. >>> >>> In the meantime, the unit tests hopefully catch any errors. >>> >>> On 6 January 2015 at 12:56, Andrey Pokhilko <[email protected]> wrote: >>>> I'm sorry, but I don't understand how this relates to the >>>> SampleSaveConfiguration, which generates this piece of JMX... I have >>>> correct defaults specified for connect times, it is false both in the >>>> code and in the jmeter.properties. I used no string "magic" strings in >>>> my code, did everything just like it is done for latency. I think this >>>> change in JMXses is unavoidable, since JMeter writes into JMX all sample >>>> save flags, including those with default values. I see the sense of this >>>> behavior to make JMXses consistently portable between different JMeter >>>> installation. >>>> >>>> Am I wrong? >>>> >>>> Andrey Pokhilko >>>> >>>> On 01/06/2015 03:45 PM, sebb wrote: >>>>> On 6 January 2015 at 08:25, Andrey Pokhilko <[email protected]> wrote: >>>>>> About modifying JMXses: >>>>>> >>>>>> As far as I understand how JMeter works, it applies the default (which >>>>>> is "false") when no configuration property provided. >>>>> Yes, assuming that the default is correctly defined. >>>>> >>>>>> But then when it >>>>>> saves the JMX, it writes all the properties, including those with >>>>>> default values. >>>>> That depends on how the code writes the values. >>>>> There is a property setter that takes a default value; if the value >>>>> matches the default, it removes the property instead of writing it. >>>>> >>>>> This is done to avoid cluttering up the JMX files, and to assist with >>>>> backwards compatibiity. >>>>> >>>>> See for example >>>>> >>>>> AuthManager.setClearEachIteration(boolean clear) >>>>> >>>>> Note that the same constant (DEFAULT_CLEAR_VALUE) is used for both get >>>>> and set. >>>>> It's vital that the same value is used for get and set - and the value >>>>> must never change. >>>>> >>>>>> I did change to JMXses since somewhere in the tests there is a check >>>>>> that JMX must stay unchanged upon open and save. If I'm wrong and there >>>>>> is some other way to make those tests passing, please tell it to me and >>>>>> I'll roll back the undesired changes. >>>>>> >>>>>> Andrey Pokhilko >>>>>> >>>>>> On 01/06/2015 05:48 AM, sebb wrote: >>>>>>> On 5 January 2015 at 19:49, <[email protected]> wrote: >>>>>>>> Author: undera >>>>>>>> Date: Mon Jan 5 19:49:06 2015 >>>>>>>> New Revision: 1649629 >>>>>>>> >>>>>>>> URL: http://svn.apache.org/r1649629 >>>>>>>> Log: >>>>>>>> 48799 - Add connect time to output metrics >>>>>>>> >>>>>>>> Added: >>>>>>>> >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>>>>>>> Modified: >>>>>>>> jmeter/trunk/bin/jmeter.properties >>>>>>>> jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx >>>>>>>> jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx >>>>>>>> jmeter/trunk/bin/testfiles/GenTest210.jmx >>>>>>>> jmeter/trunk/bin/testfiles/GenTest27.jmx >>>>>>>> jmeter/trunk/bin/testfiles/GuiTest.jmx >>>>>>>> jmeter/trunk/bin/testfiles/GuiTest231.jmx >>>>>>>> jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx >>>>>>>> jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx >>>>>>>> jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx >>>>>>>> jmeter/trunk/bin/testfiles/LoopTestPlan.jmx >>>>>>>> jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx >>>>>>>> jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx >>>>>>>> >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>>>>>>> >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>>>>>>> >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>>>>>>> >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>>>>>>> >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>>>>>>> >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>>>>>>> >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>>>>>>> >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>>>>>>> >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java >>>>>>>> >>>>>>>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>>>>>>> jmeter/trunk/xdocs/changes.xml >>>>>>>> jmeter/trunk/xdocs/usermanual/glossary.xml >>>>>>>> jmeter/trunk/xdocs/usermanual/listeners.xml >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/jmeter.properties >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter.properties?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/jmeter.properties (original) >>>>>>>> +++ jmeter/trunk/bin/jmeter.properties Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -465,6 +465,7 @@ log_level.jorphan=INFO >>>>>>>> #jmeter.save.saveservice.subresults=true >>>>>>>> #jmeter.save.saveservice.assertions=true >>>>>>>> #jmeter.save.saveservice.latency=true >>>>>>>> +#jmeter.save.saveservice.connect_time=false >>>>>>>> #jmeter.save.saveservice.samplerData=false >>>>>>>> #jmeter.save.saveservice.responseHeaders=false >>>>>>>> #jmeter.save.saveservice.requestHeaders=false >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx Mon Jan 5 >>>>>>>> 19:49:06 2015 >>>>>>> -1 to this change. >>>>>>> Similarly for the other JMX files. >>>>>>> >>>>>>> The code needs to be set up to default to false if the tag is not >>>>>>> present. >>>>>>> >>>>>>>> @@ -60,6 +60,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -91,6 +92,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx Mon Jan 5 >>>>>>>> 19:49:06 2015 >>>>>>>> @@ -106,6 +106,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/GenTest210.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GenTest210.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/GenTest210.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/GenTest210.jmx Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -970,6 +970,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1002,6 +1003,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1034,6 +1036,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1080,6 +1083,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1112,6 +1116,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1146,6 +1151,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1186,6 +1192,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1227,6 +1234,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1259,6 +1267,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1299,6 +1308,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1331,6 +1341,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1363,6 +1374,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1395,6 +1407,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1427,6 +1440,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/GenTest27.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GenTest27.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/GenTest27.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/GenTest27.jmx Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -942,6 +942,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -974,6 +975,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1006,6 +1008,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1052,6 +1055,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1084,6 +1088,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1118,6 +1123,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1157,6 +1163,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1198,6 +1205,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1238,6 +1246,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1270,6 +1279,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1302,6 +1312,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1334,6 +1345,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1366,6 +1378,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/GuiTest.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GuiTest.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/GuiTest.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/GuiTest.jmx Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -189,6 +189,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -220,6 +221,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -251,6 +253,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -282,6 +285,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -313,6 +317,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -344,6 +349,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -375,6 +381,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/GuiTest231.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GuiTest231.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/GuiTest231.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/GuiTest231.jmx Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -787,6 +787,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -825,6 +826,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -857,6 +859,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -889,6 +892,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -930,6 +934,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -962,6 +967,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -994,6 +1000,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1026,6 +1033,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1058,6 +1066,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1090,6 +1099,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1122,6 +1132,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> @@ -1154,6 +1165,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx Mon Jan 5 >>>>>>>> 19:49:06 2015 >>>>>>>> @@ -59,6 +59,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx Mon Jan 5 >>>>>>>> 19:49:06 2015 >>>>>>>> @@ -99,6 +99,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx Mon Jan 5 >>>>>>>> 19:49:06 2015 >>>>>>>> @@ -126,6 +126,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/LoopTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/LoopTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/LoopTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/LoopTestPlan.jmx Mon Jan 5 19:49:06 >>>>>>>> 2015 >>>>>>>> @@ -83,6 +83,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx Mon Jan 5 >>>>>>>> 19:49:06 2015 >>>>>>>> @@ -80,6 +80,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx (original) >>>>>>>> +++ jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx Mon Jan 5 19:49:06 >>>>>>>> 2015 >>>>>>>> @@ -117,6 +117,7 @@ >>>>>>>> <value class="SampleSaveConfiguration"> >>>>>>>> <time>true</time> >>>>>>>> <latency>true</latency> >>>>>>>> + <connectTime>false</connectTime> >>>>>>>> <timestamp>true</timestamp> >>>>>>>> <success>true</success> >>>>>>>> <label>true</label> >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -229,6 +229,7 @@ public abstract class SamplerResultTab i >>>>>>>> String startTime = dateFormat.format(new >>>>>>>> Date(sampleResult.getStartTime())); >>>>>>>> >>>>>>>> statsBuff.append(JMeterUtils.getResString("view_results_sample_start")).append(startTime).append(NL); >>>>>>>> //$NON-NLS-1$ >>>>>>>> >>>>>>>> statsBuff.append(JMeterUtils.getResString("view_results_load_time")).append(sampleResult.getTime()).append(NL); >>>>>>>> //$NON-NLS-1$ >>>>>>>> + >>>>>>>> statsBuff.append(JMeterUtils.getResString("view_results_connect_time")).append(sampleResult.getConnectTime()).append(NL); >>>>>>>> //$NON-NLS-1$ >>>>>>>> >>>>>>>> statsBuff.append(JMeterUtils.getResString("view_results_latency")).append(sampleResult.getLatency()).append(NL); >>>>>>>> //$NON-NLS-1$ >>>>>>>> >>>>>>>> statsBuff.append(JMeterUtils.getResString("view_results_size_in_bytes")).append(sampleResult.getBytes()).append(NL); >>>>>>>> //$NON-NLS-1$ >>>>>>>> >>>>>>>> statsBuff.append(JMeterUtils.getResString("view_results_size_headers_in_bytes")).append(sampleResult.getHeadersSize()).append(NL); >>>>>>>> //$NON-NLS-1$ >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -81,7 +81,8 @@ public class TableVisualizer extends Abs >>>>>>>> "table_visualizer_sample_time", // $NON-NLS-1$ >>>>>>>> "table_visualizer_status", // $NON-NLS-1$ >>>>>>>> "table_visualizer_bytes", // $NON-NLS-1$ >>>>>>>> - "table_visualizer_latency"}; // $NON-NLS-1$ >>>>>>>> + "table_visualizer_latency", // $NON-NLS-1$ >>>>>>>> + "table_visualizer_connect"}; // $NON-NLS-1$ >>>>>>>> >>>>>>>> private ObjectTableModel model = null; >>>>>>>> >>>>>>>> @@ -125,18 +126,19 @@ public class TableVisualizer extends Abs >>>>>>>> model = new ObjectTableModel(COLUMNS, >>>>>>>> TableSample.class, // The object used for >>>>>>>> each row >>>>>>>> new Functor[] { >>>>>>>> - new Functor("getSampleNumberString"), // $NON-NLS-1$ >>>>>>>> - new Functor("getStartTimeFormatted", // $NON-NLS-1$ >>>>>>>> + new Functor("getSampleNumberString"), // $NON-NLS-1$ >>>>>>>> + new Functor("getStartTimeFormatted", // $NON-NLS-1$ >>>>>>>> new Object[]{format}), >>>>>>>> - new Functor("getThreadName"), // $NON-NLS-1$ >>>>>>>> - new Functor("getLabel"), // $NON-NLS-1$ >>>>>>>> - new Functor("getElapsed"), // $NON-NLS-1$ >>>>>>>> + new Functor("getThreadName"), // $NON-NLS-1$ >>>>>>>> + new Functor("getLabel"), // $NON-NLS-1$ >>>>>>>> + new Functor("getElapsed"), // $NON-NLS-1$ >>>>>>>> new SampleSuccessFunctor("isSuccess"), // $NON-NLS-1$ >>>>>>>> - new Functor("getBytes"), // $NON-NLS-1$ >>>>>>>> - new Functor("getLatency") }, // $NON-NLS-1$ >>>>>>>> - new Functor[] { null, null, null, null, null, null, >>>>>>>> null, null }, >>>>>>>> + new Functor("getBytes"), // $NON-NLS-1$ >>>>>>>> + new Functor("getLatency"), // $NON-NLS-1$ >>>>>>>> + new Functor("getConnectTime") }, // $NON-NLS-1$ >>>>>>>> + new Functor[] { null, null, null, null, null, null, >>>>>>>> null, null, null }, >>>>>>>> new Class[] { >>>>>>>> - String.class, String.class, String.class, >>>>>>>> String.class, Long.class, ImageIcon.class, Long.class, Long.class }); >>>>>>>> + String.class, String.class, String.class, >>>>>>>> String.class, Long.class, ImageIcon.class, Long.class, Long.class, >>>>>>>> Long.class }); >>>>>>>> init(); >>>>>>>> } >>>>>>>> >>>>>>>> @@ -188,7 +190,9 @@ public class TableVisualizer extends Abs >>>>>>>> res.getTime(), >>>>>>>> res.isSuccessful(), >>>>>>>> res.getBytes(), >>>>>>>> - res.getLatency()); >>>>>>>> + res.getLatency(), >>>>>>>> + res.getConnectTime() >>>>>>>> + ); >>>>>>>> model.addRow(newS); >>>>>>>> } >>>>>>>> updateTextFields(res); >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -291,6 +291,7 @@ public class TransactionController exten >>>>>>>> res.setAllThreads(sampleResult.getAllThreads()); >>>>>>>> res.setGroupThreads(sampleResult.getGroupThreads()); >>>>>>>> res.setLatency(res.getLatency() + >>>>>>>> sampleResult.getLatency()); >>>>>>>> + res.setConnectTime(res.getConnectTime() + >>>>>>>> sampleResult.getConnectTime()); >>>>>>>> } >>>>>>>> } >>>>>>>> } >>>>>>>> >>>>>>>> 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=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -906,6 +906,7 @@ save_hostname=Save Hostname >>>>>>>> save_idletime=Save Idle Time >>>>>>>> save_label=Save Label >>>>>>>> save_latency=Save Latency >>>>>>>> +save_connecttime=Save Connect Time >>>>>>>> save_message=Save Response Message >>>>>>>> save_overwrite_existing_file=The selected file already exists, do you >>>>>>>> want to overwrite it? >>>>>>>> save_requestheaders=Save Request Headers (XML) >>>>>>>> @@ -1072,6 +1073,7 @@ system_sampler_stdout=Standard output (s >>>>>>>> system_sampler_title=OS Process Sampler >>>>>>>> table_visualizer_bytes=Bytes >>>>>>>> table_visualizer_latency=Latency >>>>>>>> +table_visualizer_connect=Connect >>>>>>>> table_visualizer_sample_num=Sample # >>>>>>>> table_visualizer_sample_time=Sample Time(ms) >>>>>>>> table_visualizer_start_time=Start Time >>>>>>>> @@ -1196,6 +1198,7 @@ view_results_error_count=Error Count: >>>>>>>> view_results_fields=fields: >>>>>>>> view_results_in_table=View Results in Table >>>>>>>> view_results_latency=Latency: >>>>>>>> +view_results_connect_time=Connect Time: >>>>>>>> view_results_load_time=Load time: >>>>>>>> view_results_render=Render: >>>>>>>> view_results_render_document=Document >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>>>>>>> (original) >>>>>>>> +++ jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -178,7 +178,12 @@ public class SampleResult implements Ser >>>>>>>> >>>>>>>> /** time to first response */ >>>>>>>> private long latency = 0; >>>>>>>> - >>>>>>>> + >>>>>>>> + /** >>>>>>>> + * time to end connecting >>>>>>>> + */ >>>>>>>> + private long connectTime = 0; >>>>>>>> + >>>>>>>> /** Should thread start next iteration ? */ >>>>>>>> private boolean startNextThreadLoop = false; >>>>>>>> >>>>>>>> @@ -301,6 +306,7 @@ public class SampleResult implements Ser >>>>>>>> isMonitor = res.isMonitor; >>>>>>>> label = res.label;//OK >>>>>>>> latency = res.latency; >>>>>>>> + connectTime = res.connectTime; >>>>>>>> location = res.location;//OK >>>>>>>> parent = res.parent; // TODO ?? >>>>>>>> pauseTime = res.pauseTime; >>>>>>>> @@ -1207,6 +1213,29 @@ public class SampleResult implements Ser >>>>>>>> } >>>>>>>> >>>>>>>> /** >>>>>>>> + * @return Returns the connect time. >>>>>>>> + */ >>>>>>>> + public long getConnectTime() { >>>>>>>> + return connectTime; >>>>>>>> + } >>>>>>>> + >>>>>>>> + /** >>>>>>>> + * Set the time to the end of connecting >>>>>>>> + */ >>>>>>>> + public void connectEnd() { >>>>>>>> + connectTime = currentTimeInMillis() - startTime - idleTime; >>>>>>>> + } >>>>>>>> + >>>>>>>> + /** >>>>>>>> + * This is only intended for use by SampleResultConverter! >>>>>>>> + * >>>>>>>> + * @param time The connect time to set. >>>>>>>> + */ >>>>>>>> + public void setConnectTime(long time) { >>>>>>>> + this.connectTime = time; >>>>>>>> + } >>>>>>>> + >>>>>>>> + /** >>>>>>>> * This is only intended for use by SampleResultConverter! >>>>>>>> * >>>>>>>> * @param timeStamp >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -198,6 +198,7 @@ public class SampleSaveConfiguration imp >>>>>>>> private static final String SUBRESULTS_PROP = >>>>>>>> "jmeter.save.saveservice.subresults"; // $NON_NLS-1$ >>>>>>>> private static final String ASSERTIONS_PROP = >>>>>>>> "jmeter.save.saveservice.assertions"; // $NON_NLS-1$ >>>>>>>> private static final String LATENCY_PROP = >>>>>>>> "jmeter.save.saveservice.latency"; // $NON_NLS-1$ >>>>>>>> + private static final String CONNECT_TIME_PROP = >>>>>>>> "jmeter.save.saveservice.connect_time"; // $NON_NLS-1$ >>>>>>>> private static final String SAMPLERDATA_PROP = >>>>>>>> "jmeter.save.saveservice.samplerData"; // $NON_NLS-1$ >>>>>>>> private static final String RESPONSEHEADERS_PROP = >>>>>>>> "jmeter.save.saveservice.responseHeaders"; // $NON_NLS-1$ >>>>>>>> private static final String REQUESTHEADERS_PROP = >>>>>>>> "jmeter.save.saveservice.requestHeaders"; // $NON_NLS-1$ >>>>>>>> @@ -216,7 +217,7 @@ public class SampleSaveConfiguration imp >>>>>>>> // N.B. Remember to update the equals and hashCode methods when >>>>>>>> adding new variables. >>>>>>>> >>>>>>>> // Initialise values from properties >>>>>>>> - private boolean time = _time, latency = _latency, timestamp = >>>>>>>> _timestamp, success = _success, label = _label, >>>>>>>> + private boolean time = _time, latency = _latency, >>>>>>>> connectTime=_connectTime, timestamp = _timestamp, success = _success, >>>>>>>> label = _label, >>>>>>>> code = _code, message = _message, threadName = >>>>>>>> _threadName, dataType = _dataType, encoding = _encoding, >>>>>>>> assertions = _assertions, subresults = _subresults, >>>>>>>> responseData = _responseData, >>>>>>>> samplerData = _samplerData, xml = _xml, fieldNames = >>>>>>>> _fieldNames, responseHeaders = _responseHeaders, >>>>>>>> @@ -250,7 +251,7 @@ public class SampleSaveConfiguration imp >>>>>>>> >>>>>>>> // Defaults from properties: >>>>>>>> private static final boolean _time, _timestamp, _success, _label, >>>>>>>> _code, _message, _threadName, _xml, >>>>>>>> - _responseData, _dataType, _encoding, _assertions, >>>>>>>> _latency, _subresults, _samplerData, _fieldNames, >>>>>>>> + _responseData, _dataType, _encoding, _assertions, >>>>>>>> _latency, _connectTime, _subresults, _samplerData, _fieldNames, >>>>>>>> _responseHeaders, _requestHeaders; >>>>>>>> >>>>>>>> private static final boolean _responseDataOnError; >>>>>>>> @@ -303,6 +304,7 @@ public class SampleSaveConfiguration imp >>>>>>>> _subresults = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(SUBRESULTS_PROP, TRUE)); >>>>>>>> _assertions = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(ASSERTIONS_PROP, TRUE)); >>>>>>>> _latency = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(LATENCY_PROP, TRUE)); >>>>>>>> + _connectTime = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(CONNECT_TIME_PROP, FALSE)); >>>>>>>> _samplerData = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(SAMPLERDATA_PROP, FALSE)); >>>>>>>> _responseHeaders = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(RESPONSEHEADERS_PROP, FALSE)); >>>>>>>> _requestHeaders = >>>>>>>> TRUE.equalsIgnoreCase(props.getProperty(REQUESTHEADERS_PROP, FALSE)); >>>>>>>> @@ -441,6 +443,7 @@ public class SampleSaveConfiguration imp >>>>>>>> hostname = value; >>>>>>>> label = value; >>>>>>>> latency = value; >>>>>>>> + connectTime = value; >>>>>>>> message = value; >>>>>>>> printMilliseconds = _printMilliseconds;//is derived from >>>>>>>> properties only >>>>>>>> requestHeaders = value; >>>>>>>> @@ -491,6 +494,7 @@ public class SampleSaveConfiguration imp >>>>>>>> SampleSaveConfiguration s = (SampleSaveConfiguration)obj; >>>>>>>> boolean primitiveValues = s.time == time && >>>>>>>> s.latency == latency && >>>>>>>> + s.connectTime == connectTime && >>>>>>>> s.timestamp == timestamp && >>>>>>>> s.success == success && >>>>>>>> s.label == label && >>>>>>>> @@ -536,6 +540,7 @@ public class SampleSaveConfiguration imp >>>>>>>> int hash = 7; >>>>>>>> hash = 31 * hash + (time ? 1 : 0); >>>>>>>> hash = 31 * hash + (latency ? 1 : 0); >>>>>>>> + hash = 31 * hash + (connectTime ? 1 : 0); >>>>>>>> hash = 31 * hash + (timestamp ? 1 : 0); >>>>>>>> hash = 31 * hash + (success ? 1 : 0); >>>>>>>> hash = 31 * hash + (label ? 1 : 0); >>>>>>>> @@ -635,6 +640,14 @@ public class SampleSaveConfiguration imp >>>>>>>> this.latency = latency; >>>>>>>> } >>>>>>>> >>>>>>>> + public boolean saveConnectTime() { >>>>>>>> + return connectTime; >>>>>>>> + } >>>>>>>> + >>>>>>>> + public void setConnectTime(boolean connectTime) { >>>>>>>> + this.connectTime = connectTime; >>>>>>>> + } >>>>>>>> + >>>>>>>> public boolean saveMessage() { >>>>>>>> return message; >>>>>>>> } >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -101,6 +101,7 @@ public class StatisticalSampleResult ext >>>>>>>> this.setEndTime(Math.max(getEndTime(), res.getEndTime())); >>>>>>>> >>>>>>>> setLatency(getLatency()+ res.getLatency()); >>>>>>>> + setConnectTime(getConnectTime()+ res.getConnectTime()); >>>>>>>> >>>>>>>> elapsed += res.getTime(); >>>>>>>> } >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>>>>>>> (original) >>>>>>>> +++ jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -87,6 +87,7 @@ public final class CSVSaveService { >>>>>>>> private static final String CSV_URL = "URL"; // $NON-NLS-1$ >>>>>>>> private static final String CSV_FILENAME = "Filename"; // >>>>>>>> $NON-NLS-1$ >>>>>>>> private static final String CSV_LATENCY = "Latency"; // >>>>>>>> $NON-NLS-1$ >>>>>>>> + private static final String CSV_CONNECT_TIME = "Connect"; // >>>>>>>> $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$ >>>>>>>> @@ -350,6 +351,11 @@ public final class CSVSaveService { >>>>>>>> text = parts[i++]; >>>>>>>> result.setIdleTime(Long.parseLong(text)); >>>>>>>> } >>>>>>>> + if (saveConfig.saveConnectTime()) { >>>>>>>> + field = CSV_CONNECT_TIME; >>>>>>>> + text = parts[i++]; >>>>>>>> + result.setConnectTime(Long.parseLong(text)); >>>>>>>> + } >>>>>>>> >>>>>>>> if (i + saveConfig.getVarCount() < parts.length) { >>>>>>>> log.warn("Line: " + lineNumber + ". Found " + >>>>>>>> parts.length >>>>>>>> @@ -488,6 +494,11 @@ public final class CSVSaveService { >>>>>>>> text.append(delim); >>>>>>>> } >>>>>>>> >>>>>>>> + if (saveConfig.saveConnectTime()) { >>>>>>>> + text.append(CSV_CONNECT_TIME); >>>>>>>> + text.append(delim); >>>>>>>> + } >>>>>>>> + >>>>>>>> for (int i = 0; i < SampleEvent.getVarCount(); i++) { >>>>>>>> text.append(VARIABLE_NAME_QUOTE_CHAR); >>>>>>>> text.append(SampleEvent.getVarName(i)); >>>>>>>> @@ -541,6 +552,7 @@ public final class CSVSaveService { >>>>>>>> headerLabelMethods.put(CSV_ERROR_COUNT, new >>>>>>>> Functor("setSampleCount")); >>>>>>>> headerLabelMethods.put(CSV_HOSTNAME, new >>>>>>>> Functor("setHostname")); >>>>>>>> headerLabelMethods.put(CSV_IDLETIME, new >>>>>>>> Functor("setIdleTime")); >>>>>>>> + headerLabelMethods.put(CSV_CONNECT_TIME, new >>>>>>>> Functor("setConnectTime")); >>>>>>>> } >>>>>>>> >>>>>>>> /** >>>>>>>> @@ -951,6 +963,10 @@ public final class CSVSaveService { >>>>>>>> text.append(event.getResult().getIdleTime()); >>>>>>>> } >>>>>>>> >>>>>>>> + if (saveConfig.saveConnectTime()) { >>>>>>>> + text.append(sample.getConnectTime()); >>>>>>>> + } >>>>>>>> + >>>>>>>> for (int i = 0; i < SampleEvent.getVarCount(); i++) { >>>>>>>> text.append(event.getVarValue(i)); >>>>>>>> } >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -77,6 +77,7 @@ public class SampleResultConverter exten >>>>>>>> private static final String ATT_HOSTNAME = "hn"; >>>>>>>> //$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_CONNECT_TIME = "ct"; >>>>>>>> //$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$ >>>>>>>> @@ -291,6 +292,9 @@ public class SampleResultConverter exten >>>>>>>> if (save.saveLatency()) { >>>>>>>> writer.addAttribute(ATT_LATENCY, >>>>>>>> Long.toString(res.getLatency())); >>>>>>>> } >>>>>>>> + if (save.saveConnectTime()) { >>>>>>>> + writer.addAttribute(ATT_CONNECT_TIME, >>>>>>>> Long.toString(res.getConnectTime())); >>>>>>>> + } >>>>>>>> if (save.saveTimestamp()) { >>>>>>>> writer.addAttribute(ATT_TIME_STAMP, >>>>>>>> Long.toString(res.getTimeStamp())); >>>>>>>> } >>>>>>>> @@ -441,6 +445,7 @@ public class SampleResultConverter exten >>>>>>>> Converter.getLong(reader.getAttribute(ATT_TIME))); >>>>>>>> >>>>>>>> res.setIdleTime(Converter.getLong(reader.getAttribute(ATT_IDLETIME))); >>>>>>>> >>>>>>>> res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY))); >>>>>>>> + >>>>>>>> res.setConnectTime(Converter.getLong(reader.getAttribute(ATT_CONNECT_TIME))); >>>>>>>> >>>>>>>> res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES))); >>>>>>>> >>>>>>>> res.setSampleCount(Converter.getInt(reader.getAttribute(ATT_SAMPLE_COUNT),1)); >>>>>>>> // default is 1 >>>>>>>> >>>>>>>> res.setErrorCount(Converter.getInt(reader.getAttribute(ATT_ERROR_COUNT),0)); >>>>>>>> // default is 0 >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -46,17 +46,19 @@ public class TableSample implements Seri >>>>>>>> >>>>>>>> private final long latency; >>>>>>>> >>>>>>>> + private final long connect; >>>>>>>> + >>>>>>>> /** >>>>>>>> * @deprecated for unit test code only >>>>>>>> */ >>>>>>>> @Deprecated >>>>>>>> public TableSample() { >>>>>>>> - this(0, 1, 0, "", "", 0, true, 0, 0); >>>>>>>> + this(0, 1, 0, "", "", 0, true, 0, 0, 0); >>>>>>>> } >>>>>>>> >>>>>>>> public TableSample(long totalSamples, int sampleCount, long >>>>>>>> startTime, String threadName, >>>>>>>> String label, >>>>>>>> - long elapsed, boolean success, long bytes, long latency) { >>>>>>>> + long elapsed, boolean success, long bytes, long latency, >>>>>>>> long connect) { >>>>>>>> this.totalSamples = totalSamples; >>>>>>>> this.sampleCount = sampleCount; >>>>>>>> this.startTime = startTime; >>>>>>>> @@ -67,6 +69,7 @@ public class TableSample implements Seri >>>>>>>> this.bytes = (sampleCount > 0) ? bytes/sampleCount : 0; >>>>>>>> this.success = success; >>>>>>>> this.latency = latency; >>>>>>>> + this.connect = connect; >>>>>>>> } >>>>>>>> >>>>>>>> // The following getters may appear not to be used - however they >>>>>>>> are invoked via the Functor class >>>>>>>> @@ -142,4 +145,10 @@ public class TableSample implements Seri >>>>>>>> return latency; >>>>>>>> } >>>>>>>> >>>>>>>> + /** >>>>>>>> + * @return the conneect time >>>>>>>> + */ >>>>>>>> + public long getConnectTime() { >>>>>>>> + return connect; >>>>>>>> + } >>>>>>>> } >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -73,6 +73,7 @@ import org.apache.http.client.methods.Ht >>>>>>>> import org.apache.http.client.params.ClientPNames; >>>>>>>> import org.apache.http.client.params.CookiePolicy; >>>>>>>> import org.apache.http.client.protocol.ResponseContentEncoding; >>>>>>>> +import org.apache.http.conn.ClientConnectionManager; >>>>>>>> import org.apache.http.conn.ConnectionKeepAliveStrategy; >>>>>>>> import org.apache.http.conn.DnsResolver; >>>>>>>> import org.apache.http.conn.params.ConnRoutePNames; >>>>>>>> @@ -90,7 +91,6 @@ import org.apache.http.impl.client.Abstr >>>>>>>> import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy; >>>>>>>> import org.apache.http.impl.client.DefaultHttpClient; >>>>>>>> import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; >>>>>>>> -import org.apache.http.impl.conn.PoolingClientConnectionManager; >>>>>>>> import org.apache.http.impl.conn.SchemeRegistryFactory; >>>>>>>> import org.apache.http.impl.conn.SystemDefaultDnsResolver; >>>>>>>> import org.apache.http.message.BasicNameValuePair; >>>>>>>> @@ -123,6 +123,7 @@ import org.apache.jmeter.util.JsseSSLMan >>>>>>>> import org.apache.jmeter.util.SSLManager; >>>>>>>> import org.apache.jorphan.logging.LoggingManager; >>>>>>>> import org.apache.log.Logger; >>>>>>>> +import org.htmlparser.http.ConnectionManager; >>>>>>>> >>>>>>>> /** >>>>>>>> * HTTP Sampler using Apache HttpClient 4.x. >>>>>>>> @@ -654,10 +655,9 @@ public class HTTPHC4Impl extends HTTPHCA >>>>>>>> if (resolver == null) { >>>>>>>> resolver = new SystemDefaultDnsResolver(); >>>>>>>> } >>>>>>>> - PoolingClientConnectionManager >>>>>>>> poolingClientConnectionManager = new PoolingClientConnectionManager( >>>>>>>> - SchemeRegistryFactory.createDefault(), resolver); >>>>>>>> + ClientConnectionManager connManager = new >>>>>>>> MeasuringConnectionManager(SchemeRegistryFactory.createDefault(), >>>>>>>> resolver); >>>>>>>> >>>>>>>> - httpClient = new >>>>>>>> DefaultHttpClient(poolingClientConnectionManager, clientParams) { >>>>>>>> + httpClient = new DefaultHttpClient(connManager, >>>>>>>> clientParams) { >>>>>>>> @Override >>>>>>>> protected HttpRequestRetryHandler >>>>>>>> createHttpRequestRetryHandler() { >>>>>>>> return new >>>>>>>> DefaultHttpRequestRetryHandler(RETRY_COUNT, false); // set retry count >>>>>>>> >>>>>>>> Added: >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java?rev=1649629&view=auto >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>>>>>>> (added) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -0,0 +1,268 @@ >>>>>>>> +/* >>>>>>>> + * Licensed to the Apache Software Foundation (ASF) under one or more >>>>>>>> + * contributor license agreements. See the NOTICE file distributed >>>>>>>> with >>>>>>>> + * this work for additional information regarding copyright ownership. >>>>>>>> + * The ASF licenses this file to You under the Apache License, >>>>>>>> Version 2.0 >>>>>>>> + * (the "License"); you may not use this file except in compliance >>>>>>>> with >>>>>>>> + * the License. You may obtain a copy of the License at >>>>>>>> + * >>>>>>>> + * http://www.apache.org/licenses/LICENSE-2.0 >>>>>>>> + * >>>>>>>> + * Unless required by applicable law or agreed to in writing, software >>>>>>>> + * distributed under the License is distributed on an "AS IS" BASIS, >>>>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>>>>>>> implied. >>>>>>>> + * See the License for the specific language governing permissions and >>>>>>>> + * limitations under the License. >>>>>>>> + * >>>>>>>> + */ >>>>>>>> + >>>>>>>> +package org.apache.jmeter.protocol.http.sampler; >>>>>>>> + >>>>>>>> +import org.apache.http.HttpConnectionMetrics; >>>>>>>> +import org.apache.http.HttpException; >>>>>>>> +import org.apache.http.HttpHost; >>>>>>>> +import org.apache.http.HttpResponse; >>>>>>>> +import org.apache.http.HttpRequest; >>>>>>>> +import org.apache.http.HttpEntityEnclosingRequest; >>>>>>>> +import org.apache.http.conn.ClientConnectionRequest; >>>>>>>> +import org.apache.http.conn.ConnectionPoolTimeoutException; >>>>>>>> +import org.apache.http.conn.DnsResolver; >>>>>>>> +import org.apache.http.conn.ManagedClientConnection; >>>>>>>> +import org.apache.http.conn.routing.HttpRoute; >>>>>>>> +import org.apache.http.conn.scheme.SchemeRegistry; >>>>>>>> +import org.apache.http.impl.conn.PoolingClientConnectionManager; >>>>>>>> +import org.apache.http.params.HttpParams; >>>>>>>> +import org.apache.http.protocol.HttpContext; >>>>>>>> +import org.apache.jmeter.samplers.SampleResult; >>>>>>>> + >>>>>>>> +import javax.net.ssl.SSLSession; >>>>>>>> +import java.io.IOException; >>>>>>>> +import java.net.InetAddress; >>>>>>>> +import java.util.concurrent.TimeUnit; >>>>>>>> + >>>>>>>> +/** >>>>>>>> + * Adapter for {@link PoolingClientConnectionManager} >>>>>>>> + * that wraps all connection requests into time-measured >>>>>>>> implementation {@link MeasuringConnectionRequest} >>>>>>>> + */ >>>>>>>> +public class MeasuringConnectionManager extends >>>>>>>> PoolingClientConnectionManager { >>>>>>>> + >>>>>>>> + private MeasuringConnectionRequest measuredConnection; >>>>>>>> + private SampleResult sample; >>>>>>>> + >>>>>>>> + public MeasuringConnectionManager(SchemeRegistry aDefault, >>>>>>>> DnsResolver resolver) { >>>>>>>> + super(aDefault, resolver); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public ClientConnectionRequest requestConnection(final HttpRoute >>>>>>>> route, final Object state) { >>>>>>>> + ClientConnectionRequest res = super.requestConnection(route, >>>>>>>> state); >>>>>>>> + this.measuredConnection = new MeasuringConnectionRequest(res, >>>>>>>> this.sample); >>>>>>>> + return this.measuredConnection; >>>>>>>> + } >>>>>>>> + >>>>>>>> + public void setSample(SampleResult sample) { >>>>>>>> + this.sample = sample; >>>>>>>> + } >>>>>>>> + >>>>>>>> + /** >>>>>>>> + * And adapter class to pass {@link SampleResult} into {@link >>>>>>>> MeasuredConnection} >>>>>>>> + */ >>>>>>>> + private static class MeasuringConnectionRequest implements >>>>>>>> ClientConnectionRequest { >>>>>>>> + private final ClientConnectionRequest handler; >>>>>>>> + private final SampleResult sample; >>>>>>>> + >>>>>>>> + public MeasuringConnectionRequest(ClientConnectionRequest >>>>>>>> res, SampleResult sample) { >>>>>>>> + handler = res; >>>>>>>> + this.sample = sample; >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public ManagedClientConnection getConnection(long timeout, >>>>>>>> TimeUnit tunit) throws InterruptedException, >>>>>>>> ConnectionPoolTimeoutException { >>>>>>>> + ManagedClientConnection res = >>>>>>>> handler.getConnection(timeout, tunit); >>>>>>>> + return new MeasuredConnection(res, this.sample); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void abortRequest() { >>>>>>>> + handler.abortRequest(); >>>>>>>> + } >>>>>>>> + } >>>>>>>> + >>>>>>>> + /** >>>>>>>> + * An adapter for {@link ManagedClientConnection} >>>>>>>> + * that calls SampleResult.connectEnd after calling >>>>>>>> ManagedClientConnection.open >>>>>>>> + */ >>>>>>>> + private static class MeasuredConnection implements >>>>>>>> ManagedClientConnection { >>>>>>>> + private final ManagedClientConnection handler; >>>>>>>> + private final SampleResult sample; >>>>>>>> + >>>>>>>> + public MeasuredConnection(ManagedClientConnection res, >>>>>>>> SampleResult sample) { >>>>>>>> + handler = res; >>>>>>>> + this.sample = sample; >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void open(HttpRoute route, HttpContext context, >>>>>>>> HttpParams params) throws IOException { >>>>>>>> + handler.open(route, context, params); >>>>>>>> + if (sample != null) { >>>>>>>> + sample.connectEnd(); >>>>>>>> + } >>>>>>>> + } >>>>>>>> + >>>>>>>> + // ================= all following methods just wraps >>>>>>>> handler's ================= >>>>>>>> + @Override >>>>>>>> + public boolean isSecure() { >>>>>>>> + return handler.isSecure(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public HttpRoute getRoute() { >>>>>>>> + return handler.getRoute(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public SSLSession getSSLSession() { >>>>>>>> + return handler.getSSLSession(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void tunnelTarget(boolean secure, HttpParams params) >>>>>>>> throws IOException { >>>>>>>> + handler.tunnelTarget(secure, params); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void tunnelProxy(HttpHost next, boolean secure, >>>>>>>> HttpParams params) throws IOException { >>>>>>>> + handler.tunnelProxy(next, secure, params); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void layerProtocol(HttpContext context, HttpParams >>>>>>>> params) throws IOException { >>>>>>>> + handler.layerProtocol(context, params); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void markReusable() { >>>>>>>> + handler.markReusable(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void unmarkReusable() { >>>>>>>> + handler.unmarkReusable(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public boolean isMarkedReusable() { >>>>>>>> + return handler.isMarkedReusable(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void setState(Object state) { >>>>>>>> + handler.setState(state); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public Object getState() { >>>>>>>> + return handler.getState(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void setIdleDuration(long duration, TimeUnit unit) { >>>>>>>> + handler.setIdleDuration(duration, unit); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void releaseConnection() throws IOException { >>>>>>>> + handler.releaseConnection(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void abortConnection() throws IOException { >>>>>>>> + handler.abortConnection(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public boolean isResponseAvailable(int timeout) throws >>>>>>>> IOException { >>>>>>>> + return handler.isResponseAvailable(timeout); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void sendRequestHeader(HttpRequest request) throws >>>>>>>> HttpException, IOException { >>>>>>>> + handler.sendRequestHeader(request); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void sendRequestEntity(HttpEntityEnclosingRequest >>>>>>>> request) throws HttpException, IOException { >>>>>>>> + handler.sendRequestEntity(request); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public HttpResponse receiveResponseHeader() throws >>>>>>>> HttpException, IOException { >>>>>>>> + return handler.receiveResponseHeader(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void receiveResponseEntity(HttpResponse response) >>>>>>>> throws HttpException, IOException { >>>>>>>> + handler.receiveResponseEntity(response); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void flush() throws IOException { >>>>>>>> + handler.flush(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public InetAddress getLocalAddress() { >>>>>>>> + return handler.getLocalAddress(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public int getLocalPort() { >>>>>>>> + return handler.getLocalPort(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public InetAddress getRemoteAddress() { >>>>>>>> + return handler.getRemoteAddress(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public int getRemotePort() { >>>>>>>> + return handler.getRemotePort(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void close() throws IOException { >>>>>>>> + handler.close(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public boolean isOpen() { >>>>>>>> + return handler.isOpen(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public boolean isStale() { >>>>>>>> + return handler.isStale(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void setSocketTimeout(int timeout) { >>>>>>>> + handler.setSocketTimeout(timeout); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public int getSocketTimeout() { >>>>>>>> + return handler.getSocketTimeout(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public void shutdown() throws IOException { >>>>>>>> + handler.shutdown(); >>>>>>>> + } >>>>>>>> + >>>>>>>> + @Override >>>>>>>> + public HttpConnectionMetrics getMetrics() { >>>>>>>> + return handler.getMetrics(); >>>>>>>> + } >>>>>>>> + } >>>>>>>> +} >>>>>>>> >>>>>>>> Modified: >>>>>>>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- >>>>>>>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>>>>>>> (original) >>>>>>>> +++ >>>>>>>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>>>>>>> Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -84,6 +84,7 @@ public class JDBCSampler extends Abstrac >>>>>>>> try { >>>>>>>> conn = >>>>>>>> DataSourceElement.getConnection(getDataSource()); >>>>>>>> } finally { >>>>>>>> + // FIXME: there is separate connect time field now >>>>>>>> res.latencyEnd(); // use latency to measure >>>>>>>> connection time >>>>>>>> } >>>>>>>> res.setResponseHeaders(conn.toString()); >>>>>>>> >>>>>>>> Modified: jmeter/trunk/xdocs/changes.xml >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/xdocs/changes.xml (original) >>>>>>>> +++ jmeter/trunk/xdocs/changes.xml Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -55,6 +55,7 @@ Summary >>>>>>>> <!-- <ch_title>Sample title</ch_title> >>>>>>>> <p> >>>>>>>> <ul> >>>>>>>> +<li><bugzilla>48799</bugzilla> - Add time to establish connection to >>>>>>>> available sample metrics. Implemented by Andrey Pokhilko (andrey at >>>>>>>> blazemeter.com) and contributed by BlazeMeter Ltd.</li> >>>>>>>> <li>Sample text</li> >>>>>>>> </ul> >>>>>>>> </p> >>>>>>>> >>>>>>>> Modified: jmeter/trunk/xdocs/usermanual/glossary.xml >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/glossary.xml?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/xdocs/usermanual/glossary.xml (original) >>>>>>>> +++ jmeter/trunk/xdocs/usermanual/glossary.xml Mon Jan 5 19:49:06 2015 >>>>>>>> @@ -48,6 +48,10 @@ browser or other application client. >>>>>>>> </p> >>>>>>>> >>>>>>>> <p> >>>>>>>> +<a name="Connect"><b>Connect Time</b></a>. JMeter measures the time >>>>>>>> it took to estable the connection, including SSL handshake. Note that >>>>>>>> connect time is not automatically subtracted from <a >>>>>>>> href="#Latency">latency</a>. >>>>>>>> +</p> >>>>>>>> + >>>>>>>> +<p> >>>>>>>> <a name="Median"><b>Median</b></a> is a number which divides the >>>>>>>> samples into two equal halves. >>>>>>>> Half of the samples are smaller than the median, and half are larger. >>>>>>>> [Some samples may equal the median.] >>>>>>>> >>>>>>>> Modified: jmeter/trunk/xdocs/usermanual/listeners.xml >>>>>>>> URL: >>>>>>>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/listeners.xml?rev=1649629&r1=1649628&r2=1649629&view=diff >>>>>>>> ============================================================================== >>>>>>>> --- jmeter/trunk/xdocs/usermanual/listeners.xml (original) >>>>>>>> +++ jmeter/trunk/xdocs/usermanual/listeners.xml Mon Jan 5 19:49:06 >>>>>>>> 2015 >>>>>>>> @@ -137,6 +137,7 @@ The full set of properties that affect r >>>>>>>> #jmeter.save.saveservice.subresults=true >>>>>>>> #jmeter.save.saveservice.assertions=true >>>>>>>> #jmeter.save.saveservice.latency=true >>>>>>>> +#jmeter.save.saveservice.connect_time=false >>>>>>>> #jmeter.save.saveservice.samplerData=false >>>>>>>> #jmeter.save.saveservice.responseHeaders=false >>>>>>>> #jmeter.save.saveservice.requestHeaders=false >>>>>>>> @@ -304,6 +305,7 @@ The order of appearance of columns is fi >>>>>>>> <li>URL</li> >>>>>>>> <li>Filename - if Save Response to File was used</li> >>>>>>>> <li>latency - time to first response</li> >>>>>>>> +<li>connect - time to establish connection</li> >>>>>>>> <li>encoding</li> >>>>>>>> <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> >>>>>>>> @@ -427,6 +429,7 @@ The sample attributes have the following >>>>>>>> <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>lt</td><td>Connect Time = time to establish the connection >>>>>>>> (milliseconds) - not all samplers support this</td></tr> >>>>>>>> <tr><td>na</td><td>Number of active threads for all thread >>>>>>>> groups</td></tr> >>>>>>>> <tr><td>ng</td><td>Number of active threads in this group</td></tr> >>>>>>>> <tr><td>rc</td><td>Response Code (e.g. 200)</td></tr> >>>>>>>> >>>>>>>> >
