Coverage Report - kg.apc.jmeter.vizualizers.CompositeGraphGui
 
Classes in this File Line Coverage Branch Coverage Complexity
CompositeGraphGui
63%
61/96
21%
6/28
2.077
 
 1  
 package kg.apc.jmeter.vizualizers;
 2  
 
 3  
 import java.util.HashSet;
 4  
 import java.util.Iterator;
 5  
 import kg.apc.charting.AbstractGraphRow;
 6  
 import kg.apc.charting.DateTimeRenderer;
 7  
 import kg.apc.jmeter.JMeterPluginsUtils;
 8  
 import kg.apc.jmeter.graphs.AbstractOverTimeVisualizer;
 9  
 import kg.apc.jmeter.graphs.CompositeNotifierInterface;
 10  
 import org.apache.jmeter.reporters.ResultCollector;
 11  
 import org.apache.jmeter.samplers.SampleResult;
 12  
 import org.apache.jmeter.testelement.TestElement;
 13  
 import org.apache.jmeter.testelement.property.CollectionProperty;
 14  
 import org.apache.jmeter.testelement.property.JMeterProperty;
 15  
 import org.apache.jmeter.testelement.property.NullProperty;
 16  
 import org.apache.jmeter.testelement.property.PropertyIterator;
 17  
 
 18  
 public class CompositeGraphGui extends AbstractOverTimeVisualizer {
 19  
 
 20  
     private JCompositeRowsSelectorPanel compositeRowsSelectorPanel;
 21  
     public CompositeModel compositeModel;
 22  27
     private long lastUpdate = 0;
 23  1
     private static String CONFIG_PROPERTY = "COMPOSITE_CFG";
 24  
 
 25  27
     public CompositeGraphGui() {
 26  27
         graphPanel.getGraphObject().setDisplayPrecision(false);
 27  27
         compositeModel = new CompositeModel();
 28  27
         compositeRowsSelectorPanel = new JCompositeRowsSelectorPanel(compositeModel, this);
 29  27
         compositeModel.setNotifier((CompositeNotifierInterface) compositeRowsSelectorPanel);
 30  
 
 31  27
         graphPanel.replaceRowTab("Graphs", compositeRowsSelectorPanel, "Select graphs/rows to display");
 32  
 
 33  27
         graphPanel.getGraphObject().setxAxisLabelRenderer(new DateTimeRenderer("HH:mm:ss"));
 34  27
         graphPanel.getGraphObject().setReSetColors(true);
 35  
 
 36  27
         graphPanel.getGraphObject().setxAxisLabel("Elapsed time");
 37  27
         graphPanel.getGraphObject().setYAxisLabel("Scaled values");
 38  
 
 39  27
         graphPanel.getGraphObject().getChartSettings().setExpendRows(true);
 40  
 
 41  27
         CompositeResultCollector compositeResultCollector = new CompositeResultCollector();
 42  27
         compositeResultCollector.setCompositeModel(compositeModel);
 43  27
         setModel(compositeResultCollector);
 44  
 
 45  27
         hideFilePanel();
 46  27
         enableMaximize(false);
 47  27
     }
 48  
 
 49  
     @Override
 50  
     protected JSettingsPanel createSettingsPanel() {
 51  29
         return new JSettingsPanel(this,
 52  
                 JSettingsPanel.GRADIENT_OPTION
 53  
                 | JSettingsPanel.FINAL_ZEROING_OPTION
 54  
                 | JSettingsPanel.LIMIT_POINT_OPTION
 55  
                 | JSettingsPanel.MAXY_OPTION
 56  
                 | JSettingsPanel.RELATIVE_TIME_OPTION
 57  
                 | JSettingsPanel.AUTO_EXPAND_OPTION
 58  
                 | JSettingsPanel.MARKERS_OPTION);
 59  
     }
 60  
 
 61  
     @Override
 62  
     public String getLabelResource() {
 63  1
         return this.getClass().getSimpleName();
 64  
     }
 65  
 
 66  
     @Override
 67  
     public String getStaticLabel() {
 68  55
         return JMeterPluginsUtils.prefixLabel("Composite Graph");
 69  
     }
 70  
 
 71  
     @Override
 72  
     public TestElement createTestElement() {
 73  1
         ResultCollector modelNew = getModel();
 74  1
         if (modelNew == null) {
 75  0
             modelNew = new CompositeResultCollector();
 76  0
             ((CompositeResultCollector) modelNew).setCompositeModel(compositeModel);
 77  0
             setModel(modelNew);
 78  
         }
 79  1
         modifyTestElement(modelNew);
 80  1
         modelNew.setComment(JMeterPluginsUtils.getWikiLinkText("CompositeGraph"));
 81  1
         return modelNew;
 82  
     }
 83  
 
 84  
     @Override
 85  
     public void configure(TestElement te) {
 86  
         //log.info("Configure");
 87  1
         super.configure(te);
 88  1
         ((CompositeResultCollector) te).setCompositeModel(compositeModel);
 89  
 
 90  1
         JMeterProperty data = te.getProperty(CONFIG_PROPERTY);
 91  
 
 92  1
         if (!(data instanceof NullProperty)) {
 93  0
             setConfig((CollectionProperty) data);
 94  
         }
 95  1
     }
 96  
 
 97  
     @Override
 98  
     public void modifyTestElement(TestElement c) {
 99  2
         super.modifyTestElement(c);
 100  2
         c.setProperty(getConfig());
 101  2
     }
 102  
 
 103  
     private CollectionProperty getConfig() {
 104  2
         CollectionProperty ret = new CollectionProperty();
 105  2
         CollectionProperty testplans = new CollectionProperty();
 106  2
         CollectionProperty rows = new CollectionProperty();
 107  
 
 108  2
         ret.setName(CONFIG_PROPERTY);
 109  2
         Iterator<String[]> iter = compositeRowsSelectorPanel.getItems();
 110  
 
 111  2
         while (iter.hasNext()) {
 112  0
             String[] item = iter.next();
 113  0
             testplans.addItem(item[0]);
 114  0
             rows.addItem(item[1]);
 115  0
         }
 116  
 
 117  2
         ret.addItem(testplans);
 118  2
         ret.addItem(rows);
 119  2
         return ret;
 120  
     }
 121  
 
 122  
     private void setConfig(CollectionProperty properties) {
 123  0
         PropertyIterator iter = properties.iterator();
 124  
 
 125  0
         CollectionProperty testplans = (CollectionProperty) iter.next();
 126  0
         CollectionProperty rows = (CollectionProperty) iter.next();
 127  
 
 128  0
         if (rows.size() > 0) {
 129  0
             PropertyIterator iterTestplans = testplans.iterator();
 130  0
             PropertyIterator iterRows = rows.iterator();
 131  
 
 132  0
             while (iterTestplans.hasNext() && iterRows.hasNext()) {
 133  0
                 String testplan = iterTestplans.next().getStringValue();
 134  0
                 String row = iterRows.next().getStringValue();
 135  0
                 compositeRowsSelectorPanel.addItemsToComposite(testplan, row);
 136  0
             }
 137  
 
 138  
         }
 139  0
     }
 140  
 
 141  
     @Override
 142  
     public void updateGui() {
 143  8
         Iterator<String[]> iter = compositeRowsSelectorPanel.getItems();
 144  8
         HashSet<String> validRows = new HashSet<String>();
 145  8
         while (iter.hasNext()) {
 146  0
             String[] item = iter.next();
 147  0
             AbstractGraphRow row = compositeModel.getRow(item[0], item[1]);
 148  0
             if (row != null) {
 149  0
                 String rowName = item[0] + " > " + item[1];
 150  0
                 validRows.add(rowName);
 151  0
                 if (!model.containsKey(rowName)) {
 152  0
                     model.put(rowName, row);
 153  
 
 154  
                     // handle relative start times for JTL reload
 155  0
                     if (relativeStartTime == 0 || relativeStartTime > row.getFirstTime()) {
 156  0
                         relativeStartTime = row.getFirstTime();
 157  0
                         handleRelativeStartTime();
 158  
                     }
 159  
                 }
 160  
             }
 161  0
         }
 162  
         //remove invalid rows
 163  8
         Iterator<String> iterModelRows = model.keySet().iterator();
 164  8
         while (iterModelRows.hasNext()) {
 165  0
             String rowName = iterModelRows.next();
 166  0
             if (!validRows.contains(rowName)) {
 167  0
                 iterModelRows.remove();
 168  
             }
 169  0
         }
 170  8
         super.updateGui();
 171  8
     }
 172  
 
 173  
     @Override
 174  
     public void add(SampleResult sr) {
 175  1
         super.add(sr);
 176  1
         long time = System.currentTimeMillis();
 177  
 
 178  1
         if (time > lastUpdate + 1000) {
 179  1
             lastUpdate = time;
 180  1
             updateGui();
 181  
         }
 182  1
     }
 183  
 
 184  
     @Override
 185  
     public String getWikiPage() {
 186  28
         return "CompositeGraph";
 187  
     }
 188  
 
 189  
     @Override
 190  
     public void clearData() {
 191  1
         super.clearData();
 192  1
         updateGui();
 193  1
     }
 194  
 }