Author: liyin
Date: Thu Aug  1 18:18:23 2013
New Revision: 1509362

URL: http://svn.apache.org/r1509362
Log:
[HBASE-9105] web ui for regionchecker

Author: ibra

Summary: web ui for region checker

Test Plan: go to http://hbasedev125.ash3.facebook.com:60010/master.jsp and 
click 'Region Checker'

Reviewers: rshroff, aaiyer

Reviewed By: rshroff

CC: hbase-eng@

Differential Revision: https://phabricator.fb.com/D880146

Task ID: 2130094

Added:
    
hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/regionChecker.jsp
Modified:
    hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/master.jsp

Modified: 
hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/master.jsp
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/master.jsp?rev=1509362&r1=1509361&r2=1509362&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/master.jsp 
(original)
+++ hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/master.jsp 
Thu Aug  1 18:18:23 2013
@@ -39,7 +39,7 @@
 <body>
 <a id="logo" href="http://wiki.apache.org/lucene-hadoop/Hbase";><img 
src="/static/hbase_logo_med.gif" alt="HBase Logo" title="HBase Logo" /></a>
 <h1 id="page_title">Master: 
<%=master.getMasterAddress().getHostname()%>:<%=master.getMasterAddress().getPort()%></h1>
-<p id="links_menu"><a href="/logs/">Local logs</a>, <a href="/stacks">Thread 
Dump</a>, <a href="/logLevel">Log Level</a>, <a href="/taskmonitor">Task 
Monitor</a>, <a href="/conf">HBase Configuration</a> <a 
href="assignmentPlan.jsp">HBase Assignment Plan</a>
+<p id="links_menu"><a href="/logs/">Local logs</a>, <a href="/stacks">Thread 
Dump</a>, <a href="/logLevel">Log Level</a>, <a href="/taskmonitor">Task 
Monitor</a>, <a href="/conf">HBase Configuration</a> <a 
href="assignmentPlan.jsp">HBase Assignment Plan</a> <a 
href="regionChecker.jsp">Region Checker</a>
 <% if (master.isLoadBalancerDisabled()) { %>
   <div class="warning"> <b><font color="#FF0000"> The load balancer has been 
disabled </font></b></div>
 <% } %>

Added: 
hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/regionChecker.jsp
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/regionChecker.jsp?rev=1509362&view=auto
==============================================================================
--- 
hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/regionChecker.jsp
 (added)
+++ 
hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/regionChecker.jsp
 Thu Aug  1 18:18:23 2013
@@ -0,0 +1,121 @@
+<%@ page contentType="text/html;charset=UTF-8"
+  import="java.util.*"
+  import="java.text.SimpleDateFormat"
+  import="java.util.Date"
+  import="org.apache.hadoop.conf.Configuration"
+  import="org.apache.hadoop.hbase.util.Bytes"
+  import="org.apache.hadoop.hbase.util.JvmVersion"
+  import="org.apache.hadoop.hbase.util.FSUtils"
+  import="org.apache.hadoop.hbase.master.HMaster"
+  import="org.apache.hadoop.hbase.HConstants"
+  import="org.apache.hadoop.hbase.master.MetaRegion"
+  import="org.apache.hadoop.hbase.client.HBaseAdmin"
+  import="org.apache.hadoop.hbase.HServerInfo"
+  import="org.apache.hadoop.hbase.HServerAddress"
+  import="org.apache.hadoop.hbase.HTableDescriptor"
+  import="org.apache.hadoop.hbase.HColumnDescriptor"
+  import="org.apache.hadoop.hbase.HRegionInfo"
+  import="org.apache.hadoop.hbase.master.RegionPlacement"
+  import="org.apache.hadoop.hbase.master.RegionAssignmentSnapshot"
+  import="org.apache.hadoop.hbase.master.AssignmentPlan"
+  import="org.apache.hadoop.hbase.master.RegionChecker.RegionAvailabilityInfo"
+  import="org.apache.hadoop.hbase.util.Pair"
+%><%
+  HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
+
+%><?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html xmlns="http://www.w3.org/1999/xhtml";>
+       <head>
+               <meta http-equiv="Content-Type" 
content="text/html;charset=UTF-8"/>
+               <title>RegionChecker</title>
+               <link rel="stylesheet" type="text/css" href="/static/hbase.css" 
/>
+       </head>
+       <body>
+<%
+               if(!master.getServerManager().getRegionChecker().isEnabled())
+               {
+%>
+                       <p>Region Checker is disabled</p>
+<%
+               }
+               else
+               {
+                       double lastDayAvailability = 
master.getServerManager().getRegionChecker().getLastDayAvailability();
+                       double lastWeekAvailability = 
master.getServerManager().getRegionChecker().getLastWeekAvailability();
+%>
+
+                       <table>
+                               <caption><b>Whole cluster availability 
information</b></caption>
+                               <tr>
+                                       <td>Last 24 hours availability of whole 
cluster</td>
+                                       <td><%=String.format("%.15f", 
lastDayAvailability)%></td>
+                               </tr>
+                               <tr>
+                                       <td>Last 7 days availability of whole 
cluster</td>
+                                       <td><%=String.format("%.15f", 
lastWeekAvailability)%></td>
+                               </tr>
+                       </table>
+
+<%
+                       SimpleDateFormat dateFormat = new 
SimpleDateFormat("dd-MM-yyyy HH:mm:ss SSS");
+                       Map<String, RegionAvailabilityInfo> detailedDayInfo = 
master.getServerManager().getRegionChecker().getDetailedLastDayAvailability();
+                       Map<String, RegionAvailabilityInfo> detailedWeekInfo = 
master.getServerManager().getRegionChecker().getDetailedLastWeekAvailability();
+                       Set<String> keys = detailedWeekInfo.keySet();
+                       List<Pair<RegionAvailabilityInfo, String>> list = new 
ArrayList<Pair<RegionAvailabilityInfo, String>> ();
+                       for(String key : keys)
+                               list.add(new Pair<RegionAvailabilityInfo, 
String>(detailedDayInfo.get(key), key));
+
+                       Comparator<Pair<RegionAvailabilityInfo, String>> 
comparator = new Comparator<Pair<RegionAvailabilityInfo,String>>()
+                       {
+                               @Override
+                               public int compare(Pair<RegionAvailabilityInfo, 
String> o1, Pair<RegionAvailabilityInfo, String> o2)
+                               {
+                                       
if(Math.abs(o1.getFirst().getAvailability() - o2.getFirst().getAvailability()) 
< 1e-9)
+                                               return 0;
+                                       else if(o1.getFirst().getAvailability() 
> o2.getFirst().getAvailability())
+                                               return -1;
+                                       else
+                                               return 1;
+                               }
+                       };
+
+                       Collections.sort(list, comparator);
+                       Collections.reverse(list);
+%>
+                       <br>
+                       <table>
+                       <caption><b>Detailed availability information about all 
regions</b></caption>
+                       <tr>
+                               <td><b>Region</b></td>
+                               <td><b>Last 24 hours availability</b></td>
+                               <td><b>Last 7 days availability</b></td>
+                               <td><b>Last unassignment interval</b></td>
+                               <td><b>Last unassignment interval 
duration(ms)</b></td>
+                               <td><b>Unassigment intervals count for last 24 
hours</b></td>
+                               <td><b>Unassigment intervals count for last 7 
days</b></td>
+                       </tr>
+<%
+                       for (int i = 0; i < list.size(); i++)
+                       {
+                               String key = list.get(i).getSecond();
+%>
+                               <tr>
+                                       <td><%=key%></td>
+                                       
<td><%=(detailedDayInfo.containsKey(key)?String.format("%.15f", 
detailedDayInfo.get(key).getAvailability()):"1.0")%></td>
+                                       
<td><%=(detailedWeekInfo.containsKey(key)?String.format("%.15f", 
detailedWeekInfo.get(key).getAvailability()):"1.0")%></td>
+                                       
<td><%=(detailedWeekInfo.containsKey(key)?detailedWeekInfo.get(key).getInterval():"")%></td>
+                                       
<td><%=((detailedWeekInfo.containsKey(key) && 
detailedWeekInfo.get(key).getIntervalsCount()>0)?detailedWeekInfo.get(key).getDuration():"")%></td>
+                                       
<td><%=detailedDayInfo.get(key).getIntervalsCount()%></td>
+                                       
<td><%=detailedWeekInfo.get(key).getIntervalsCount()%></td>
+                               </tr>
+<%
+                       }
+%>
+                       </table>
+<%
+               }
+%>
+       </body>
+</html>


Reply via email to