You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chukwa.apache.org by ey...@apache.org on 2009/05/09 00:16:00 UTC

svn commit: r773122 - in /hadoop/chukwa/branches/chukwa-0.1/src: java/org/apache/hadoop/chukwa/hicc/ java/org/apache/hadoop/chukwa/util/ web/hicc/ web/hicc/descriptors/ web/hicc/js/workspace/ web/hicc/jsp/

Author: eyang
Date: Fri May  8 22:15:53 2009
New Revision: 773122

URL: http://svn.apache.org/viewvc?rev=773122&view=rev
Log:
CHUKWA-219. Improved usability of host selector, and updated caching for host list. (Eric Yang)

Added:
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_dropdown.jsp
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_role.jsp
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_user.jsp
Modified:
    hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/hicc/Iframe.java
    hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/util/XssFilter.java
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/descriptors/host_selector.descriptor
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/index.jsp
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/js/workspace/workspace.js
    hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector.jsp

Modified: hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/hicc/Iframe.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/hicc/Iframe.java?rev=773122&r1=773121&r2=773122&view=diff
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/hicc/Iframe.java (original)
+++ hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/hicc/Iframe.java Fri May  8 22:15:53 2009
@@ -30,8 +30,8 @@
     PrintWriter out = response.getWriter();
     StringBuffer source = new StringBuffer();
     String requestURL = request.getRequestURL().toString().replaceFirst("iframe/", "");
-    if(requestURL.indexOf("/hicc")!=-1) {
-       requestURL = requestURL.substring(requestURL.indexOf("/hicc"));
+    if(requestURL.indexOf("/hicc/")!=-1) {
+       requestURL = requestURL.substring(requestURL.indexOf("/hicc/"));
     }
     source.append(requestURL);
     source.append("?");
@@ -39,11 +39,13 @@
     while (names.hasMoreElements()) {
       String key = xf.filter((String) names.nextElement());
       String[] values = xf.getParameterValues(key);
-      for (int i = 0; i < values.length; i++) {
-        source.append(key + "=" + values[i] + "&");
-      }
-      if (key.toLowerCase().intern() == "height".intern()) {
-        height = xf.getParameter(key);
+      if(values!=null) {
+        for (int i = 0; i < values.length; i++) {
+          source.append(key + "=" + values[i] + "&");
+        }
+        if (key.toLowerCase().intern() == "height".intern()) {
+          height = xf.getParameter(key);
+        }
       }
     }
     out.println("<html><body><iframe id=\"iframe" + this.id + "\" " + "src=\""

Modified: hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/util/XssFilter.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/util/XssFilter.java?rev=773122&r1=773121&r2=773122&view=diff
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/util/XssFilter.java (original)
+++ hadoop/chukwa/branches/chukwa-0.1/src/java/org/apache/hadoop/chukwa/util/XssFilter.java Fri May  8 22:15:53 2009
@@ -1,7 +1,28 @@
+/*
+ * 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.
+ */
+
 package org.apache.hadoop.chukwa.util;
 
+import java.util.Enumeration;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
 import javax.servlet.http.HttpServletRequest;
-
+import javax.servlet.http.HttpSession;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -10,12 +31,24 @@
 public class XssFilter {
     private HttpServletRequest request = null;
     private static Log log = LogFactory.getLog(XssFilter.class);
-    
+    private HttpSession session = null;
+
     public XssFilter() {
     }
 
     public XssFilter(HttpServletRequest request) {
       this.request = request;
+      this.session = request.getSession();
+      for (Enumeration e = request.getParameterNames() ; e.hasMoreElements() ;) {
+        Pattern p = Pattern.compile("_session\\.(.*)");
+        String name = (String) e.nextElement();
+        Matcher matcher = p.matcher(name);
+        if(matcher.find()) {
+            String realName = matcher.group(1);
+            session.setAttribute(realName,filter(request.getParameter(name)));
+        }
+      }
+
     }
     
     public String getParameter(String key) {

Modified: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/descriptors/host_selector.descriptor
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/descriptors/host_selector.descriptor?rev=773122&r1=773121&r2=773122&view=diff
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/descriptors/host_selector.descriptor (original)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/descriptors/host_selector.descriptor Fri May  8 22:15:53 2009
@@ -4,9 +4,12 @@
 "version":"0.1",
 "categories":"Global,Utility",
 "module":"jsp\/host_selector.jsp",
-"description":"Global control to manipulate hosts across widgets",
-"screendump":"",
+"description":"Global control to manipulate host selection across widgets",
 "refresh":"15",
 "parameters":[
-]
-}
+{"name":"style","type":"select","value":"role","label":"Selector Style","options":[
+{"label":"By node type","value":"role"},
+{"label":"By drop down list","value":"dropdown"},
+{"label":"By user input","value":"user"}
+]},
+]}

Modified: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/index.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/index.jsp?rev=773122&r1=773121&r2=773122&view=diff
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/index.jsp (original)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/index.jsp Fri May  8 22:15:53 2009
@@ -120,6 +120,9 @@
   <li><select class="formSelect" id="currentpage" onChange="changeView(this);"></select></li>
 </ul>
 <ul>
+  <li><a href="#" onClick="javascript:manage_content(); return false;"><img src="/hicc/images/table.png" border="0" align="absmiddle"> Dashboard Builder</a></li>
+</ul>
+<ul>
   <li><a href="#" onClick="return false;"><img src="/hicc/images/application.png" border="0" align="absmiddle"> Options</a>
     <ul>
       <table>
@@ -133,9 +136,6 @@
   </li>
 </ul>
 <ul>
-  <li><a href="#" onClick="javascript:manage_content(); return false;"><img src="/hicc/images/table.png" border="0" align="absmiddle"> Workspace Builder</a></li>
-</ul>
-<ul>
   <li><a href="#" onClick="saveView(); return false;"><img src="/hicc/images/drive.png" border="0" align="absmiddle"> Save Dashboard</a></li>
 </ul>
 </div>
@@ -149,12 +149,12 @@
 <div id="manage_view" style="display:none;overflow:hidden;width:100%;">
 <table cellspacing="10" cellpadding="0" width="100%" class="ppsmenu">
 <tr><td>
-<table width="100%" class="titlebar"><tr><td>Workspace</td><td align="right"><span class="glossy_icon"><a href="#" onClick="manage_content('close');"><img src="images/close.png" align="absmiddle"></a></span></td></tr></table>
+<table width="100%" class="titlebar"><tr><td>Dashboard</td><td align="right"><span class="glossy_icon"><a href="#" onClick="manage_content('close');"><img src="images/close.png" align="absmiddle"></a></span></td></tr></table>
 <div id="views_list_div">
 </div>
 </td></tr>
 <tr><td colspan="2">
-<input class="formButton" type="button" name="new_workspace" value="Create New Workspace" onClick="createNewView();"/>
+<input class="formButton" type="button" name="new_workspace" value="Create New Dashboard" onClick="createNewView();"/>
 </td></tr>
 </table>
 </div>

Modified: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/js/workspace/workspace.js
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/js/workspace/workspace.js?rev=773122&r1=773121&r2=773122&view=diff
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/js/workspace/workspace.js (original)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/js/workspace/workspace.js Fri May  8 22:15:53 2009
@@ -3246,7 +3246,7 @@
         "/hicc/jsp/session.jsp",
         {
             asynchronous: false,
-            method: 'get',
+            method: 'post',
             parameters: "hosts="+cookie
         }
     );
@@ -3256,6 +3256,49 @@
 
 }
 
+function save_host_user(boxId) {
+    var obj = document.getElementById(boxId+"group_items").value;
+    var hosts = obj.replace(/\n/g,",");
+    var myAjax=new Ajax.Request(
+        "/hicc/jsp/session.jsp",
+        {
+            asynchronous: false,
+            method: 'post',
+            parameters: {"hosts":hosts}
+        }
+    );
+    if (myAjax.success()) {
+        _currentView.getCurrentPage().refresh_all();
+    }
+}
+
+function save_host_role(boxId) {
+    var parameters = "save=true";
+    if(document.getElementById(boxId+"namenode").checked) {
+      parameters = parameters + "&namenode=true";
+    }
+    if(document.getElementById(boxId+"datanode").checked) {
+      parameters = parameters + "&datanode=true";
+    }
+    if(document.getElementById(boxId+"jobtracker").checked) {
+      parameters = parameters + "&jobtracker=true";
+    }
+    if(document.getElementById(boxId+"tasktracker").checked) {
+      parameters = parameters + "&tasktracker=true";
+    }
+    var myAjax=new Ajax.Request(
+        "/hicc/jsp/host_selector_role.jsp",
+        {
+            asynchronous: false,
+            method: 'post',
+            parameters: parameters
+        }
+    );
+    if (myAjax.success()) {
+        _currentView.getCurrentPage().refresh_all();
+    }
+}
+
 function save_hod(HodID) {
     var myAjax=new Ajax.Request(
         "/hicc/jsp/session.jsp",

Modified: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector.jsp?rev=773122&r1=773121&r2=773122&view=diff
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector.jsp (original)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector.jsp Fri May  8 22:15:53 2009
@@ -17,136 +17,31 @@
  * limitations under the License.
  */
 %>
-<%@ page import = "javax.servlet.http.*, java.sql.*,java.io.*, java.util.Calendar, java.util.Date, java.text.SimpleDateFormat, java.util.*, org.apache.hadoop.chukwa.hicc.ClusterConfig, org.apache.hadoop.chukwa.hicc.TimeHandler, org.apache.hadoop.chukwa.database.DatabaseConfig, org.apache.hadoop.chukwa.util.XssFilter"  %>
-<% XssFilter xf = new XssFilter(request);
-   String boxId = xf.getParameter("boxId"); %>
+<%@ page import = "java.text.SimpleDateFormat" %>
+<%@ page import = "java.text.NumberFormat" %>
+<%@ page import = "java.util.Hashtable" %>
+<%@ page import = "java.util.Enumeration" %>
+<%@ page import = "java.util.Calendar" %>
+<%@ page import = "java.util.Date" %>
+<%@ page import = "org.apache.hadoop.chukwa.hicc.TimeHandler" %>
+<%@ page import = "org.apache.hadoop.chukwa.util.XssFilter" %>
 <%
-   response.setHeader("boxId", xf.getParameter("boxId"));
+  RequestDispatcher disp = null;
+  XssFilter xf = new XssFilter(request);
+  response.setContentType("text/html; chartset=UTF-8//IGNORE");
+  response.setHeader("boxId", xf.getParameter("boxId"));
+  String hostSelectorType="dropdown";
+  if(request.getParameter("style")!=null) {
+    hostSelectorType=xf.getParameter("style");
+  }
+  if(hostSelectorType.intern()=="role".intern()) {
+    disp = getServletContext( ).getRequestDispatcher("/jsp/host_selector_role.jsp");
+    disp.forward(request, response);
+  } else if(hostSelectorType.intern()=="dropdown".intern()) {
+    disp = getServletContext( ).getRequestDispatcher("/jsp/host_selector_dropdown.jsp");
+    disp.forward(request, response);
+  } else if(hostSelectorType.intern()=="user".intern()) {
+    disp = getServletContext( ).getRequestDispatcher("/jsp/host_selector_user.jsp");
+    disp.forward(request, response);
+  } 
 %>
-<div class="panel">
-<h2>Hosts</h2>
-<fieldset>
-<div class="row">
-<select id="<%= boxId %>group_items" name="<%= boxId %>group_items" MULTIPLE size=10 class="formSelect" style="width:200px;">
-<%
-    String[] machineNames = (String [])session.getAttribute("machine_names");
-    String cluster=xf.getParameter("cluster");
-    if(cluster!=null && !cluster.equals("null")) {
-        session.setAttribute("cluster",cluster);
-    } else {
-        cluster = (String) session.getAttribute("cluster");
-        if(cluster==null || cluster.equals("null")) {
-            cluster="demo";
-            session.setAttribute("cluster",cluster);
-        }
-    }
-    ClusterConfig cc = new ClusterConfig();
-    String jdbc = cc.getURL(cluster);
-    TimeHandler time = new TimeHandler(request,(String)session.getAttribute("time_zone"));
-    String startS = time.getStartTimeText();
-    String endS = time.getEndTimeText();
-    String timefield = "timestamp";
-    String dateclause = timefield+" >= '"+startS+"' and "+timefield+" <= '"+endS+"'";
-    Connection conn = null;
-    Statement stmt = null;
-    ResultSet rs = null;
-    try {
-        HashMap<String, String> hosts = new HashMap<String, String>();
-        try {
-            String[] selected_hosts = ((String)session.getAttribute("hosts")).split(",");
-            for(String name: selected_hosts) {
-                hosts.put(name,name);
-            }
-        } catch (NullPointerException e) {
-    }
-           conn = org.apache.hadoop.chukwa.util.DriverManagerUtil.getConnection(jdbc);
-           stmt = conn.createStatement();
-           String query = "";
-           String HodID = (String)session.getAttribute("HodID");
-           if(HodID!=null && !HodID.equals("null") && !HodID.equals("")) {
-               query = "select DISTINCT Machine from HodMachine where HodID='"+HodID+"' order by Machine;";
-           } else if(machineNames==null) {
-               long start = time.getStartTime();
-               long end = time.getEndTime(); 
-               String table = "system_metrics";
-               DatabaseConfig dbc = new DatabaseConfig();
-               String[] tables = dbc.findTableName(table, start, end);
-               table=tables[0];
-               query="select DISTINCT host from "+table+" order by host";
-           }
-           // or alternatively, if you don't know ahead of time that
-           // the query will be a SELECT...
-           if(!query.equals("")) {
-               if (stmt.execute(query)) {
-                   int i=0;
-                   rs = stmt.getResultSet();
-                   rs.last();
-                   int size = rs.getRow();
-                   machineNames = new String[size];
-                   rs.beforeFirst();
-                   while (rs.next()) {
-                       String machine = rs.getString(1);
-                       machineNames[i]=machine;
-                       if(hosts.containsKey(machine)) {
-                           out.println("<option selected>"+machine+"</option>");
-                       } else {
-                           out.println("<option>"+machine+"</option>");
-                       }
-                       i++;
-                   }
-                   if(HodID==null || HodID.equals("null") || HodID.equals("")) {
-                       session.setAttribute("machine_names",machineNames);
-                   }
-               }
-           } else {
-                   for(String machine : machineNames) {
-                       if(hosts.containsKey(machine)) {
-                           out.println("<option selected>"+machine+"</option>");
-                       } else {
-                           out.println("<option>"+machine+"</option>");
-                       }
-                   }
-           }
-           // Now do something with the ResultSet ....
-       } 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
-           if (rs != null) {
-               try {
-                   rs.close();
-               } catch (SQLException sqlEx) {
-                   // ignore
-               }
-               rs = null;
-           }
-           if (stmt != null) {
-               try {
-                   stmt.close();
-               } catch (SQLException sqlEx) {
-                   // ignore
-               }
-               stmt = null;
-           }
-           if (conn != null) {
-               try {
-                   conn.close();
-               } catch (SQLException sqlEx) {
-                   // ignore
-               }
-               conn = null;
-           }
-       }
-%>
-</select></div>
-<div class="row">
-<input type="button" onClick="save_host('<%= boxId %>');" name="Apply" value="Apply" class="formButton">
-</div>
-</fieldset>
-</div>

Added: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_dropdown.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_dropdown.jsp?rev=773122&view=auto
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_dropdown.jsp (added)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_dropdown.jsp Fri May  8 22:15:53 2009
@@ -0,0 +1,166 @@
+<%
+/*
+ * 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 = "javax.servlet.http.*" %>
+<%@ page import = "java.sql.*" %>
+<%@ page import = "java.io.*" %>
+<%@ page import = "java.util.Calendar" %>
+<%@ page import = "java.util.Date" %>
+<%@ page import = "java.text.SimpleDateFormat" %>
+<%@ page import = "java.util.*" %>
+<%@ page import = "org.json.*" %>
+<%@ page import = "org.apache.hadoop.chukwa.hicc.ClusterConfig" %>
+<%@ page import = "org.apache.hadoop.chukwa.hicc.TimeHandler" %>
+<%@ page import = "org.apache.hadoop.chukwa.database.DatabaseConfig" %>
+<%@ page import = "org.apache.hadoop.chukwa.util.XssFilter"  %>
+<% XssFilter xf = new XssFilter(request);
+   String boxId = xf.getParameter("boxId");
+   response.setHeader("boxId", xf.getParameter("boxId"));
+%>
+<div class="panel">
+<h2>Hosts</h2>
+<fieldset>
+<div class="row">
+<select id="<%= boxId %>group_items" name="<%= boxId %>group_items" MULTIPLE size=10 class="formSelect" style="width:200px;">
+<%
+    JSONArray machineNames = null;
+    if(session.getAttribute("machine_names")!=null) {
+        machineNames = new JSONArray(session.getAttribute("machine_names").toString());
+    }
+    String cluster=xf.getParameter("cluster");
+    if(cluster!=null && !cluster.equals("null")) {
+        session.setAttribute("cluster",cluster);
+    } else {
+        cluster = (String) session.getAttribute("cluster");
+        if(cluster==null || cluster.equals("null")) {
+            cluster="demo";
+            session.setAttribute("cluster",cluster);
+        }
+    }
+    ClusterConfig cc = new ClusterConfig();
+    String jdbc = cc.getURL(cluster);
+    TimeHandler time = new TimeHandler(request,(String)session.getAttribute("time_zone"));
+    String startS = time.getStartTimeText();
+    String endS = time.getEndTimeText();
+    String timefield = "timestamp";
+    String dateclause = timefield+" >= '"+startS+"' and "+timefield+" <= '"+endS+"'";
+    Connection conn = null;
+    Statement stmt = null;
+    ResultSet rs = null;
+    try {
+        HashMap<String, String> hosts = new HashMap<String, String>();
+        try {
+            String[] selected_hosts = ((String)session.getAttribute("hosts")).split(",");
+            for(String name: selected_hosts) {
+                hosts.put(name,name);
+            }
+        } catch (NullPointerException e) {
+    }
+           conn = org.apache.hadoop.chukwa.util.DriverManagerUtil.getConnection(jdbc);
+           stmt = conn.createStatement();
+           String query = "";
+           String jobId = (String)session.getAttribute("JobID");
+           if(jobId!=null && !jobId.equals("null") && !jobId.equals("")) {
+               query = "select DISTINCT Machine from HodMachine where HodID='"+jobId+"' order by Machine;";
+           } else if(machineNames==null) {
+               long start = time.getStartTime();
+               long end = time.getEndTime(); 
+               String table = "system_metrics";
+               DatabaseConfig dbc = new DatabaseConfig();
+               String[] tables = dbc.findTableName(table, start, end);
+               table=tables[0];
+               query="select DISTINCT host from "+table+" order by host";
+           }
+           // or alternatively, if you don't know ahead of time that
+           // the query will be a SELECT...
+           if(!query.equals("")) {
+               if (stmt.execute(query)) {
+                   int i=0;
+                   rs = stmt.getResultSet();
+                   rs.last();
+                   int size = rs.getRow();
+                   machineNames = new JSONArray();
+                   rs.beforeFirst();
+                   while (rs.next()) {
+                       String machine = rs.getString(1);
+                       machineNames.put(machine);
+                       if(hosts.containsKey(machine)) {
+                           out.println("<option selected>"+machine+"</option>");
+                       } else {
+                           out.println("<option>"+machine+"</option>");
+                       }
+                       i++;
+                   }
+                   if(jobId==null || jobId.equals("null") || jobId.equals("")) {
+                       session.setAttribute("machine_names",machineNames.toString());
+                   }
+               }
+           } else {
+                   for(int j=0;j<machineNames.length();j++) {
+                       String machine = machineNames.get(j).toString();
+                       if(hosts.containsKey(machine)) {
+                           out.println("<option selected>"+machine+"</option>");
+                       } else {
+                           out.println("<option>"+machine+"</option>");
+                       }
+                   }
+           }
+           // Now do something with the ResultSet ....
+       } 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
+           if (rs != null) {
+               try {
+                   rs.close();
+               } catch (SQLException sqlEx) {
+                   // ignore
+               }
+               rs = null;
+           }
+           if (stmt != null) {
+               try {
+                   stmt.close();
+               } catch (SQLException sqlEx) {
+                   // ignore
+               }
+               stmt = null;
+           }
+           if (conn != null) {
+               try {
+                   conn.close();
+               } catch (SQLException sqlEx) {
+                   // ignore
+               }
+               conn = null;
+           }
+       }
+%>
+</select></div>
+<div class="row">
+<input type="button" onClick="save_host('<%= boxId %>');" name="Apply" value="Apply" class="formButton">
+</div>
+</fieldset>
+</div>

Added: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_role.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_role.jsp?rev=773122&view=auto
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_role.jsp (added)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_role.jsp Fri May  8 22:15:53 2009
@@ -0,0 +1,89 @@
+<%
+/*
+ * 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 = "javax.servlet.http.*" %>
+<%@ page import = "java.sql.*" %>
+<%@ page import = "java.io.*" %>
+<%@ page import = "java.util.Calendar" %>
+<%@ page import = "java.util.Date" %>
+<%@ page import = "java.text.SimpleDateFormat" %>
+<%@ page import = "java.util.*" %>
+<%@ page import = "org.json.*" %>
+<%@ page import = "org.apache.hadoop.chukwa.database.Macro" %>
+<%@ page import = "org.apache.hadoop.chukwa.hicc.ClusterConfig" %>
+<%@ page import = "org.apache.hadoop.chukwa.hicc.TimeHandler" %>
+<%@ page import = "org.apache.hadoop.chukwa.util.DatabaseWriter" %>
+<%@ page import = "org.apache.hadoop.chukwa.util.XssFilter"  %>
+<% XssFilter xf = new XssFilter(request);
+   String boxId = xf.getParameter("boxId");
+   response.setHeader("boxId", xf.getParameter("boxId"));
+   TimeHandler time = new TimeHandler(request, (String)session.getAttribute("time_zone"));
+   long start = time.getStartTime();
+   long end = time.getEndTime();
+   String cluster = (String) session.getAttribute("cluster");
+   boolean first = false;
+   String[] types = {"namenode","datanode","jobtracker","tasktracker"};
+   String[] queries = {"select distinct host from [dfs_namenode] where timestamp between '[start]' and '[end]'",
+                       "select distinct host from [hadoop_jvm] where process_name='datanode' and timestamp between '[start]' and '[end]'",
+                       "select distinct host from [hadoop_jvm] where process_name='jobtracker' and timestamp between '[start]' and '[end]'",
+                       "select distinct host from [hadoop_jvm] where process_name='tasktracker' and timestamp between '[start]' and '[end]'"};
+   int i = 0;
+   StringBuffer hosts = new StringBuffer();
+   JSONObject roles = new JSONObject();
+   for(String type : types) {
+     if(xf.getParameter(type)!=null) {
+       Macro mp = new Macro(start, end, queries[i]);
+       String query = mp.toString();
+       DatabaseWriter db = new DatabaseWriter(cluster);
+       try {
+         ResultSet rs = db.query(query);
+         while(rs.next()) {
+           if(!first) {
+             hosts.append(",");
+           }
+           hosts.append(rs.getString(1));
+           first=false;
+         }
+         roles.put(type,"checked");
+       } catch(SQLException ex) {
+         // Ignore if there is no data for the cluster.
+       } finally {
+         db.close();
+       }
+     } else {
+       roles.put(type,"");
+     }
+     i++;
+   }
+   if(xf.getParameter("save")!=null) {
+     session.setAttribute("hosts",hosts.toString());
+     session.setAttribute("host.selector.role",roles.toString());
+   } else {
+     if(session.getAttribute("host.selector.role")!=null) {
+       roles = new JSONObject(session.getAttribute("host.selector.role").toString());
+     }
+   }
+%>
+HDFS Cluster<br>
+<input type="checkbox" id="<%= boxId %>namenode" value="true" <%= roles.get("namenode") %>> Name Nodes<br>
+<input type="checkbox" id="<%= boxId %>datanode" value="true" <%= roles.get("datanode") %>> Data Nodes<br><br>
+Map Reduce Cluster<br>
+<input type="checkbox" id="<%= boxId %>jobtracker" value="true" <%= roles.get("jobtracker") %>> Job Tracker<br>
+<input type="checkbox" id="<%= boxId %>tasktracker" value="true" <%= roles.get("tasktracker") %>> Task Trackers<br><br>
+<input type="button" onClick="save_host_role('<%= boxId %>');" name="Apply" value="Apply" class="formButton">

Added: hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_user.jsp
URL: http://svn.apache.org/viewvc/hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_user.jsp?rev=773122&view=auto
==============================================================================
--- hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_user.jsp (added)
+++ hadoop/chukwa/branches/chukwa-0.1/src/web/hicc/jsp/host_selector_user.jsp Fri May  8 22:15:53 2009
@@ -0,0 +1,35 @@
+<%
+/*
+ * 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 = "javax.servlet.http.*" %>
+<%@ page import = "org.apache.hadoop.chukwa.util.XssFilter"  %>
+<% XssFilter xf = new XssFilter(request);
+   String boxId = xf.getParameter("boxId");
+   response.setHeader("boxId", xf.getParameter("boxId"));
+%>
+<h2>Hosts</h2>
+<textarea id="<%= boxId %>group_items" name="<%= boxId %>group_items" class="formSelect" style="width:200px;"><%
+  if(session.getAttribute("hosts")!=null) {
+    String[] machineNames = (session.getAttribute("hosts").toString()).split(",");
+    for(String node: machineNames) {
+      out.println(node);
+    }
+  }
+%></textarea><br>
+<input type="button" onClick="save_host_user('<%= boxId %>');" name="Apply" value="Apply" class="formButton">