View Javadoc

1   package org.apache.hadoop.hbase.generated.master;
2   
3   import javax.servlet.*;
4   import javax.servlet.http.*;
5   import javax.servlet.jsp.*;
6   import java.util.*;
7   import org.apache.hadoop.conf.Configuration;
8   import org.apache.hadoop.util.StringUtils;
9   import org.apache.hadoop.hbase.util.Bytes;
10  import org.apache.hadoop.hbase.util.JvmVersion;
11  import org.apache.hadoop.hbase.util.FSUtils;
12  import org.apache.hadoop.hbase.master.HMaster;
13  import org.apache.hadoop.hbase.HConstants;
14  import org.apache.hadoop.hbase.client.HBaseAdmin;
15  import org.apache.hadoop.hbase.client.HConnectionManager;
16  import org.apache.hadoop.hbase.HServerInfo;
17  import org.apache.hadoop.hbase.HServerAddress;
18  import org.apache.hadoop.hbase.HTableDescriptor;
19  
20  public final class master_jsp extends org.apache.jasper.runtime.HttpJspBase
21      implements org.apache.jasper.runtime.JspSourceDependent {
22  
23    private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
24  
25    private static java.util.Vector _jspx_dependants;
26  
27    private org.apache.jasper.runtime.ResourceInjector _jspx_resourceInjector;
28  
29    public Object getDependants() {
30      return _jspx_dependants;
31    }
32  
33    public void _jspService(HttpServletRequest request, HttpServletResponse response)
34          throws java.io.IOException, ServletException {
35  
36      PageContext pageContext = null;
37      HttpSession session = null;
38      ServletContext application = null;
39      ServletConfig config = null;
40      JspWriter out = null;
41      Object page = this;
42      JspWriter _jspx_out = null;
43      PageContext _jspx_page_context = null;
44  
45      try {
46        response.setContentType("text/html;charset=UTF-8");
47        pageContext = _jspxFactory.getPageContext(this, request, response,
48        			null, true, 8192, true);
49        _jspx_page_context = pageContext;
50        application = pageContext.getServletContext();
51        config = pageContext.getServletConfig();
52        session = pageContext.getSession();
53        out = pageContext.getOut();
54        _jspx_out = out;
55        _jspx_resourceInjector = (org.apache.jasper.runtime.ResourceInjector) application.getAttribute("com.sun.appserv.jsp.resource.injector");
56  
57  
58    HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
59    Configuration conf = master.getConfiguration();
60    HServerAddress rootLocation = master.getCatalogTracker().getRootLocation();
61    boolean metaOnline = master.getCatalogTracker().getMetaLocation() != null;
62    Map<String, HServerInfo> serverToServerInfos =
63      master.getServerManager().getOnlineServers();
64    int interval = conf.getInt("hbase.regionserver.msginterval", 1000)/1000;
65    if (interval == 0) {
66        interval = 1;
67    }
68    boolean showFragmentation = conf.getBoolean("hbase.master.ui.fragmentation.enabled", false);
69    Map<String, Integer> frags = null;
70    if (showFragmentation) {
71        frags = FSUtils.getTableFragmentation(master);
72    }
73  
74        out.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \n  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> \n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"/>\n<title>HBase Master: ");
75        out.print( master.getMasterAddress().getHostname());
76        out.write(':');
77        out.print( master.getMasterAddress().getPort() );
78        out.write("</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/static/hbase.css\" />\n</head>\n<body>\n<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>\n<h1 id=\"page_title\">Master: ");
79        out.print(master.getMasterAddress().getHostname());
80        out.write(':');
81        out.print(master.getMasterAddress().getPort());
82        out.write("</h1>\n<p id=\"links_menu\"><a href=\"/logs/\">Local logs</a>, <a href=\"/stacks\">Thread Dump</a>, <a href=\"/logLevel\">Log Level</a></p>\n\n<!-- Various warnings that cluster admins should be aware of -->\n");
83   if (JvmVersion.isBadJvmVersion()) { 
84        out.write("\n  <div class=\"warning\">\n  Your current JVM version ");
85        out.print( System.getProperty("java.version") );
86        out.write(" is known to be\n  unstable with HBase. Please see the\n  <a href=\"http://wiki.apache.org/hadoop/Hbase/Troubleshooting#A18\">HBase wiki</a>\n  for details.\n  </div>\n");
87   } 
88        out.write('\n');
89   if (!FSUtils.isAppendSupported(conf) && FSUtils.isHDFS(conf)) { 
90        out.write("\n  <div class=\"warning\">\n  You are currently running the HMaster without HDFS append support enabled.\n  This may result in data loss.\n  Please see the <a href=\"http://wiki.apache.org/hadoop/Hbase/HdfsSyncSupport\">HBase wiki</a>\n  for details.\n  </div>\n");
91   } 
92        out.write("\n\n<hr id=\"head_rule\" />\n\n<h2>Master Attributes</h2>\n<table>\n<tr><th>Attribute Name</th><th>Value</th><th>Description</th></tr>\n<tr><td>HBase Version</td><td>");
93        out.print( org.apache.hadoop.hbase.util.VersionInfo.getVersion() );
94        out.write(", r");
95        out.print( org.apache.hadoop.hbase.util.VersionInfo.getRevision() );
96        out.write("</td><td>HBase version and svn revision</td></tr>\n<tr><td>HBase Compiled</td><td>");
97        out.print( org.apache.hadoop.hbase.util.VersionInfo.getDate() );
98        out.write(',');
99        out.write(' ');
100       out.print( org.apache.hadoop.hbase.util.VersionInfo.getUser() );
101       out.write("</td><td>When HBase version was compiled and by whom</td></tr>\n<tr><td>Hadoop Version</td><td>");
102       out.print( org.apache.hadoop.util.VersionInfo.getVersion() );
103       out.write(", r");
104       out.print( org.apache.hadoop.util.VersionInfo.getRevision() );
105       out.write("</td><td>Hadoop version and svn revision</td></tr>\n<tr><td>Hadoop Compiled</td><td>");
106       out.print( org.apache.hadoop.util.VersionInfo.getDate() );
107       out.write(',');
108       out.write(' ');
109       out.print( org.apache.hadoop.util.VersionInfo.getUser() );
110       out.write("</td><td>When Hadoop version was compiled and by whom</td></tr>\n<tr><td>HBase Root Directory</td><td>");
111       out.print( FSUtils.getRootDir(master.getConfiguration()).toString() );
112       out.write("</td><td>Location of HBase home directory</td></tr>\n<tr><td>Load average</td><td>");
113       out.print( StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad()) );
114       out.write("</td><td>Average number of regions per regionserver. Naive computation.</td></tr>\n");
115   if (showFragmentation) { 
116       out.write("\n        <tr><td>Fragmentation</td><td>");
117       out.print( frags.get("-TOTAL-") != null ? frags.get("-TOTAL-").intValue() + "%" : "n/a" );
118       out.write("</td><td>Overall fragmentation of all tables, including .META. and -ROOT-.</td></tr>\n");
119   } 
120       out.write("\n<tr><td>Zookeeper Quorum</td><td>");
121       out.print( master.getZooKeeperWatcher().getQuorum() );
122       out.write("</td><td>Addresses of all registered ZK servers. For more, see <a href=\"/zk.jsp\">zk dump</a>.</td></tr>\n</table>\n\n<h2>Catalog Tables</h2>\n");
123  
124   if (rootLocation != null) { 
125       out.write("\n<table>\n<tr>\n    <th>Table</th>\n");
126   if (showFragmentation) { 
127       out.write("\n        <th title=\"Fragmentation - Will be 0% after a major compaction and fluctuate during normal usage.\">Frag.</th>\n");
128   } 
129       out.write("\n    <th>Description</th>\n</tr>\n<tr>\n    <td><a href=\"table.jsp?name=");
130       out.print( Bytes.toString(HConstants.ROOT_TABLE_NAME) );
131       out.write('"');
132       out.write('>');
133       out.print( Bytes.toString(HConstants.ROOT_TABLE_NAME) );
134       out.write("</a></td>\n");
135   if (showFragmentation) { 
136       out.write("\n        <td align=\"center\">");
137       out.print( frags.get("-ROOT-") != null ? frags.get("-ROOT-").intValue() + "%" : "n/a" );
138       out.write("</td>\n");
139   } 
140       out.write("\n    <td>The -ROOT- table holds references to all .META. regions.</td>\n</tr>\n");
141 
142     if (metaOnline) { 
143       out.write("\n<tr>\n    <td><a href=\"table.jsp?name=");
144       out.print( Bytes.toString(HConstants.META_TABLE_NAME) );
145       out.write('"');
146       out.write('>');
147       out.print( Bytes.toString(HConstants.META_TABLE_NAME) );
148       out.write("</a></td>\n");
149   if (showFragmentation) { 
150       out.write("\n        <td align=\"center\">");
151       out.print( frags.get(".META.") != null ? frags.get(".META.").intValue() + "%" : "n/a" );
152       out.write("</td>\n");
153   } 
154       out.write("\n    <td>The .META. table holds references to all User Table regions</td>\n</tr>\n  \n");
155   } 
156       out.write("\n</table>\n");
157 } 
158       out.write("\n\n<h2>User Tables</h2>\n");
159 
160    HBaseAdmin hba = new HBaseAdmin(conf);
161    HTableDescriptor[] tables = hba.listTables();
162    HConnectionManager.deleteConnection(hba.getConfiguration(), false);
163    if(tables != null && tables.length > 0) { 
164       out.write("\n<table>\n<tr>\n    <th>Table</th>\n");
165   if (showFragmentation) { 
166       out.write("\n        <th title=\"Fragmentation - Will be 0% after a major compaction and fluctuate during normal usage.\">Frag.</th>\n");
167   } 
168       out.write("\n    <th>Description</th>\n</tr>\n");
169    for(HTableDescriptor htDesc : tables ) { 
170       out.write("\n<tr>\n    <td><a href=table.jsp?name=");
171       out.print( htDesc.getNameAsString() );
172       out.write('>');
173       out.print( htDesc.getNameAsString() );
174       out.write("</a> </td>\n");
175   if (showFragmentation) { 
176       out.write("\n        <td align=\"center\">");
177       out.print( frags.get(htDesc.getNameAsString()) != null ? frags.get(htDesc.getNameAsString()).intValue() + "%" : "n/a" );
178       out.write("</td>\n");
179   } 
180       out.write("\n    <td>");
181       out.print( htDesc.toString() );
182       out.write("</td>\n</tr>\n");
183    }  
184       out.write("\n\n<p> ");
185       out.print( tables.length );
186       out.write(" table(s) in set.</p>\n</table>\n");
187  } 
188       out.write("\n\n<h2>Region Servers</h2>\n");
189  if (serverToServerInfos != null && serverToServerInfos.size() > 0) { 
190       out.write('\n');
191    int totalRegions = 0;
192      int totalRequests = 0; 
193 
194       out.write("\n\n<table>\n<tr><th rowspan=\"");
195       out.print( serverToServerInfos.size() + 1);
196       out.write("\"></th><th>Address</th><th>Start Code</th><th>Load</th></tr>\n");
197    String[] serverNames = serverToServerInfos.keySet().toArray(new String[serverToServerInfos.size()]);
198      Arrays.sort(serverNames);
199      for (String serverName: serverNames) {
200        HServerInfo hsi = serverToServerInfos.get(serverName);
201        String hostname = hsi.getServerAddress().getHostname() + ":" + hsi.getInfoPort();
202        String url = "http://" + hostname + "/";
203        totalRegions += hsi.getLoad().getNumberOfRegions();
204        totalRequests += hsi.getLoad().getNumberOfRequests() / interval;
205        long startCode = hsi.getStartCode();
206 
207       out.write("\n<tr><td><a href=\"");
208       out.print( url );
209       out.write('"');
210       out.write('>');
211       out.print( hostname );
212       out.write("</a></td><td>");
213       out.print( startCode );
214       out.write("</td><td>");
215       out.print( hsi.getLoad().toString(interval) );
216       out.write("</td></tr>\n");
217    } 
218       out.write("\n<tr><th>Total: </th><td>servers: ");
219       out.print( serverToServerInfos.size() );
220       out.write("</td><td>&nbsp;</td><td>requests=");
221       out.print( totalRequests );
222       out.write(", regions=");
223       out.print( totalRegions );
224       out.write("</td></tr>\n</table>\n\n<p>Load is requests per second and count of regions loaded</p>\n");
225  } 
226       out.write("\n</body>\n</html>\n");
227     } catch (Throwable t) {
228       if (!(t instanceof SkipPageException)){
229         out = _jspx_out;
230         if (out != null && out.getBufferSize() != 0)
231           out.clearBuffer();
232         if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
233       }
234     } finally {
235       _jspxFactory.releasePageContext(_jspx_page_context);
236     }
237   }
238 }