Author: eyang
Date: Fri Feb 27 18:21:12 2009
New Revision: 748627

URL: http://svn.apache.org/viewvc?rev=748627&view=rev
Log:
HADOOP-4989.  Added scatter chart capability to Chukwa Charting.

Modified:
    
hadoop/core/trunk/src/contrib/chukwa/src/java/org/apache/hadoop/chukwa/hicc/Chart.java
    hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/js/flot.extend.js
    
hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/jsp/single-series-chart-javascript.jsp

Modified: 
hadoop/core/trunk/src/contrib/chukwa/src/java/org/apache/hadoop/chukwa/hicc/Chart.java
URL: 
http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/chukwa/src/java/org/apache/hadoop/chukwa/hicc/Chart.java?rev=748627&r1=748626&r2=748627&view=diff
==============================================================================
--- 
hadoop/core/trunk/src/contrib/chukwa/src/java/org/apache/hadoop/chukwa/hicc/Chart.java
 (original)
+++ 
hadoop/core/trunk/src/contrib/chukwa/src/java/org/apache/hadoop/chukwa/hicc/Chart.java
 Fri Feb 27 18:21:12 2009
@@ -45,6 +45,7 @@
        private int width;
        private int height;
        private List<String> xLabelRange;
+       private HashMap<String, Long> xLabelRangeHash;
        private HttpServletRequest request = null;
     private boolean legend;
     private String xLabel="";
@@ -141,6 +142,12 @@
 
     public void setXLabelsRange(List<String> range) {
        xLabelRange = range;
+        xLabelRangeHash = new HashMap<String, Long>();
+        long value = 0;
+        for(String label : range) {
+            xLabelRangeHash.put(label,value);
+            value++;
+        }
     }
 
     public void setLegend(boolean toggle) {
@@ -172,6 +179,12 @@
                                dateFormat="%y-%m-%d %H:%M";
                        }
                }
+        String xAxisOptions = "";
+        if(xLabel.equals("Time")) {
+                xAxisOptions = "timeformat: \""+dateFormat+"\",mode: \"time\"";
+        } else {
+                xAxisOptions = "tickFormatter: function (val, axis) { return 
xLabels[Math.round(val)]; }, ticks: 0";
+        }
         output = "<html><link href=\"/hicc/css/default.css\" 
rel=\"stylesheet\" type=\"text/css\">\n" +
                         "<body onresize=\"wholePeriod()\"><script 
type=\"text/javascript\" src=\"/hicc/js/jquery-1.2.6.min.js\"></script>\n"+
                         "<script type=\"text/javascript\" 
src=\"/hicc/js/jquery.flot.pack.js\"></script>\n"+
@@ -183,24 +196,23 @@
                         "<script type=\"text/javascript\" 
src=\"/hicc/js/flot.extend.js\">\n" +
                         "</script>\n" +
                         "<script type=\"text/javascript\">\n"+
+                         "var xLabels=new Array();\n"+
                         "var cw = document.body.clientWidth-70;\n"+
                         "var ch = document.body.clientHeight-50;\n"+
                         
"document.getElementById('placeholder').style.width=cw+'px';\n"+
                         
"document.getElementById('placeholder').style.height=ch+'px';\n"+
                         "_options={\n"+
                         "        points: { show: false },\n"+
-                        "        xaxis: {                timeformat: 
\""+dateFormat+"\",\n"+
-                        "                      mode: \"time\"\n"+
-                        "              },\n"+
-                        "              selection: { mode: \"x\" },\n"+
-                        "              grid: {\n"+
-                        "                      clickable: true,\n"+
-                        "                      hoverable: true,\n"+
-                        "                      tickColor: \"#C0C0C0\",\n"+
-                        "                      backgroundColor:\"#FFFFFF\"\n"+
-                        "              },\n"+
-                        "              legend: { show: "+this.legend+" },\n"+
-                 "          yaxis: { ";
+                        "        xaxis: { "+xAxisOptions+" },\n"+
+                        "        selection: { mode: \"x\" },\n"+
+                        "        grid: {\n"+
+                        "                 clickable: true,\n"+
+                        "                 hoverable: true,\n"+
+                        "                 tickColor: \"#C0C0C0\",\n"+
+                        "                 backgroundColor:\"#FFFFFF\"\n"+
+                        "        },\n"+
+                        "        legend: { show: "+this.legend+" },\n"+
+                         "        yaxis: { ";
         boolean stack = false;
         for(String type : this.chartType) {
             if(type.startsWith("stack")) {
@@ -226,10 +238,14 @@
             output = output + ", min:0, max:"+this.max;
         }
         output = output + "}\n";
-        output = output +
-                        "      };\n"+
-                        "_series=[\n";
-                           ArrayList<Long> numericLabelRange = new 
ArrayList<Long>();
+        output = output + "    };\n";
+        if(!xLabel.equals("Time")) {
+            for(int i=0;i<xLabelRange.size();i++) {
+                output = output + "xLabels[" + i + "]=\"" + 
xLabelRange.get(i)+"\";\n";
+            }
+        }
+        output = output + "_series=[\n";
+/*                         ArrayList<Long> numericLabelRange = new 
ArrayList<Long>();
                                    if(xLabel.equals("Time")) {
                                        SimpleDateFormat formatter = new 
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                        for(int i=0;i<xLabelRange.size();i++) {
@@ -243,7 +259,7 @@
                                            for(int 
i=0;i<xLabelRange.size();i++) {
                                                
numericLabelRange.add(Long.parseLong(xLabelRange.get(i)));
                                            }
-                                   }
+                                   }*/
                                ColorPicker cp = new ColorPicker();
                                        int i=0;
                                    for(TreeMap<String, TreeMap<String, 
Double>> dataMap : this.dataset) {
@@ -289,6 +305,10 @@
                                                        type="bars";
                                                        param="stepByStep: 
true";
                                                    }
+                                                    
if(this.chartType.get(i).equals("point")) {
+                                                        type="points";
+                                                        param="fill: false";
+                                                    }
                                                    output+="  {"+type+": { 
show: true, "+param+" }, color: \""+cp.get(counter+1)+"\", label: 
\""+seriesName+"\", ";
                                                    String showYAxis="false";
                                                    String shortRow="false";
@@ -302,7 +322,12 @@
                                                        if(counter2!=0) {
                                                                output+=",";
                                                        }
-                                                       
output+="["+dp+","+data.get(dp)+"]";
+                                                        
if(xLabel.equals("Time")) {
+                                                           
output+="[\""+dp+"\","+data.get(dp)+"]";
+                                                        } else {
+                                                            long value = 
xLabelRangeHash.get(dp);
+                                                           
output+="[\""+value+"\","+data.get(dp)+"]";
+                                                        }
                                                        counter2++;
                                                }
                                                    output+="], min:0, 
max:"+this.max+"}";

Modified: hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/js/flot.extend.js
URL: 
http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/js/flot.extend.js?rev=748627&r1=748626&r2=748627&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/js/flot.extend.js 
(original)
+++ hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/js/flot.extend.js Fri Feb 
27 18:21:12 2009
@@ -40,7 +40,7 @@
 };
 
         var previousPoint = null;
-       $("#placeholder").bind("plothover", function (event, pos, item) {
+       $("#placeholder").bind("plotclick", function (event, pos, item) {
            var leftPad = function(n) {
                 n = "" + n;
                return n.length == 1 ? "0" + n : n;
@@ -50,44 +50,28 @@
                     previousPoint = item.datapoint;
                
                     $("#tooltip").remove();
-                    var x = item.datapoint[0].toFixed(2),
-                         y = item.stackValue.toFixed(2);
-                    var dnow=new Date();
-                    dnow.setTime(x);
-                   var 
dita=leftPad(dnow.getUTCFullYear())+"/"+leftPad(dnow.getUTCMonth()+1)+"/"+dnow.getUTCDate()+"
 
"+leftPad(dnow.getUTCHours())+":"+leftPad(dnow.getUTCMinutes())+":"+leftPad(dnow.getUTCSeconds());
+                    if(xLabels.length==0) {
+                        var x = item.datapoint[0],
+                            y = item.stackValue.toFixed(2);
+                        var dnow=new Date();
+                        dnow.setTime(x);
+                       var 
dita=leftPad(dnow.getUTCFullYear())+"/"+leftPad(dnow.getUTCMonth()+1)+"/"+dnow.getUTCDate()+"
 
"+leftPad(dnow.getUTCHours())+":"+leftPad(dnow.getUTCMinutes())+":"+leftPad(dnow.getUTCSeconds());
  
-                    showTooltip(item.pageX, item.pageY,
-                                item.series.label + ": " + y + "<br>Time: " + 
dita);
+                        showTooltip(item.pageX, item.pageY,
+                                    item.series.label + ": " + y + "<br>Time: 
" + dita);
+                    } else {
+                        var x = item.datapoint[0],
+                            y = item.stackValue.toFixed(2);
+                        xLabel = xLabels[x];
+                        showTooltip(item.pageX, item.pageY,
+                                    item.series.label + ": " + y + "<br>" + 
xLabel);
+                    }
                  }
             } else {
                  $("#tooltip").remove();
                  previousPoint = null;            
             }
          });
-    $("#placeholder").bind("plotclick", function (event, pos, item) {
-           var leftPad = function(n) {
-                n = "" + n;
-               return n.length == 1 ? "0" + n : n;
-           };
-            if (item) {
-                if (previousPoint != item.datapoint) {
-                    previousPoint = item.datapoint;
-               
-                    $("#tooltip").remove();
-                    var x = item.datapoint[0].toFixed(2),
-                         y = item.datapoint[1].toFixed(2);
-                    var dnow=new Date();
-                    dnow.setTime(x);
-                   var 
dita=leftPad(dnow.getUTCFullYear())+"/"+leftPad(dnow.getUTCMonth()+1)+"/"+dnow.getUTCDate()+"
 
"+leftPad(dnow.getUTCHours())+":"+leftPad(dnow.getUTCMinutes())+":"+leftPad(dnow.getUTCSeconds());
- 
-                    showTooltip(item.pageX, item.pageY,
-                                item.series.label + ": " + y + "<br>Time: " + 
dita);
-                 }
-            } else {
-                 $("#tooltip").remove();
-                 previousPoint = null;            
-            }
-    });
                $("#placeholder").bind("selected", function (event, area) {
                        plot = $.plot(
                                $("#placeholder"),

Modified: 
hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/jsp/single-series-chart-javascript.jsp
URL: 
http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/jsp/single-series-chart-javascript.jsp?rev=748627&r1=748626&r2=748627&view=diff
==============================================================================
--- 
hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/jsp/single-series-chart-javascript.jsp
 (original)
+++ 
hadoop/core/trunk/src/contrib/chukwa/src/web/hicc/jsp/single-series-chart-javascript.jsp
 Fri Feb 27 18:21:12 2009
@@ -168,7 +168,15 @@
            Iterator<String> ki = tmpDataMap.keySet().iterator();
            while(ki.hasNext()) {
                String ts = ki.next();
-               dataMap.put(ts,tmpDataMap.get(ts));
+               if(dataMap.containsKey(ts)) {
+                   TreeMap<String, Double> newTree = dataMap.get(ts);
+                   for(String s : tmpDataMap.get(ts).keySet()) {
+                       newTree.put(s,tmpDataMap.get(ts).get(s));
+                   }
+                   dataMap.put(ts,newTree);
+               } else {
+                   dataMap.put(ts,tmpDataMap.get(ts));
+               }
            } 
        }
        if(dataMap.size()!=0) {
@@ -183,7 +191,11 @@
                c.setXAxisLabels(false);
            }
            c.setYAxisLabel("");
-           c.setXAxisLabel("Time");
+           if(request.getParameter("x_axis_label")!=null) {
+               c.setXAxisLabel(request.getParameter("x_axis_label"));
+           } else {
+               c.setXAxisLabel("Time");
+           }
            c.setTitle(metrics.toString());
            if(request.getParameter("y_axis_max")!=null) {
                double max = 
Double.parseDouble(request.getParameter("y_axis_max"));


Reply via email to