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"));