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> </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 }