changeset 2482:e8cf2946b207

[Byteman] Refactor GraphDataset to take proper filter param. Reviewed-by: aazores Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-October/021305.html
author Severin Gehwolf <sgehwolf@redhat.com>
date Tue, 18 Oct 2016 11:45:10 +0200
parents bcf729e138c8
children 366dfa1b9f2d
files vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDataset.java vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/SwingVmBytemanView.java vm-byteman/client-swing/src/test/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDatasetTest.java
diffstat 3 files changed, 77 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDataset.java	Mon Oct 17 20:50:14 2016 +0200
+++ b/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDataset.java	Tue Oct 18 11:45:10 2016 +0200
@@ -104,8 +104,7 @@
     private static final CategoryTimePlotData emptyCategoryTimePlotData = new CategoryTimePlotData(emptyXYDataset, new String[] {});
     private static final Number frequencyUnit = Long.valueOf(1);
 
-    public GraphDataset(List<BytemanMetric> metrics, String xkey, String ykey, String filter, String value)
-    {
+    public GraphDataset(List<BytemanMetric> metrics, String xkey, String ykey, Filter dataFilter) {
         this.xkey = xkey;
         this.ykey = ykey;
         xtype = CoordinateType.INTEGRAL;
@@ -126,6 +125,8 @@
             ytype = CoordinateType.CATEGORY;
         }
         // if we have a filter value then convert it to a number if it is numeric
+        String value = dataFilter != null ? dataFilter.getFilterValue() : null;
+        String filter = dataFilter != null ? dataFilter.getFilterKey() : null;
         Object filterValue = value;
         if (filter != null && value != null) {
             // may need to convert String to Numeric
@@ -178,8 +179,7 @@
         return data.size();
     }
 
-    public XYDataset getXYDataset()
-    {
+    public XYDataset getXYDataset() {
         if (xtype == CoordinateType.CATEGORY ||
                 ytype == CoordinateType.CATEGORY) {
             return emptyXYDataset;
@@ -210,8 +210,7 @@
         return xycollection;
     }
 
-    public CategoryDataset getCategoryDataset()
-    {
+    public CategoryDataset getCategoryDataset() {
         if (xtype == CoordinateType.TIME) {
             return emptyCategoryDataset;
         }
@@ -252,8 +251,7 @@
     }
 
     // alternative option for presenting category xkey with numeric ykey
-    public PieDataset getPieDataset()
-    {
+    public PieDataset getPieDataset() {
         if (xtype != CoordinateType.CATEGORY || ytype == CoordinateType.CATEGORY) {
             return emptyPieDataset;
         }
@@ -275,8 +273,7 @@
         return pieDataset;
     }
 
-    public CategoryTimePlotData getCategoryTimePlot()
-    {
+    public CategoryTimePlotData getCategoryTimePlot() {
         if (xtype != CoordinateType.TIME || ytype != CoordinateType.CATEGORY) {
             return emptyCategoryTimePlotData;
         }
@@ -416,4 +413,28 @@
             return symbols;
         }
     }
+    
+    /**
+     * A filter which has to match for each metric in order for it
+     * to get included in the data set.
+     *
+     */
+    static class Filter {
+        
+        private final String filterKey;
+        private final String filterValue;
+        
+        Filter(String filterKey, String filterValue) {
+            this.filterKey = filterKey;
+            this.filterValue = filterValue;
+        }
+        
+        String getFilterKey() {
+            return filterKey;
+        }
+        
+        String getFilterValue() {
+            return filterValue;
+        }
+    }
 }
\ No newline at end of file
--- a/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/SwingVmBytemanView.java	Mon Oct 17 20:50:14 2016 +0200
+++ b/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/SwingVmBytemanView.java	Tue Oct 18 11:45:10 2016 +0200
@@ -115,6 +115,7 @@
 import com.redhat.thermostat.shared.locale.Translate;
 import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.CategoryTimePlotData;
 import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.CoordinateType;
+import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.Filter;
 import com.redhat.thermostat.vm.byteman.client.swing.internal.PredefinedKeysMapper.MapDirection;
 import com.redhat.thermostat.vm.byteman.common.BytemanMetric;
 
@@ -863,15 +864,20 @@
         final List<BytemanMetric> ms = metrics;
         final String xk = xkey;
         final String yk = ykey;
-        final String f = filter;
-        final String v = value;
+        final Filter dataFilter;
+        if (filter != null && value != null) {
+            dataFilter = new Filter(filter, value);
+        } else {
+            dataFilter = null;
+        }
         final String t = graphtype;
         final String[] keyItems = MetricsKeysAggregator.aggregate(metrics).toArray(new String[] {});
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
+                String f = dataFilter == null ? null : dataFilter.getFilterKey();
                 updateComboKeyItems(keyItems, xk, yk, f);
-                GraphDataset dataset = makeGraphDataset(ms, xk, yk, f, v);
+                GraphDataset dataset = makeGraphDataset(ms, xk, yk, dataFilter);
                 if (dataset != null) {
                     switchGraph(dataset, t);
                 }
@@ -912,8 +918,8 @@
         }
     }
 
-    private GraphDataset makeGraphDataset(List<BytemanMetric> metrics, String xkey, String ykey, String filter, String value) {
-        GraphDataset dataset = new GraphDataset(metrics, xkey, ykey, filter, value);
+    private GraphDataset makeGraphDataset(List<BytemanMetric> metrics, String xkey, String ykey, Filter filter) {
+        GraphDataset dataset = new GraphDataset(metrics, xkey, ykey, filter);
         if (dataset.size() == 0) {
             return null;
         }
--- a/vm-byteman/client-swing/src/test/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDatasetTest.java	Mon Oct 17 20:50:14 2016 +0200
+++ b/vm-byteman/client-swing/src/test/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDatasetTest.java	Tue Oct 18 11:45:10 2016 +0200
@@ -76,12 +76,12 @@
     public void testEmptyXYDataSet() {
         final List<BytemanMetric> empty = Collections.emptyList();
         // x => marker
-        GraphDataset dataset = new GraphDataset(empty, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        GraphDataset dataset = new GraphDataset(empty, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null);
         XYDataset actualDataset = dataset.getXYDataset();
         assertEquals(0, actualDataset.getSeriesCount());
         
         // y => marker
-        dataset = new GraphDataset(empty, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        dataset = new GraphDataset(empty, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         actualDataset = dataset.getXYDataset();
         assertEquals(0, actualDataset.getSeriesCount());
     }
@@ -98,7 +98,7 @@
            }
         });
         // plots (x, y) where (x_i, y_i) == (i, i)
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         XYDataset xyDataSet = dataSet.getXYDataset();
         assertEquals(1, xyDataSet.getSeriesCount());
         assertEquals(DefaultMetricConfig.DEFAULT_NUM, xyDataSet.getItemCount(0));
@@ -132,7 +132,8 @@
                }
            }
         });
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, filterKey, filterValue);
+        GraphDataset.Filter filter = new GraphDataset.Filter(filterKey, filterValue);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, filter);
         XYDataset xyDataSet = dataSet.getXYDataset();
         assertEquals(1, xyDataSet.getSeriesCount());
         assertEquals(DefaultMetricConfig.DEFAULT_NUM/2, xyDataSet.getItemCount(0));
@@ -175,7 +176,7 @@
                return timeStamp; // same timestamp for all metrics
            }
         });
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         XYDataset xyDataSet = dataSet.getXYDataset();
         assertEquals(1, xyDataSet.getSeriesCount());
         assertEquals(1, xyDataSet.getItemCount(0));
@@ -210,7 +211,7 @@
                return timestamps[idx]; // same timestamp every repeatAmount times
            }
         });
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         XYDataset xyDataSet = dataSet.getXYDataset();
         assertEquals(1, xyDataSet.getSeriesCount());
         assertEquals(repeatAmount, xyDataSet.getItemCount(0));
@@ -254,7 +255,7 @@
                return timestamps[idx]; // same timestamp every repeatAmount times
            }
         });
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         XYDataset xyDataSet = dataSet.getXYDataset();
         assertEquals(1, xyDataSet.getSeriesCount());
         assertEquals(repeatAmount, xyDataSet.getItemCount(0));
@@ -270,7 +271,7 @@
     @Test
     public void testCategoryDatasetEmpty() {
         final List<BytemanMetric> empty = Collections.emptyList();
-        GraphDataset dataSet = new GraphDataset(empty /* no matter */, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        GraphDataset dataSet = new GraphDataset(empty /* no matter */, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         CategoryDataset actualSet = dataSet.getCategoryDataset();
         assertEquals(0, actualSet.getColumnCount());
         assertEquals(0, actualSet.getRowCount());
@@ -311,7 +312,7 @@
                 return 12;
             }
         });
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, COUNT_FIELD, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, COUNT_FIELD, null);
         CategoryDataset actualSet = dataSet.getCategoryDataset();
         assertEquals("two different markers", 2, actualSet.getRowCount());
         assertEquals("one value per marker", 1, actualSet.getColumnCount());
@@ -353,7 +354,7 @@
                 return 100 - 1;
             }
         });
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, GraphDataset.MARKER_KEY, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, GraphDataset.MARKER_KEY, null);
         CategoryDataset actualSet = dataSet.getCategoryDataset();
         assertEquals("two different markers", 2, actualSet.getRowCount());
         assertEquals(2, actualSet.getColumnCount());
@@ -373,12 +374,12 @@
     public void testEmptyCategoryTimePlot() {
         final List<BytemanMetric> empty = Collections.emptyList();
         // x => marker
-        GraphDataset dataset = new GraphDataset(empty, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        GraphDataset dataset = new GraphDataset(empty, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null);
         CategoryTimePlotData actualDataset = dataset.getCategoryTimePlot();
         assertEquals(0, actualDataset.getXYDataSet().getSeriesCount());
         
         // y => timestamp
-        dataset = new GraphDataset(empty, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        dataset = new GraphDataset(empty, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null);
         actualDataset = dataset.getCategoryTimePlot();
         assertEquals(0, actualDataset.getXYDataSet().getSeriesCount());
     }
@@ -412,7 +413,7 @@
             }
             
         });
-        GraphDataset dataset = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        GraphDataset dataset = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         CategoryTimePlotData actualData = dataset.getCategoryTimePlot();
         XYDataset actualDataset = actualData.getXYDataSet();
         assertEquals("Expected one series, exactly", 1, actualDataset.getSeriesCount());
@@ -444,11 +445,11 @@
     @Test
     public void testXType() {
         List<BytemanMetric> mList = buildMetrics(new DefaultMetricConfig());
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null);
         assertEquals(CoordinateType.CATEGORY, dataSet.getXType());
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(CoordinateType.TIME, dataSet.getXType());
-        dataSet = new GraphDataset(mList, GraphDataset.FREQUENCY_KEY, GraphDataset.MARKER_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.FREQUENCY_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(CoordinateType.INTEGRAL, dataSet.getXType());
         mList = buildMetrics(new DefaultMetricConfig() {
             @Override
@@ -459,18 +460,18 @@
                         .build();
             }
         });
-        dataSet = new GraphDataset(mList, COUNT_FIELD, GraphDataset.MARKER_KEY, null, null);
+        dataSet = new GraphDataset(mList, COUNT_FIELD, GraphDataset.MARKER_KEY, null);
         assertEquals(CoordinateType.REAL, dataSet.getXType());
     }
     
     @Test
     public void testXLabel() {
         List<BytemanMetric> mList = buildMetrics(new DefaultMetricConfig());
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null);
         assertEquals(GraphDataset.MARKER_KEY, dataSet.getXLabel());
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(GraphDataset.TIMESTAMP_KEY, dataSet.getXLabel());
-        dataSet = new GraphDataset(mList, GraphDataset.FREQUENCY_KEY, GraphDataset.MARKER_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.FREQUENCY_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(GraphDataset.FREQUENCY_KEY, dataSet.getXLabel());
         
         mList = buildMetrics(new DefaultMetricConfig() {
@@ -482,18 +483,18 @@
                         .build();
             }
         });
-        dataSet = new GraphDataset(mList, COUNT_FIELD, GraphDataset.MARKER_KEY, null, null);
+        dataSet = new GraphDataset(mList, COUNT_FIELD, GraphDataset.MARKER_KEY, null);
         assertEquals(COUNT_FIELD, dataSet.getXLabel());
     }
     
     @Test
     public void testYType() {
         List<BytemanMetric> mList = buildMetrics(new DefaultMetricConfig());
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(CoordinateType.CATEGORY, dataSet.getYType());
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null);
         assertEquals(CoordinateType.TIME, dataSet.getYType());
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.FREQUENCY_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.FREQUENCY_KEY, null);
         assertEquals(CoordinateType.INTEGRAL, dataSet.getYType());
         mList = buildMetrics(new DefaultMetricConfig() {
             @Override
@@ -504,18 +505,18 @@
                         .build();
             }
         });
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         assertEquals(CoordinateType.REAL, dataSet.getYType());
     }
     
     @Test
     public void testYLabel() {
         List<BytemanMetric> mList = buildMetrics(new DefaultMetricConfig());
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(GraphDataset.MARKER_KEY, dataSet.getYLabel());
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null);
         assertEquals(GraphDataset.TIMESTAMP_KEY, dataSet.getYLabel());
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.FREQUENCY_KEY, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.FREQUENCY_KEY, null);
         assertEquals(GraphDataset.FREQUENCY_KEY, dataSet.getYLabel());
         mList = buildMetrics(new DefaultMetricConfig() {
             @Override
@@ -526,14 +527,14 @@
                         .build();
             }
         });
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         assertEquals(COUNT_FIELD, dataSet.getYLabel());
     }
     
     @Test
     public void testSize() {
         List<BytemanMetric> mList = buildMetrics(new DefaultMetricConfig());
-        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
+        GraphDataset dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null);
         assertEquals(DefaultMetricConfig.DEFAULT_NUM, dataSet.size());
         final int numMetrics = 10;
         mList = buildMetrics(new DefaultMetricConfig() {
@@ -550,7 +551,7 @@
                     .build();
             }
         });
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         assertEquals(numMetrics, dataSet.size());
         
         // some metrics are filtered (implicitly) so should not add to the data
@@ -568,7 +569,7 @@
                 }
             }
         });
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null, null);
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, null);
         assertEquals(DefaultMetricConfig.DEFAULT_NUM/2, dataSet.size());
         
         // explicit filtering
@@ -591,7 +592,8 @@
                 }
             }
         });
-        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, fooKey, String.valueOf(fooValue));
+        GraphDataset.Filter filter = new GraphDataset.Filter(fooKey, String.valueOf(fooValue));
+        dataSet = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, COUNT_FIELD, filter);
         assertEquals("0, 30, 60, 90 => 4", 4, dataSet.size());
     }