Author: woolfel
Date: Mon Oct 24 20:45:17 2005
New Revision: 328249

URL: http://svn.apache.org/viewcvs?rev=328249&view=rev
Log:
checking in part of the contribution submitted by Lars Krog-Jensen.

I still need to go over the visualizer and change it to use JCharts

peter lin

Added:
    
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
    
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleSender.java
Modified:
    
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleEvent.java
    
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleResult.java
    
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java

Modified: 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleEvent.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleEvent.java?rev=328249&r1=328248&r2=328249&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleEvent.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleEvent.java
 Mon Oct 24 20:45:17 2005
@@ -19,6 +19,8 @@
 package org.apache.jmeter.samplers;
 
 import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 
 /**
  * Packages information regarding the target of a sample event, such as the
@@ -27,16 +29,29 @@
  * @version $Revision$
  */
 public class SampleEvent implements Serializable {
+       public static String HOSTNMAME;
+
+       static {
+               try {
+                       HOSTNMAME = InetAddress.getLocalHost().getHostName();
+               } catch (UnknownHostException e) {
+                       e.printStackTrace();
+               }
+       }
+
        SampleResult result;
 
        String threadGroup;
 
+       String hostname;
+
        public SampleEvent() {
        }
 
        public SampleEvent(SampleResult result, String threadGroup) {
                this.result = result;
                this.threadGroup = threadGroup;
+               this.hostname = HOSTNMAME;
        }
 
        public SampleResult getResult() {
@@ -45,5 +60,9 @@
 
        public String getThreadGroup() {
                return threadGroup;
+       }
+
+       public String getHostname() {
+               return hostname;
        }
 }

Modified: 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleResult.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=328249&r1=328248&r2=328249&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleResult.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleResult.java
 Mon Oct 24 20:45:17 2005
@@ -109,9 +109,9 @@
 
        private long timeStamp = 0;// the time stamp - can be start or end
 
-       private long startTime = 0;
+       private long startTime = 0; // changed to protected for subclass
 
-       private long endTime = 0;
+       private long endTime = 0; // changed to protected for subclass
 
        private long idleTime = 0;// Allow for non-sample time
 
@@ -545,6 +545,13 @@
                contentType = string;
        }
 
+    /**
+     * @return idleTime
+     */
+    public long getIdleTime() {
+        return idleTime;
+    }
+    
        /**
         * @return the end time
         */
@@ -572,7 +579,7 @@
                }
        }
 
-       private void setEndTime(long end) {
+       protected void setEndTime(long end) {
                endTime = end;
                if (!startTimeStamp) {
                        timeStamp = endTime;

Modified: 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java?rev=328249&r1=328248&r2=328249&view=diff
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java
 Mon Oct 24 20:45:17 2005
@@ -18,9 +18,11 @@
 package org.apache.jmeter.samplers;
 
 import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jmeter.samplers.StatisticalSampleSender;
 
 /**
  * @author Michael Freeman
+ * 10/24/2005 - added statistical mode for distributed testing
  */
 public class SampleSenderFactory {
        /**
@@ -43,6 +45,9 @@
                } else if (type.equalsIgnoreCase("Batch")) {
                        BatchSampleSender b = new BatchSampleSender(listener);
                        return b;
+               } else if (type.equalsIgnoreCase("Statistical")) {
+                       StatisticalSampleSender s = new 
StatisticalSampleSender(listener);
+                       return s;
                } else {
                        StandardSampleSender s = new 
StandardSampleSender(listener);
                        return s;

Added: 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java?rev=328249&view=auto
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
 (added)
+++ 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java
 Mon Oct 24 20:45:17 2005
@@ -0,0 +1,78 @@
+/*

+ * Copyright 2005 The Apache Software Foundation.

+ *

+ * Licensed 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.samplers;

+

+import java.io.Serializable;

+

+/**

+ * @author Lars Krog-Jensen

+ *         Created: 2005-okt-04

+ */

+public class StatisticalSampleResult extends SampleResult implements

+               Serializable {

+

+       protected int errorCount;

+

+       public StatisticalSampleResult(SampleResult res) {

+               setSampleLabel(res.getSampleLabel());

+       }

+

+       public void add(SampleResult res) {

+               // Add Sample Counter

+               setSampleCount(getSampleCount() + res.getSampleCount());

+

+               // Add bytes

+               int bytesLength = 0;

+               // in case the sampler doesn't return the contents

+               // we see if the bytes was set

+               if (res.getResponseData() == null || 
res.getResponseData().length == 0) {

+                       bytesLength = res.getBytes();

+               } else {

+                       bytesLength = res.getResponseData().length;

+               }

+               setBytes(getBytes() + bytesLength);

+

+               // Add Error Counter

+               if (!res.isSuccessful()) {

+                       errorCount++;

+               }

+

+               // Set start/end times

+               this.setStartTime(Math.min(getStartTime(), res.getStartTime()));

+               this.setEndTime(Math.max(getEndTime(), res.getEndTime()));

+       }

+

+       public long getTime() {

+               return getEndTime() - getStartTime() - this.getIdleTime();

+       }

+

+       public long getTimeStamp() {

+               return getEndTime();

+       }

+

+       public int getErrorCount() {

+               return errorCount;

+       }

+

+       public static String getKey(SampleEvent event) {

+               String key = event.getResult().getSampleLabel() + "-"

+                               + event.getThreadGroup();

+

+               return key;

+       }

+}


Added: 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleSender.java
URL: 
http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleSender.java?rev=328249&view=auto
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleSender.java
 (added)
+++ 
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/samplers/StatisticalSampleSender.java
 Mon Oct 24 20:45:17 2005
@@ -0,0 +1,181 @@
+/*

+ * Copyright 2005 The Apache Software Foundation.

+ *

+ * Licensed 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.samplers;

+

+import org.apache.jmeter.util.JMeterUtils;

+import org.apache.jorphan.logging.LoggingManager;

+import org.apache.log.Logger;

+

+import java.io.Serializable;

+import java.rmi.RemoteException;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+

+/**

+ * Implements batch reporting for remote testing.

+ *

+ * @author Lars Krog-Jensen

+ *         Created: 2005-okt-04

+ */

+public class StatisticalSampleSender implements SampleSender, Serializable {

+       transient private static Logger log = 
LoggingManager.getLoggerForClass();

+

+       private static final int DEFAULT_NUM_SAMPLE_THRESHOLD = 100;

+

+       private static final long DEFAULT_TIME_THRESHOLD = 60000L;

+

+       private RemoteSampleListener listener;

+

+       private List sampleStore = new ArrayList();

+

+       private Map sampleTable = new HashMap();

+

+       private int numSamplesThreshold;

+

+       private int sampleCount;

+

+       private long timeThreshold;

+

+       private long batchSendTime = -1;

+

+       /**

+        * Constructor

+        *

+        * @param listener that the List of sample events will be sent to.

+        */

+       StatisticalSampleSender(RemoteSampleListener listener) {

+               this.listener = listener;

+               init();

+               log.info("Using batching for this run." + " Thresholds: num="

+                               + numSamplesThreshold + ", time=" + 
timeThreshold);

+       }

+

+       /**

+        * Checks for the Jmeter properties num_sample_threshold and 
time_threshold,

+        * and assigns defaults if not found.

+        */

+       private void init() {

+               this.numSamplesThreshold = JMeterUtils.getPropDefault(

+                               "num_sample_threshold", 
DEFAULT_NUM_SAMPLE_THRESHOLD);

+               this.timeThreshold = 
JMeterUtils.getPropDefault("time_threshold",

+                               DEFAULT_TIME_THRESHOLD);

+       }

+

+       /**

+        * Checks if any sample events are still present in the sampleStore and

+        * sends them to the listener. Informs the listener of the testended.

+        */

+       public void testEnded() {

+               try {

+                       if (sampleStore.size() != 0) {

+                               sendBatch();

+                       }

+                       listener.testEnded();

+               } catch (RemoteException err) {

+                       log.warn("testEnded()", err);

+               }

+       }

+

+       /**

+        * Checks if any sample events are still present in the sampleStore and

+        * sends them to the listener. Informs the listener of the testended.

+        *

+        * @param host the hostname that the test has ended on.

+        */

+       public void testEnded(String host) {

+               try {

+                       if (sampleStore.size() != 0) {

+                               sendBatch();

+                       }

+                       listener.testEnded(host);

+               } catch (RemoteException err) {

+                       log.warn("testEnded(hostname)", err);

+               }

+       }

+

+       /**

+        * Stores sample events untill either a time or sample threshold is

+        * breached. Both thresholds are reset if one fires. If only one 
threshold

+        * is set it becomes the only value checked against. When a threhold is

+        * breached the list of sample events is sent to a listener where the 
event

+        * are fired locally.

+        *

+        * @param e a Sample Event

+        */

+       public void SampleOccurred(SampleEvent e) {

+               synchronized (sampleStore) {

+                       // Locate the statistical sample colector

+                       String key = StatisticalSampleResult.getKey(e);

+                       StatisticalSampleResult statResult = 
(StatisticalSampleResult) sampleTable

+                                       .get(key);

+                       if (statResult == null) {

+                               statResult = new 
StatisticalSampleResult(e.getResult());

+                               // store the new statistical result collector

+                               sampleTable.put(key, statResult);

+                               // add a new wrapper samplevent

+                               sampleStore

+                                               .add(new 
SampleEvent(statResult, e.getThreadGroup()));

+                       }

+                       statResult.add(e.getResult());

+                       sampleCount++;

+                       if (numSamplesThreshold != -1) {

+                               if (sampleCount >= numSamplesThreshold) {

+                                       try {

+                                               if (log.isDebugEnabled()) {

+                                                       log.debug("Firing 
sample");

+                                               }

+                                               sendBatch();

+                                       } catch (RemoteException err) {

+                                               log.warn("sampleOccurred", err);

+                                       }

+                               }

+                       }

+

+                       if (timeThreshold != -1) {

+                               long now = System.currentTimeMillis();

+                               // Checking for and creating initial timestamp 
to cheak against

+                               if (batchSendTime == -1) {

+                                       this.batchSendTime = now + 
timeThreshold;

+                               }

+

+                               if (batchSendTime < now) {

+                                       try {

+                                               if (log.isDebugEnabled()) {

+                                                       log.debug("Firing 
time");

+                                               }

+                                               sendBatch();

+                                               this.batchSendTime = now + 
timeThreshold;

+                                       } catch (RemoteException err) {

+                                               log.warn("sampleOccurred", err);

+                                       }

+                               }

+                       }

+               }

+       }

+

+       private void sendBatch() throws RemoteException {

+               if (sampleStore.size() > 0) {

+                       listener.processBatch(sampleStore);

+                       sampleStore.clear();

+                       sampleTable.clear();

+                       sampleCount = 0;

+               }

+       }

+}




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to