Package org.apache.jmeter.visualizers

Source Code of org.apache.jmeter.visualizers.ConsumerSysTableVisualizer

package org.apache.jmeter.visualizers;

import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
import org.apache.jmeter.samplers.Clearable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.gui.ObjectTableModel;
import org.apache.jorphan.gui.layout.VerticalLayout;
import org.apache.jorphan.reflect.Functor;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

import org.activemq.sampler.ConsumerSysTest;
import org.activemq.sampler.ProducerSysTest;

import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;

/**
* A tableVisualizer that can display Producer System Test Output.
*/
public class ConsumerSysTableVisualizer extends AbstractVisualizer implements Clearable {

    private static Logger log = LoggingManager.getLoggerForClass();

    private final String[] COLUMNS = new String[]{
            JMeterUtils.getResString("table_visualizer_sample_consumerid"),
            JMeterUtils.getResString("table_visualizer_sample_consumerseq_number"),
            JMeterUtils.getResString("table_visualizer_sample_prodname"),
            JMeterUtils.getResString("table_visualizer_sample_producerseq_number"),
            JMeterUtils.getResString("table_visualizer_sample_message")};

    private ObjectTableModel model = null;

    private JTable table = null;
    private JScrollPane tableScrollPanel = null;
    private JTextField messageField = null;

    /**
     *  Constructor for the TableVisualizer object.
     */
    public ConsumerSysTableVisualizer() {
        super();

        model = new ObjectTableModel(COLUMNS,
                                     new Functor[]{new Functor("getConsumerID"),
                                                   new Functor("getConsumerSeq"),
                                                   new Functor("getProdName"),
                                                   new Functor("getProducerSeq"),
                                                   new Functor("getMsgBody")},
                                     new Functor[]{null, null, null, null, null},
                                     new Class[]{String.class, Integer.class, String.class, Integer.class, String.class});

        init();
    }

    /**
     * @return Label key to get from label resource
     */
    public String getLabelResource() {

        return "view_cons_sys_results_in_table";
    }

    /**
     * @param res SampleResult from the JMeter Sampler
     */
    public void add(SampleResult res) {
        Thread timer = new Thread() {
            public void run() {
                timerLoop();
            }
        };

        timer.start();
    }

    /**
     * clear/resets the field.
     */
    public synchronized void clear() {
        log.debug("Clear called", new Exception("Debug"));
        model.clearData();
        repaint();
    }

    /**
     * Initialize the User Interface
     */
    private void init() {
        this.setLayout(new BorderLayout());

        // Main Panel
        JPanel mainPanel = new JPanel();
        Border margin = new EmptyBorder(10, 10, 5, 10);

        mainPanel.setBorder(margin);
        mainPanel.setLayout(new VerticalLayout(5, VerticalLayout.LEFT));

        // Name
        mainPanel.add(makeTitlePanel());

        // Set up the table itself
        table = new JTable(model);

        // table.getTableHeader().setReorderingAllowed(false);
        tableScrollPanel = new JScrollPane(table);
        tableScrollPanel.setViewportBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

        // Set up footer of table which displays the messages
        JPanel messagePanel = new JPanel();
        JLabel messageLabel =
                 new JLabel(JMeterUtils.getResString("graph_results_message"));
        messageLabel.setForeground(Color.black);

        messageField = new JTextField(50);
        messageField.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
        messageField.setEditable(false);
        messageField.setForeground(Color.black);
        messageField.setBackground(getBackground());
        messagePanel.add(messageLabel);
        messagePanel.add(messageField);

        // Set up info Panel table
        JPanel tableMsgPanel = new JPanel();
        tableMsgPanel.setLayout(new FlowLayout());
        tableMsgPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
        tableMsgPanel.add(messagePanel);

        // Set up the table with footer
        JPanel tablePanel = new JPanel();
        tablePanel.setLayout(new BorderLayout());
        tablePanel.add(tableScrollPanel, BorderLayout.CENTER);
        tablePanel.add(tableMsgPanel, BorderLayout.SOUTH);

        // Add the main panel and the graph
        this.add(mainPanel, BorderLayout.NORTH);
        this.add(tablePanel, BorderLayout.CENTER);
    }

    /**
     *  Gets the number of processed messages.
     */
    protected synchronized void timerLoop() {

        Map ProducerTextMap = new HashMap();
        Map currentProducerMap = null;
        String ProducerName = null;
        String MsgBody = null;
        String ConsumerName = null;
        String ProdSequenceNo = null;
        String mapKey = null;
        int expectedNoOfMessages = ConsumerSysTest.noOfMessages;
        boolean dowhile = true;


        while (dowhile) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
                       
            ConsumerSysTest consumer = new ConsumerSysTest();
            currentProducerMap = consumer.resetProducerMap();

            if (currentProducerMap.size() == 0) {
                dowhile = false;
            }
           
            // Put the map values to another map for parsing.
            for (int i = 1; i <= currentProducerMap.size(); i++) {
                String ProdMsg = (String) currentProducerMap.get(String.valueOf(i));

                ProducerName = ProdMsg.substring(0, ProdMsg.indexOf("#"));
                MsgBody = ProdMsg.substring(ProdMsg.indexOf("#")+1,  ProdMsg.indexOf("#", ProdMsg.indexOf("#")+1));
                ProdSequenceNo = ProdMsg.substring(ProdMsg.indexOf("#", ProdMsg.indexOf("#", ProdMsg.indexOf("#")+1)) + 1, ProdMsg.lastIndexOf("#"));
                ConsumerName = ProdMsg.substring(ProdMsg.lastIndexOf("#") +1, ProdMsg.length());

                if (ConsumerSysTest.destination) {
                    mapKey = ConsumerName + ProducerName;
                } else {
                    mapKey = ProducerName;
                }

                if (ProducerTextMap.containsKey(mapKey)) {
                    // Increment the counter value
                    Integer value = (Integer) ProducerTextMap.get(mapKey);

                    ProducerTextMap.put(mapKey, new Integer(value.intValue()+1));

                } else {
                    // Put the Producer Name in the map
                    ProducerTextMap.put(mapKey, new Integer(1));
                }

                Integer ConsumerSeqID = (Integer) ProducerTextMap.get(mapKey);
                Integer ProducerSeqID = Integer.valueOf(ProdSequenceNo);

                // Add data to table row
                SystemTestMsgSample msgSample = new SystemTestMsgSample(ConsumerName, ProducerName, MsgBody, ProducerSeqID, ConsumerSeqID);
                model.addRow(msgSample);

                // Check for duplicate message.
                if (ConsumerSeqID.intValue() > expectedNoOfMessages) {
                    messageField.setText(JMeterUtils.getResString("duplicate_message"));
                } else if (MsgBody.equals(ProducerSysTest.LAST_MESSAGE)) {
                    // Check for message order.
                    if (ConsumerSeqID.intValue() != expectedNoOfMessages) {
                        messageField.setText(JMeterUtils.getResString("not_in_order_message"));
                    } else if (currentProducerMap.size() == i) {
                        if (messageField.getText().length() == 0) {
                            messageField.setText(JMeterUtils.getResString("system_test_pass"));
                        }
                    }
                }
            }
        }
    }

}
TOP

Related Classes of org.apache.jmeter.visualizers.ConsumerSysTableVisualizer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.