chukwa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ey...@apache.org
Subject svn commit: r783066 - in /hadoop/chukwa/trunk: ./ conf/ src/web/hicc/descriptors/ src/web/hicc/jsp/
Date Tue, 09 Jun 2009 17:06:01 GMT
Author: eyang
Date: Tue Jun  9 17:06:01 2009
New Revision: 783066

URL: http://svn.apache.org/viewvc?rev=783066&view=rev
Log:
CHUKWA-279. Added swim lane visualization for Hadoop job progress. (Jiaqi Tan via Eric Yang)

Added:
    hadoop/chukwa/trunk/src/web/hicc/descriptors/swimlanes.descriptor
    hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes-event-data-js.jsp
    hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes.jsp
    hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes_viewer.jsp
Modified:
    hadoop/chukwa/trunk/CHANGES.txt
    hadoop/chukwa/trunk/conf/database_create_tables.sql
    hadoop/chukwa/trunk/conf/mdl.xml

Modified: hadoop/chukwa/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/CHANGES.txt?rev=783066&r1=783065&r2=783066&view=diff
==============================================================================
--- hadoop/chukwa/trunk/CHANGES.txt (original)
+++ hadoop/chukwa/trunk/CHANGES.txt Tue Jun  9 17:06:01 2009
@@ -4,6 +4,8 @@
 
   NEW FEATURES
 
+    CHUKWA-279. Added swim lane visualization for Hadoop job progress. (Jiaqi Tan via Eric
Yang)
+
     CHUKWA-267. Added TaskLogAppender for collecting Task Tracker Log file. (Eric Yang)
 
     CHUKWA-71. Status/version command for chukwa agent. (asrabkin)

Modified: hadoop/chukwa/trunk/conf/database_create_tables.sql
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/conf/database_create_tables.sql?rev=783066&r1=783065&r2=783066&view=diff
==============================================================================
--- hadoop/chukwa/trunk/conf/database_create_tables.sql (original)
+++ hadoop/chukwa/trunk/conf/database_create_tables.sql Tue Jun  9 17:06:01 2009
@@ -22,6 +22,7 @@
 drop table if exists user_util_template;
 drop table if exists hdfs_usage_template;
 drop table if exists QueueInfo;
+drop table if exists mapreduce_fsm_template;
 
 create table if not exists node_activity_template (
     timestamp  timestamp default CURRENT_TIMESTAMP,
@@ -707,3 +708,28 @@
     index (ts)
 ) ENGINE=InnoDB;
 
+create table if not exists mapreduce_fsm_template (
+    job_id VARCHAR(80),
+    unique_id VARCHAR(80),
+    friendly_id VARCHAR(80),
+    state_name VARCHAR(80),
+    hostname VARCHAR(80),
+    other_host VARCHAR(80),
+    start_time timestamp default 0,
+    finish_time timestamp default 0,
+    start_time_millis bigint default 0,
+    finish_time_millis bigint default 0,
+    status varchar(10) default 0,
+    file_bytes_read bigint default 0,
+    file_bytes_written bigint default 0,
+    combine_input_records bigint default 0,
+    combine_output_records bigint default 0,
+    input_records bigint default 0,
+    output_records bigint default 0,
+    input_bytes bigint default 0,
+    output_bytes bigint default 0,
+    input_groups bigint default 0,
+    spilled_records bigint default 0,
+    primary key(unique_id),
+    index(start_time, finish_time, job_id)
+) ENGINE=InnoDB;

Modified: hadoop/chukwa/trunk/conf/mdl.xml
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/conf/mdl.xml?rev=783066&r1=783065&r2=783066&view=diff
==============================================================================
--- hadoop/chukwa/trunk/conf/mdl.xml (original)
+++ hadoop/chukwa/trunk/conf/mdl.xml Tue Jun  9 17:06:01 2009
@@ -1964,5 +1964,33 @@
 <property><name>metric.jobconfdata.job_conf.mapred.reducer.class</name><value>mr_reducer_cls</value></property>
 <property><name>metric.jobconfdata.job_conf.mapred.mapper.class</name><value>mr_mapper_cls</value></property>
 
+<!-- SALSA additions -->
+
+<property><name>report.db.name.mapreduce_fsm</name><value>mapreduce_fsm</value></property>
+<property><name>report.db.primary.key.mapreduce_fsm</name><value>unique_id</value></property>
+<property><name>consolidator.table.mapreduce_fsm</name><value>5,30,180,720</value></property>
+
+<property><name>metric.mapreduce_fsm.job_id</name><value>job_id</value></property>
+<property><name>metric.mapreduce_fsm.state_uniq_id</name><value>unique_id</value></property>
+<property><name>metric.mapreduce_fsm.task_id</name><value>friendly_id</value></property>
+<property><name>metric.mapreduce_fsm.state_name</name><value>state_name</value></property>
+<property><name>metric.mapreduce_fsm.host</name><value>hostname</value></property>
+<property><name>metric.mapreduce_fsm.host_other</name><value>other_host</value>
</property>
+<property><name>metric.mapreduce_fsm.time_start</name><value>start_time</value></property>
+<property><name>metric.mapreduce_fsm.time_end</name><value>finish_time</value></property>
+<property><name>metric.mapreduce_fsm.time_start_millis</name><value>start_time_millis</value></property>
+<property><name>metric.mapreduce_fsm.time_end_millis</name><value>finish_time_millis</value></property>
+<property><name>metric.mapreduce_fsm.state_string</name><value>status</value></property>
+<property><name>metric.mapreduce_fsm.counter_file_bytes_read</name><value>file_bytes_read</value></property>
+<property><name>metric.mapreduce_fsm.counter_file_bytes_written</name><value>file_bytes_written</value></property>
+<property><name>metric.mapreduce_fsm.counter_combine_input_records</name><value>combine_input_records</value></property>
+<property><name>metric.mapreduce_fsm.counter_combine_output_records</name><value>combine_output_records</value></property>
+<property><name>metric.mapreduce_fsm.counter_input_records</name><value>input_records</value></property>
+<property><name>metric.mapreduce_fsm.counter_output_records</name><value>output_records</value></property>
+<property><name>metric.mapreduce_fsm.counter_input_bytes</name><value>input_bytes</value></property>
+<property><name>metric.mapreduce_fsm.counter_output_bytes</name><value>output_bytes</value></property>
+<property><name>metric.mapreduce_fsm.counter_input_groups</name><value>input_groups</value></property>
+<property><name>metric.mapreduce_fsm.counter_spilled_records</name><value>spilled_records</value></property>

+
 </configuration>
 

Added: hadoop/chukwa/trunk/src/web/hicc/descriptors/swimlanes.descriptor
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/web/hicc/descriptors/swimlanes.descriptor?rev=783066&view=auto
==============================================================================
--- hadoop/chukwa/trunk/src/web/hicc/descriptors/swimlanes.descriptor (added)
+++ hadoop/chukwa/trunk/src/web/hicc/descriptors/swimlanes.descriptor Tue Jun  9 17:06:01
2009
@@ -0,0 +1,21 @@
+{
+"id":"swimlanes_viewer",
+"title":"Swimlanes",
+"version":"0.1",
+"categories":"Hadoop,Status",
+"module":"iframe/jsp/swimlanes_viewer.jsp",
+"description":"Display Time sorted events",
+"screendump":"\/images\/start.png",
+"refresh":"15",
+"parameters":[
+{"name":"height","type":"select","value":"450","label":"Height","options":[
+{"label":"300","value":"300"},
+{"label":"450","value":"400"},
+{"label":"600","value":"500"},
+{"label":"800","value":"800"},
+{"label":"1000","value":"1000"},
+{"label":"1200","value":"1200"}
+]}
+]
+}
+

Added: hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes-event-data-js.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes-event-data-js.jsp?rev=783066&view=auto
==============================================================================
--- hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes-event-data-js.jsp (added)
+++ hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes-event-data-js.jsp Tue Jun  9 17:06:01 2009
@@ -0,0 +1,302 @@
+<%
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file 
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+%>
+<%@ page import = "java.util.Calendar, java.util.Date, java.sql.*, java.text.SimpleDateFormat,
java.util.*, java.sql.*,java.io.*,java.lang.Math, java.util.Calendar, java.util.Date, java.text.SimpleDateFormat,
java.lang.StringBuilder, org.apache.hadoop.chukwa.hicc.ClusterConfig, org.apache.hadoop.chukwa.hicc.TimeHandler,
org.apache.hadoop.chukwa.util.DatabaseWriter, org.apache.hadoop.chukwa.database.Macro, org.apache.hadoop.chukwa.database.DatabaseConfig,
org.apache.hadoop.chukwa.util.XssFilter" %>
+<%@ page session="true" %> 
+<%
+HashMap<String, String> state_colours = new HashMap<String, String>();
+state_colours.put("map","#0000cc");
+state_colours.put("reduce","#00cc00");
+state_colours.put("reduce_reducer", "#ff0000");
+state_colours.put("reduce_shufflewait", "#330000");
+state_colours.put("reduce_sort", "#990000");
+String defaultcolour = new String("#333333");
+
+response.setContentType("text/javascript");
+
+XssFilter xf = new XssFilter(request);
+TimeHandler time = new TimeHandler(request, (String)session.getAttribute("time_zone"));
+long start = time.getStartTime();
+long end = time.getEndTime();
+String cluster = (String) session.getAttribute("cluster");
+String table = "mapreduce_fsm";
+
+if(xf.getParameter("event_type")!=null) {
+  table = xf.getParameter("event_type");
+}
+String query = "select job_id,friendly_id,start_time,finish_time,start_time_millis,finish_time_millis,status,state_name,hostname
from ["+table+"] where finish_time between '[start]' and '[end]'";
+Macro mp = new Macro(start,end,query, request);
+query = mp.toString() + " order by start_time";
+
+out.print("/" + "/" + "swimlanes: " + mp.toString() + " cluster: " + cluster);
+
+ArrayList<HashMap<String, Object>> events = new ArrayList<HashMap<String,
Object>>();
+
+Connection conn = null;
+Statement stmt = null;
+ResultSet rs = null;
+
+DatabaseWriter dbw = new DatabaseWriter(cluster);
+try {
+  rs = dbw.query(query);
+  ResultSetMetaData rmeta = rs.getMetaData();
+  int col = rmeta.getColumnCount();
+  while (rs.next()) {
+    HashMap<String, Object> event = new HashMap<String, Object>();
+    long event_time=0;
+    for(int i=1;i<=col;i++) {
+      if(rmeta.getColumnType(i)==java.sql.Types.TIMESTAMP) {
+        event.put(rmeta.getColumnName(i),rs.getTimestamp(i).getTime());
+      } else {
+        event.put(rmeta.getColumnName(i),rs.getString(i));
+      }
+    }
+    events.add(event);
+  }
+} catch (SQLException ex) {
+  // handle any errors
+  //out.println("SQLException: " + ex.getMessage());
+  //out.println("SQLState: " + ex.getSQLState());
+  //out.println("VendorError: " + ex.getErrorCode());
+} finally {
+  // it is a good idea to release
+  // resources in a finally{} block
+  // in reverse-order of their creation
+  // if they are no-longer needed
+  dbw.close();
+}
+%>
+$(function () {
+<%
+  SimpleDateFormat format = new SimpleDateFormat("MMM dd yyyy HH:mm:ss");
+  HashMap<String, Integer> reduce_ytick_ids = new HashMap<String, Integer>();
+
+  StringBuilder opts_colour_string, opts_series_string, opts_data_string;
+  opts_colour_string = new StringBuilder();
+  opts_series_string = new StringBuilder();
+  opts_data_string = new StringBuilder("[");
+
+  StringBuilder withstart_points_series_string = new StringBuilder();
+  StringBuilder nostart_points_series_string = new StringBuilder();
+  StringBuilder start_points_data_string = new StringBuilder();
+  StringBuilder start_points_colour_string = new StringBuilder();
+
+  StringBuilder lookupFunctionString = new StringBuilder();
+
+  out.println("/" + "/" + events.size() + " results returned.");
+  int unique_plot_yticks = 0;
+  int global_ycounter = 1;
+
+%> $("#resultcountholder").text("<%= events.size() %> states returned.");
+<%
+
+  int start_millis = 0, end_millis = 0;
+  for(int i=0;i<events.size();i++) {
+    HashMap<String, Object> event = events.get(i);
+    start=(Long)event.get("start_time");
+    end=(Long)event.get("finish_time");
+    String event_time = format.format(start);
+    String launch_time = format.format(event.get("start_time"));
+    String event_end_time = format.format(end);
+    String cell = (String) event.get("state_name");
+    start_millis = Integer.parseInt(((String)event.get("start_time_millis")));
+    end_millis = Integer.parseInt(((String)event.get("finish_time_millis")));
+
+    String colourstring = null;
+    if (state_colours.containsKey(cell)) {
+      colourstring = state_colours.get(cell);
+    } else {
+      colourstring = defaultcolour;
+    }
+    %>// <%= event.get("friendly_id") %>
+<%
+  float ytick;
+  if (cell.startsWith("reduce")) { 
+    Integer thenum = null;
+    thenum = reduce_ytick_ids.get((String)event.get("friendly_id"));
+    if (thenum != null) {
+      ytick = thenum.intValue();%> // old
+<%      
+    } else {
+      ytick = global_ycounter;
+      reduce_ytick_ids.put((String)event.get("friendly_id"),new Integer(global_ycounter));
+      global_ycounter++; %> // new
+<%
+    } 
+    if (cell.endsWith("reducer")) {
+      ytick += 0.75;
+    } else if (cell.endsWith("sort")) {
+      ytick += 0.5;
+    } else if (cell.endsWith("shufflewait")) {
+      ytick += 0.25;
+    }
+%> var d<%= i %> = [[<%= start %>,<%= ytick %>],[<%= end %>,<%=
ytick %>]];
+<%   
+  } else { 
+    ytick = global_ycounter;
+%> var d<%= i %> = [[<%= start %>,<%= global_ycounter %>],[<%= end
%>,<%= global_ycounter %>]];
+<%
+    global_ycounter++;
+  }
+
+%> var ds<%= i %> = [[<%= start %>,<%= ytick %>]];
+<%
+  start_points_data_string.append(",");
+  start_points_data_string.append("ds");
+  start_points_data_string.append(i);
+  
+  lookupFunctionString.append("if (y == ");
+  lookupFunctionString.append(ytick);
+  lookupFunctionString.append(" ) {\n");
+  lookupFunctionString.append("return '");
+  lookupFunctionString.append("State: ");
+  lookupFunctionString.append(event.get("state_name"));
+  lookupFunctionString.append(" / Status: ");
+  lookupFunctionString.append(event.get("status"));
+  lookupFunctionString.append(" <br />");
+  lookupFunctionString.append("Host: ");
+  lookupFunctionString.append(event.get("hostname"));
+  lookupFunctionString.append(" <br />");
+  lookupFunctionString.append("Duration: ");
+  lookupFunctionString.append((end-start)+(end_millis-start_millis));
+  lookupFunctionString.append("ms <br />");
+  lookupFunctionString.append("[");
+  lookupFunctionString.append(event.get("friendly_id"));
+  lookupFunctionString.append("]");
+  lookupFunctionString.append("';\n");
+  lookupFunctionString.append("}\n");
+
+  opts_series_string.append("lines: { show:true }, \n");
+  withstart_points_series_string.append("points: {show:true}, \n");
+  nostart_points_series_string.append("points: {show:false}, \n");
+  if (i > 0) opts_colour_string.append(", ");
+  opts_colour_string.append("\"");
+  opts_colour_string.append(colourstring);
+  opts_colour_string.append("\"");
+  start_points_colour_string.append(",");
+  start_points_colour_string.append("\"");
+  start_points_colour_string.append(colourstring);
+  start_points_colour_string.append("\"");
+  if (i > 0) opts_data_string.append(", ");
+  opts_data_string.append("d");
+  opts_data_string.append(i);     
+} 
+
+StringBuilder opts_data_withstart_string = new StringBuilder(opts_data_string.toString());
+opts_data_withstart_string.append(start_points_data_string.toString());
+opts_data_string.append("];");
+opts_data_withstart_string.append("];");
+%>
+var data = <%= opts_data_string.toString() %>
+var data_withstart = <%= opts_data_withstart_string.toString() %>
+var options_withstart = {
+  legend: { show: true, container: $("#legend") },
+  colors: [ <%= opts_colour_string.toString() %>],
+  shadowSize: 0, 
+  xaxis: { mode: "time", timeformat: "%H%M.%S" }, 
+  yaxis: { autoscaleMargin: 0 },
+  <%= opts_series_string.toString() %> 
+  <%= withstart_points_series_string.toString() %> selection: { mode: "xy" }
+};
+
+var options_small = {
+  legend: { show: true, container: $("#legend") },
+  colors: [ <%= opts_colour_string.toString() %> ], 
+  shadowSize: 0, 
+  xaxis: { mode: "time", timeformat: "%H:%M" }, 
+  yaxis: { autoscaleMargin: 0 },
+  <%= opts_series_string.toString() %> 
+  <%= nostart_points_series_string.toString() %> selection: { mode: "xy" }
+};
+
+
+var placeholder = $("#placeholder");
+var plot = $.plot(placeholder, data_withstart, options_withstart);
+
+var smallplotplaceholder = $("#smallplotplaceholder");
+var smallplot = $.plot(smallplotplaceholder, data_withstart, options_small);
+
+placeholder.bind("plotselected", function (event, ranges) {
+  if (ranges.xaxis.to - ranges.xaxis.from < 0.00001)
+    ranges.xaxis.to = ranges.xaxis.from + 0.00001;
+  if (ranges.yaxis.to - ranges.yaxis.from < 0.00001)
+    ranges.yaxis.to = ranges.yaxis.from + 0.00001;
+
+  plot = $.plot(placeholder, data_withstart,
+    $.extend(true, {}, options_withstart, {
+    grid: { hoverable: true },
+    xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }, 
+    yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to },
+    }
+  )
+);
+
+// don't fire event on the overview to prevent eternal loop
+smallplot.setSelection(ranges, true);
+
+});
+
+smallplotplaceholder.bind("plotselected", function (event, ranges) {
+  plot.setSelection(ranges);
+});
+
+function lookupStateInfo(y) {
+  <%= lookupFunctionString %>
+}
+
+function showTooltip(x, y, contents) {
+  $('<div id="tooltip">' + contents + '</div>').css( {
+    position: 'absolute',
+    display: 'none',
+    top: y + 5,
+    left: x + 5,
+    border: '1px solid #fdd',
+    padding: '2px',
+    'background-color': '#fee',
+    opacity: 0.80
+  }).appendTo("body").fadeIn(200);
+}
+
+
+// Hover text
+var previousPoint = null;
+$("#placeholder").bind("plothover", function (event, pos, item) {
+  if (item) {
+    if (previousPoint != item.datapoint) {
+      previousPoint = item.datapoint;
+
+      $("#tooltip").remove();
+      var x = item.datapoint[0].toFixed(2),
+      y = item.datapoint[1].toFixed(2);
+
+      showTooltip(item.pageX, item.pageY, lookupStateInfo(item.datapoint[1]));
+
+    } else {
+      $("#tooltip").remove();
+      previousPoint = null;            
+    }
+  }
+});       
+
+$("#clearSelection").click(function () {
+    plot.clearSelection();
+  }
+);   
+
+});

Added: hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes.jsp?rev=783066&view=auto
==============================================================================
--- hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes.jsp (added)
+++ hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes.jsp Tue Jun  9 17:06:01 2009
@@ -0,0 +1,72 @@
+<%
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file 
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+%>
+<%@ page import = "java.util.Calendar, java.util.Date, java.sql.*, java.text.SimpleDateFormat,
java.util.*, java.sql.*,java.io.*,java.lang.Math, java.util.Calendar, java.util.Date, java.text.SimpleDateFormat,
java.lang.StringBuilder, org.apache.hadoop.chukwa.util.XssFilter" %>
+  <% response.setContentType("text/html"); %>
+  <html><head> 
+
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
+      <title>2D Spectrum Viewer</title> 
+      <link href="/hicc/css/heatmap/layout.css" rel="stylesheet" type="text/css"> 
+        <script language="javascript" type="text/javascript" src="/hicc/js/jquery-1.2.6.min.js"></script>
+        <script language="javascript" type="text/javascript" src="/hicc/js/jquery.flot.pack.js"></script>
+
+        <script language="javascript" type="text/javascript" src="/hicc/js/excanvas.pack.js"></script>
+        <script>
+          function activateplot()
+          {
+          document.getElementById('clearSelection').click();
+          }
+        </script>
+        <script id="source" language="javascript" type="text/javascript" src="swimlanes-event-data-js.jsp">

+        </script> 
+      </head><div FirebugVersion="1.3.3" style="display: none;" id="_firebugConsole"></div><body
onload="activateplot()">
+      <table cellpadding="0" cellspacing="0">
+        <tbody>
+          <tr>
+
+            <td align="right" valign="top" rowspan="2"><div id="placeholder" style="width:
600px; height: 400px; position: relative;"><canvas width="600" height="400"></canvas><canvas
style="position: absolute; left: 0px; top: 0px;" width="600" height="400"></canvas></div></td>
+
+            <td rowspan="2"><div style="width:10px">&nbsp;</div></td>
+
+            <td><div id="smallplotplaceholder", style="width:166px;height:100px;"><canvas
style="position: absolute; left: 0px; top: 0px;" width="166" height="100"></canvas></div></td>
+
+          </tr>
+
+          <tr>
+            <td align="right">
+
+              <span id="resultcountholder">No results returned. </span>
+
+              <br />
+
+              <table cellpadding="0" cellspacing="2"><tbody>
+                <tr><th colspan="2">Legend</th></tr>
+                <tr><td bgcolor="#0000cc">&nbsp;&nbsp;</td><td>Map</td></tr>
+                <tr><td bgcolor="#00cc00">&nbsp;&nbsp;</td><td>Reduce</td></tr>
+                <tr><td bgcolor="#ff0000">&nbsp;&nbsp;</td><td>Reduce-ShuffleWait</td></tr>
+                <tr><td bgcolor="#330000">&nbsp;&nbsp;</td><td>Reduce-Sort</td></tr>
+                <tr><td bgcolor="#990000">&nbsp;&nbsp;</td><td>Reduce-Reducer</td></tr>
+                <tr><td bgcolor="#333333">&nbsp;&nbsp;</td><td>Other</td></tr>
+              </tbody></table>
+            </td>
+          </tr>
+
+        </tbody></table> 
+      </body></html>

Added: hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes_viewer.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes_viewer.jsp?rev=783066&view=auto
==============================================================================
--- hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes_viewer.jsp (added)
+++ hadoop/chukwa/trunk/src/web/hicc/jsp/swimlanes_viewer.jsp Tue Jun  9 17:06:01 2009
@@ -0,0 +1,25 @@
+<%
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file 
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+%>
+<%@ page import = " org.apache.hadoop.chukwa.util.XssFilter" %>
+<%
+   XssFilter xf = new XssFilter(request);
+   response.setHeader("boxId", xf.getParameter("boxId"));
+ %>
+<IFRAME id="<%= xf.getParameter("boxId") %>iframe" src="/hicc/jsp/swimlanes.jsp?<%=
xf.filter(request.getQueryString()) %>" width="100%" frameborder="0" height="800" scrolling="yes"></IFRAME>



Mime
View raw message