jsalvata 2003/11/29 07:43:18
Modified: src/core/org/apache/jmeter/resources messages.properties
src/protocol/http/org/apache/jmeter/protocol/http/proxy
ProxyControl.java
src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui
ProxyControlGui.java
Log:
Add a combo in the HTTP Proxy Server to select a
controller to store the generated samples. The default
selection is still to use the recording controller.
Revision Changes Path
1.72 +1 -0
jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties
Index: messages.properties
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- messages.properties 29 Nov 2003 00:41:30 -0000 1.71
+++ messages.properties 29 Nov 2003 15:43:18 -0000 1.72
@@ -280,6 +280,7 @@
proxy_cl_error=If specifying a proxy server, host and port must be given
proxy_headers=Capture HTTP Headers
proxy_separators=Add Separators
+proxy_target=Target Controller:
proxy_title=HTTP Proxy Server
proxy_usekeepalive=Set Keep-Alive
ramp_up=Ramp-Up Period (in seconds):
1.34 +108 -75
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
Index: ProxyControl.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- ProxyControl.java 18 Nov 2003 19:02:43 -0000 1.33
+++ ProxyControl.java 29 Nov 2003 15:43:18 -0000 1.34
@@ -51,6 +51,10 @@
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
+ *
+ * @author Michael Stover
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jordi Salvat i Alabart</a>
+ * @version $Id$
*/
package org.apache.jmeter.protocol.http.proxy;
@@ -84,18 +88,17 @@
import org.apache.jmeter.testelement.property.PropertyIterator;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.util.JMeterUtils;
+
import org.apache.jorphan.logging.LoggingManager;
+
import org.apache.log.Logger;
+
import org.apache.oro.text.MalformedCachePatternException;
import org.apache.oro.text.PatternCacheLRU;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
-/**
- * @author Michael Stover
- * @version $Revision$
- */
public class ProxyControl extends ConfigTestElement implements Serializable
{
transient private static Logger log = LoggingManager.getLoggerForClass();
@@ -114,14 +117,20 @@
public static final String ADD_SEPARATORS = "ProxyControlGui.add_separator";
public static final String USE_KEEPALIVE = "ProxyControlGui.use_keepalive";
-
private long lastTime = 0;//When was the last sample seen?
private static final long sampleGap =
JMeterUtils.getPropDefault("proxy.pause",1000);//Detect if user has
pressed a new link
private boolean addAssertions;
private boolean addSeparators;
private boolean useKeepAlive;
-
+
+ /**
+ * Tree node where the samples should be stored.
+ * <p>
+ * This property is not persistent.
+ */
+ private JMeterTreeNode target;
+
public ProxyControl()
{
matcher = new Perl5Matcher();
@@ -239,6 +248,23 @@
{
getIncludePatterns().clear();
}
+
+ /**
+ * @return the target controller node
+ */
+ public JMeterTreeNode getTarget()
+ {
+ return target;
+ }
+
+ /**
+ * Sets the target node where the samples generated by the proxy have
+ * to be stored.
+ */
+ public void setTarget(JMeterTreeNode target)
+ {
+ this.target= target;
+ }
/**
* Receives the recorded sampler from the proxy server for placing in the
@@ -340,90 +366,97 @@
HTTPSampler sampler,
TestElement[] subConfigs)
{
- //NOTUSED ValueReplacer replacer = GuiPackage.getInstance().getReplacer();
TestElement urlConfig = null;
JMeterTreeModel treeModel = GuiPackage.getInstance().getTreeModel();
- List nodes = treeModel.getNodesOfType(RecordingController.class);
- if (nodes.size() == 0)
+ if (target == null)
{
- nodes = treeModel.getNodesOfType(ThreadGroup.class);
+ List nodes = treeModel.getNodesOfType(RecordingController.class);
+ Iterator iter= nodes.iterator();
+ while (iter.hasNext()) {
+ JMeterTreeNode node= (JMeterTreeNode) iter.next();
+ if (node.isEnabled()) {
+ target= node;
+ break;
+ }
+ }
}
- Iterator iter = nodes.iterator();
- while (iter.hasNext())
+ if (target == null)
{
- JMeterTreeNode node = (JMeterTreeNode) iter.next();
+ List nodes = treeModel.getNodesOfType(ThreadGroup.class);
+ Iterator iter = nodes.iterator();
+ while (iter.hasNext()) {
+ JMeterTreeNode node= (JMeterTreeNode) iter.next();
+ if (node.isEnabled()) {
+ target= node;
+ break;
+ }
+ }
+ }
- if (!node.isEnabled())
+ Enumeration enum = target.children();
+ String guiClassName = null;
+ while (enum.hasMoreElements())
+ {
+ JMeterTreeNode subNode =
+ (JMeterTreeNode) enum.nextElement();
+ TestElement sample =
+ (TestElement) subNode.createTestElement();
+ guiClassName =
+ sample.getPropertyAsString(TestElement.GUI_CLASS);
+ if (guiClassName.equals(UrlConfigGui.class.getName())
+ || guiClassName.equals(HttpDefaultsGui.class.getName()))
{
- continue;
+ urlConfig = sample;
+ break;
}
- else
+ }
+
+ if (areMatched(sampler, urlConfig))
+ {
+ removeValuesFromSampler(sampler, urlConfig);
+ replaceValues(sampler,subConfigs);
+ sampler.setUseKeepAlive(useKeepAlive);
+ sampler.setProperty(
+ TestElement.GUI_CLASS,
+ "org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui");
+ try
{
- Enumeration enum = node.children();
- String guiClassName = null;
- while (enum.hasMoreElements())
- {
- JMeterTreeNode subNode =
- (JMeterTreeNode) enum.nextElement();
- TestElement sample =
- (TestElement) subNode.createTestElement();
- guiClassName =
- sample.getPropertyAsString(TestElement.GUI_CLASS);
- if (guiClassName.equals(UrlConfigGui.class.getName())
- || guiClassName.equals(HttpDefaultsGui.class.getName()))
- {
- urlConfig = sample;
- break;
- }
+ boolean firstInBatch=false;
+ if (lastTime == 0){
+ lastTime = System.currentTimeMillis();
+ firstInBatch=true;
}
- if (areMatched(sampler, urlConfig))
- {
- removeValuesFromSampler(sampler, urlConfig);
- replaceValues(sampler,subConfigs);
- sampler.setUseKeepAlive(useKeepAlive);
- sampler.setProperty(
- TestElement.GUI_CLASS,
-
"org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui");
- try
- {
- boolean firstInBatch=false;
- if (lastTime == 0){
- lastTime =
System.currentTimeMillis();
- firstInBatch=true;
- }
- long now = System.currentTimeMillis();
- if (now - lastTime > sampleGap){
- addDivider(treeModel,node);
- firstInBatch=true;//Remember to save the new node
- }
- lastTime = System.currentTimeMillis();
+ long now = System.currentTimeMillis();
+ if (now - lastTime > sampleGap){
+ addDivider(treeModel,target);
+ firstInBatch=true;//Remember to save the new node
+ }
+ lastTime = System.currentTimeMillis();
- JMeterTreeNode newNode =
- treeModel.addComponent(sampler, node);
+ JMeterTreeNode newNode =
+ treeModel.addComponent(sampler, target);
- if(firstInBatch){
- addAssertion(treeModel,newNode);
- firstInBatch=false;
- }
-
- for (int i = 0;
- subConfigs != null && i < subConfigs.length;
- i++)
- {
- if (subConfigs[i] instanceof HeaderManager)
- {
- subConfigs[i].setProperty(
- TestElement.GUI_CLASS,
-
"org.apache.jmeter.protocol.http.gui.HeaderPanel");
- treeModel.addComponent(subConfigs[i], newNode);
- }
- }
- }
- catch (IllegalUserActionException e)
+ if(firstInBatch){
+ addAssertion(treeModel,newNode);
+ firstInBatch=false;
+ }
+
+ for (int i = 0;
+ subConfigs != null && i < subConfigs.length;
+ i++)
+ {
+ if (subConfigs[i] instanceof HeaderManager)
{
- JMeterUtils.reportErrorToUser(e.getMessage());
+ subConfigs[i].setProperty(
+ TestElement.GUI_CLASS,
+ "org.apache.jmeter.protocol.http.gui.HeaderPanel");
+ treeModel.addComponent(subConfigs[i], newNode);
}
}
+ }
+ catch (IllegalUserActionException e)
+ {
+ JMeterUtils.reportErrorToUser(e.getMessage());
}
}
}
1.27 +200 -16
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui/ProxyControlGui.java
Index: ProxyControlGui.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui/ProxyControlGui.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- ProxyControlGui.java 16 Nov 2003 02:31:49 -0000 1.26
+++ ProxyControlGui.java 29 Nov 2003 15:43:18 -0000 1.27
@@ -51,6 +51,11 @@
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
+ *
+ * @author Michael Stover
+ * @author Thad Smith (controller combo code, taken from ModuleController)
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jordi Salvat i Alabart</a>
+ * @version $Id$
*/
package org.apache.jmeter.protocol.http.proxy.gui;
@@ -69,8 +74,10 @@
import javax.swing.BorderFactory;
import javax.swing.Box;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@@ -79,30 +86,27 @@
import javax.swing.JTable;
import javax.swing.JTextField;
+import org.apache.jmeter.control.Controller;
import org.apache.jmeter.engine.util.ValueReplacer;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.gui.AbstractJMeterGuiComponent;
import org.apache.jmeter.gui.GuiPackage;
import org.apache.jmeter.gui.JMeterGUIComponent;
import org.apache.jmeter.gui.UnsharedComponent;
+import org.apache.jmeter.gui.action.ActionRouter;
import org.apache.jmeter.gui.tree.JMeterTreeNode;
import org.apache.jmeter.gui.util.HorizontalPanel;
import org.apache.jmeter.gui.util.MenuFactory;
import org.apache.jmeter.gui.util.PowerTableModel;
import org.apache.jmeter.protocol.http.proxy.ProxyControl;
import org.apache.jmeter.testelement.TestElement;
+import org.apache.jmeter.testelement.TestPlan;
+import org.apache.jmeter.testelement.WorkBench;
import org.apache.jmeter.testelement.property.PropertyIterator;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
-/****************************************
- * Title: Jakarta-JMeter
- *
- [EMAIL PROTECTED] Michael Stover
- [EMAIL PROTECTED] $Revision$ Last updated: $Date$
- ***************************************/
-
public class ProxyControlGui
extends AbstractJMeterGuiComponent
implements
@@ -139,13 +143,20 @@
*/
private JCheckBox useKeepAlive;
+ /**
+ * List of available target controllers
+ */
+ private JComboBox targetNodes;
+ private DefaultComboBoxModel targetNodesModel;
+
private ProxyControl model;
private JTable excludeTable;
private PowerTableModel excludeModel;
private JTable includeTable;
private PowerTableModel includeModel;
-
+ private static final String CHANGE_TARGET = "change_target";
+
private JButton stop, start, restart;
private static final String STOP = "stop";
private static final String START = "start";
@@ -205,6 +216,15 @@
model.setSeparators(addSeparators.isSelected());
model.setAssertions(addAssertions.isSelected());
model.setUseKeepAlive(useKeepAlive.isSelected());
+ TreeNodeWrapper nw= (TreeNodeWrapper)targetNodes.getSelectedItem();
+ if (nw == null)
+ {
+ model.setTarget(null);
+ }
+ else
+ {
+ model.setTarget(nw.getTreeNode());
+ }
}
}
@@ -251,6 +271,9 @@
addSeparators.setSelected(model.getPropertyAsBoolean(ProxyControl.ADD_SEPARATORS));
addAssertions.setSelected(model.getPropertyAsBoolean(ProxyControl.ADD_ASSERTIONS));
useKeepAlive.setSelected(model.getPropertyAsBoolean(ProxyControl.USE_KEEPALIVE,true));
+
+ reinitializeTargetCombo();
+
populateTable(includeModel, model.getIncludePatterns().iterator());
populateTable(excludeModel, model.getExcludePatterns().iterator());
repaint();
@@ -293,6 +316,7 @@
model.stopProxy();
stop.setEnabled(false);
start.setEnabled(true);
+ restart.setEnabled(false);
}
else if (command.equals(START))
{
@@ -337,6 +361,20 @@
includeModel.fireTableDataChanged();
enableRestart();
}
+ else if (command.equals(CHANGE_TARGET))
+ {
+ log.debug("Change target "+targetNodes.getSelectedItem());
+ log.debug("In model "+model);
+ TreeNodeWrapper nw= (TreeNodeWrapper)targetNodes.getSelectedItem();
+ if (nw == null)
+ {
+ model.setTarget(null);
+ }
+ else
+ {
+ model.setTarget(nw.getTreeNode());
+ }
+ }
}
private void startProxy()
@@ -431,8 +469,14 @@
add(makeTitlePanel(), BorderLayout.NORTH);
JPanel mainPanel = new JPanel(new BorderLayout());
- mainPanel.add(createPortPanel(), BorderLayout.NORTH);
-
+
+ Box portTargetPanel = Box.createVerticalBox();
+ portTargetPanel.add(createPortPanel());
+ portTargetPanel.add(Box.createVerticalStrut(5));
+ portTargetPanel.add(createTargetPanel());
+ portTargetPanel.add(Box.createVerticalStrut(5));
+ mainPanel.add(portTargetPanel, BorderLayout.NORTH);
+
Box includeExcludePanel = Box.createVerticalBox();
includeExcludePanel.add(createIncludePanel());
includeExcludePanel.add(createExcludePanel());
@@ -514,6 +558,45 @@
return panel;
}
+ private JPanel createTargetPanel()
+ {
+ targetNodesModel= new DefaultComboBoxModel();
+ targetNodes = new JComboBox(targetNodesModel);
+ targetNodes.addActionListener(this);
+ targetNodes.setActionCommand(CHANGE_TARGET);
+
+ JLabel label = new JLabel(JMeterUtils.getResString("proxy_target"));
+ label.setLabelFor(targetNodes);
+
+ HorizontalPanel panel = new HorizontalPanel();
+ panel.add(label);
+ panel.add(targetNodes);
+
+ try
+ {
+ Class addToTree =
+ Class.forName("org.apache.jmeter.gui.action.AddToTree");
+ Class remove = Class.forName("org.apache.jmeter.gui.action.Remove");
+ ActionListener listener = new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ reinitializeTargetCombo();
+ }
+ };
+ ActionRouter ar = ActionRouter.getInstance();
+ ar.addPostActionListener(addToTree, listener);
+ ar.addPostActionListener(remove, listener);
+ }
+ catch (ClassNotFoundException e)
+ {
+ // This should never happen -- throw an Error:
+ throw new Error(e);
+ }
+
+ return panel;
+ }
+
private JPanel createIncludePanel()
{
includeModel = new PowerTableModel(
@@ -576,17 +659,118 @@
return buttonPanel;
}
+ private void reinitializeTargetCombo() {
+ log.debug("Reinitializing target combo");
+ targetNodesModel.removeAllElements();
+ GuiPackage gp = GuiPackage.getInstance();
+ JMeterTreeNode root;
+ if (gp != null)
+ {
+ root =
+ (JMeterTreeNode) GuiPackage
+ .getInstance()
+ .getTreeModel()
+ .getRoot();
+ targetNodesModel.addElement(
+ new TreeNodeWrapper(null, "Use Recording Controller"));
+ buildNodesModel(root, "", 0);
+ }
+ for (int i = 0; i < targetNodesModel.getSize(); i++)
+ {
+ TreeNodeWrapper choice =
+ (TreeNodeWrapper) targetNodesModel.getElementAt(i);
+ if (choice.getTreeNode() == model.getTarget()) // .equals caused NPE
+ {
+ log.debug("Selecting item "+choice);
+ targetNodesModel.setSelectedItem(choice);
+ break;
+ }
+ }
+ log.debug("Reinitialization complete");
+ }
+
+ private void buildNodesModel(
+ JMeterTreeNode node,
+ String parent_name,
+ int level)
+ {
+ String seperator = " > ";
+ if (node != null)
+ {
+ for (int i = 0; i < node.getChildCount(); i++)
+ {
+ StringBuffer name = new StringBuffer();
+ JMeterTreeNode cur = (JMeterTreeNode) node.getChildAt(i);
+ TestElement te = cur.createTestElement();
+ if (te instanceof ThreadGroup)
+ {
+ name.append(parent_name);
+ name.append(cur.getName());
+ name.append(seperator);
+ buildNodesModel(cur, name.toString(), level);
+ }
+ else if (te instanceof Controller)
+ {
+ name.append(spaces(level));
+ name.append(parent_name);
+ name.append(cur.getName());
+ TreeNodeWrapper tnw =
+ new TreeNodeWrapper(cur, name.toString());
+ targetNodesModel.addElement(tnw);
+ name = new StringBuffer();
+ name.append(cur.getName());
+ name.append(seperator);
+ buildNodesModel(cur, name.toString(), level + 1);
+ }
+ else if (te instanceof TestPlan || te instanceof WorkBench)
+ {
+ name.append(cur.getName());
+ name.append(seperator);
+ buildNodesModel(cur, name.toString(), 0);
+ }
+ }
+ }
+ }
+
+ private String spaces(int level)
+ {
+ int multi = 4;
+ StringBuffer spaces = new StringBuffer(level * multi);
+ for (int i = 0; i < level * multi; i++)
+ {
+ spaces.append(" ");
+ }
+ return spaces.toString();
+ }
+
public void setNode(JMeterTreeNode node)
{
getNamePanel().setNode(node);
}
+}
- /**
- * Returns the portField.
- * @return JTextField
- */
- protected JTextField getPortField()
+class TreeNodeWrapper
+{
+ private JMeterTreeNode tn;
+ private String label;
+
+ private TreeNodeWrapper()
+ {
+ };
+
+ public TreeNodeWrapper(JMeterTreeNode tn, String label)
+ {
+ this.tn = tn;
+ this.label = label;
+ }
+
+ public JMeterTreeNode getTreeNode()
+ {
+ return tn;
+ }
+
+ public String toString()
{
- return portField;
+ return label;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]