1
2
3
4 package org.apache.hadoop.hbase.tmpl.master;
5
6
7 import java.util.*;
8
9 import org.apache.hadoop.hbase.HBaseConfiguration;
10
11 import org.apache.hadoop.hbase.HConstants;
12
13 import org.apache.hadoop.hbase.HRegionInfo;
14
15 import org.apache.hadoop.hbase.HTableDescriptor;
16
17 import org.apache.hadoop.hbase.NamespaceDescriptor;
18
19 import org.apache.hadoop.hbase.ServerLoad;
20
21 import org.apache.hadoop.hbase.ServerName;
22
23 import org.apache.hadoop.hbase.client.Admin;
24
25 import org.apache.hadoop.hbase.client.HConnectionManager;
26
27 import org.apache.hadoop.hbase.HRegionInfo;
28
29 import org.apache.hadoop.hbase.master.RegionState;
30
31 import org.apache.hadoop.hbase.HTableDescriptor;
32
33 import org.apache.hadoop.hbase.HBaseConfiguration;
34
35 import org.apache.hadoop.hbase.TableName;
36
37 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
38
39 import org.apache.hadoop.hbase.master.AssignmentManager;
40
41 import org.apache.hadoop.hbase.master.DeadServer;
42
43 import org.apache.hadoop.hbase.master.HMaster;
44
45 import org.apache.hadoop.hbase.master.RegionState;
46
47 import org.apache.hadoop.hbase.master.ServerManager;
48
49 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
50
51 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
52
53 import org.apache.hadoop.hbase.quotas.QuotaUtil;
54
55 import org.apache.hadoop.hbase.security.access.AccessControlLists;
56
57 import org.apache.hadoop.hbase.security.visibility.VisibilityConstants;
58
59 import org.apache.hadoop.hbase.tool.Canary;
60
61 import org.apache.hadoop.hbase.util.Bytes;
62
63 import org.apache.hadoop.hbase.util.FSUtils;
64
65 import org.apache.hadoop.hbase.util.JvmVersion;
66
67 import org.apache.hadoop.util.StringUtils;
68
69 public class MasterStatusTmplImpl
70 extends org.jamon.AbstractTemplateImpl
71 implements org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.Intf
72
73 {
74 private final HMaster master;
75 private final ServerManager serverManager;
76 private final ServerName metaLocation;
77 private final boolean catalogJanitorEnabled;
78 private final AssignmentManager assignmentManager;
79 private final Set<ServerName> deadServers;
80 private final String filter;
81 private final List<ServerName> servers;
82 private final String format;
83 private final Map<String,Integer> frags;
84
85
86 public String formatZKString() {
87 StringBuilder quorums = new StringBuilder();
88 String zkQuorum = master.getZooKeeper().getQuorum();
89
90 if (null == zkQuorum) {
91 return quorums.toString();
92 }
93
94 String[] zks = zkQuorum.split(",");
95
96 if (zks.length == 0) {
97 return quorums.toString();
98 }
99
100 for(int i = 0; i < zks.length; ++i) {
101 quorums.append(zks[i].trim());
102
103 if (i != (zks.length - 1)) {
104 quorums.append("<br/>");
105 }
106 }
107
108 return quorums.toString();
109 }
110
111 protected static org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)
112 {
113 if(! p_implData.getServerManager__IsNotDefault())
114 {
115 p_implData.setServerManager(null);
116 }
117 if(! p_implData.getMetaLocation__IsNotDefault())
118 {
119 p_implData.setMetaLocation(null);
120 }
121 if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())
122 {
123 p_implData.setCatalogJanitorEnabled(true);
124 }
125 if(! p_implData.getAssignmentManager__IsNotDefault())
126 {
127 p_implData.setAssignmentManager(null);
128 }
129 if(! p_implData.getDeadServers__IsNotDefault())
130 {
131 p_implData.setDeadServers(null);
132 }
133 if(! p_implData.getFilter__IsNotDefault())
134 {
135 p_implData.setFilter("general");
136 }
137 if(! p_implData.getServers__IsNotDefault())
138 {
139 p_implData.setServers(null);
140 }
141 if(! p_implData.getFormat__IsNotDefault())
142 {
143 p_implData.setFormat("html");
144 }
145 if(! p_implData.getFrags__IsNotDefault())
146 {
147 p_implData.setFrags(null);
148 }
149 return p_implData;
150 }
151 public MasterStatusTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)
152 {
153 super(p_templateManager, __jamon_setOptionalArguments(p_implData));
154 master = p_implData.getMaster();
155 serverManager = p_implData.getServerManager();
156 metaLocation = p_implData.getMetaLocation();
157 catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();
158 assignmentManager = p_implData.getAssignmentManager();
159 deadServers = p_implData.getDeadServers();
160 filter = p_implData.getFilter();
161 servers = p_implData.getServers();
162 format = p_implData.getFormat();
163 frags = p_implData.getFrags();
164 }
165
166 @Override public void renderNoFlush(final java.io.Writer jamonWriter)
167 throws java.io.IOException
168 {
169
170 if (format.equals("json") )
171 {
172
173 jamonWriter.write("\n ");
174
175 {
176 org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_0 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());
177 __jamon__var_0.setFormat("json" );
178 __jamon__var_0.setFilter(filter);
179 __jamon__var_0.renderNoFlush(jamonWriter);
180 }
181
182 jamonWriter.write("\n ");
183
184 return;
185 }
186
187 jamonWriter.write("\n");
188
189
190 ServerManager serverManager = master.getServerManager();
191 AssignmentManager assignmentManager = master.getAssignmentManager();
192
193
194 jamonWriter.write("<!--[if IE]>\n<!DOCTYPE html>\n<![endif]-->\n<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <title>Master: ");
195
196 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerName().getHostname()), jamonWriter);
197
198 jamonWriter.write("</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <meta name=\"description\" content=\"\">\n <link href=\"/static/css/bootstrap.min.css\" rel=\"stylesheet\">\n <link href=\"/static/css/bootstrap-theme.min.css\" rel=\"stylesheet\">\n <link href=\"/static/css/hbase.css\" rel=\"stylesheet\">\n </head>\n\n <body>\n\n <div class=\"navbar navbar-fixed-top navbar-default\">\n <div class=\"container\">\n <div class=\"navbar-header\">\n <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n <span class=\"icon-bar\"></span>\n <span class=\"icon-bar\"></span>\n <span class=\"icon-bar\"></span>\n </button>\n <a class=\"navbar-brand\" href=\"/master-status\"><img src=\"/static/hbase_logo_small.png\" alt=\"HBase Logo\"/></a>\n </div>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"nav navbar-nav\">\n <li class=\"active\"><a href=\"/\">Home</a></li>\n <li><a href=\"/tablesDetailed.jsp\">Table Details</a></li>\n <li><a href=\"/procedures.jsp\">Procedures</a></li>\n <li><a href=\"/logs/\">Local Logs</a></li>\n <li><a href=\"/logLevel\">Log Level</a></li>\n <li><a href=\"/dump\">Debug Dump</a></li>\n <li><a href=\"/jmx\">Metrics Dump</a></li>\n ");
199
200 if (HBaseConfiguration.isShowConfInServlet())
201 {
202
203 jamonWriter.write("\n <li><a href=\"/conf\">HBase Configuration</a></li>\n ");
204 }
205
206 jamonWriter.write("\n </ul>\n </div><!--/.nav-collapse -->\n </div>\n </div>\n\n <div class=\"container\">\n\t");
207
208 if (master.isActiveMaster() )
209 {
210
211 jamonWriter.write("\n <div class=\"row inner_header\">\n <div class=\"page-header\">\n <h1>Master <small>");
212
213 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerName().getHostname()), jamonWriter);
214
215 jamonWriter.write(" </small></h1>\n </div>\n </div>\n\n <div class=\"row\">\n <!-- Various warnings that cluster admins should be aware of -->\n ");
216
217 if (JvmVersion.isBadJvmVersion() )
218 {
219
220 jamonWriter.write("\n <div class=\"alert alert-error\">\n Your current JVM version ");
221
222 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(System.getProperty("java.version")), jamonWriter);
223
224 jamonWriter.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 ");
225 }
226
227 jamonWriter.write("\n ");
228
229 if (master.isInitialized() && !catalogJanitorEnabled )
230 {
231
232 jamonWriter.write("\n <div class=\"alert alert-error\">\n Please note that your cluster is running with the CatalogJanitor disabled. It can be\n re-enabled from the hbase shell by running the command 'catalogjanitor_switch true'\n </div>\n ");
233 }
234
235 jamonWriter.write("\n ");
236
237 if (!master.isBalancerOn() )
238 {
239
240 jamonWriter.write("\n <div class=\"alert alert-warning\">\n The Load Balancer is not enabled which will eventually cause performance degradation\n in HBase as Regions will not be distributed across all RegionServers. The balancer\n is only expected to be disabled during rolling upgrade scenarios.\n </div>\n ");
241 }
242
243 jamonWriter.write("\n\n <section>\n <h2>Region Servers</h2>\n ");
244
245 {
246 org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl __jamon__var_1 = new org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl(this.getTemplateManager());
247 __jamon__var_1.setServers(servers );
248 __jamon__var_1.renderNoFlush(jamonWriter, master);
249 }
250
251 jamonWriter.write("\n\n ");
252
253 if ((deadServers != null) )
254 {
255
256 jamonWriter.write("\n ");
257
258 {
259
260 __jamon_innerUnit__deadRegionServers(jamonWriter);
261 }
262
263 jamonWriter.write("\n ");
264 }
265
266 jamonWriter.write("\n </section>\n <section>\n ");
267
268 {
269 org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl __jamon__var_2 = new org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl(this.getTemplateManager());
270 __jamon__var_2.renderNoFlush(jamonWriter, master );
271 }
272
273 jamonWriter.write("\n </section>\n <section>\n <h2>Tables</h2>\n <div class=\"tabbable\">\n <ul class=\"nav nav-pills\">\n <li class=\"active\">\n <a href=\"#tab_userTables\" data-toggle=\"tab\">User Tables</a>\n </li>\n <li class=\"\">\n <a href=\"#tab_catalogTables\" data-toggle=\"tab\">System Tables</a>\n </li>\n <li class=\"\">\n <a href=\"#tab_userSnapshots\" data-toggle=\"tab\">Snapshots</a>\n </li>\n </ul>\n <div class=\"tab-content\" style=\"padding-bottom: 9px; border-bottom: 1px solid #ddd;\">\n <div class=\"tab-pane active\" id=\"tab_userTables\">\n ");
274
275 if ((metaLocation != null) )
276 {
277
278 jamonWriter.write("\n ");
279
280 {
281
282 __jamon_innerUnit__userTables(jamonWriter);
283 }
284
285 jamonWriter.write("\n ");
286 }
287
288 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_catalogTables\">\n ");
289
290 if ((metaLocation != null) )
291 {
292
293 jamonWriter.write("\n ");
294
295 {
296
297 __jamon_innerUnit__catalogTables(jamonWriter);
298 }
299
300 jamonWriter.write("\n ");
301 }
302
303 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_userSnapshots\">\n ");
304
305 {
306
307 __jamon_innerUnit__userSnapshots(jamonWriter);
308 }
309
310 jamonWriter.write("\n </div>\n </div>\n </div>\n </section>\n ");
311
312 if (master.getAssignmentManager() != null )
313 {
314
315 jamonWriter.write("\n ");
316
317 {
318 org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl __jamon__var_3 = new org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl(this.getTemplateManager());
319 __jamon__var_3.renderNoFlush(jamonWriter, master.getAssignmentManager());
320 }
321
322 jamonWriter.write("\n ");
323 }
324
325 jamonWriter.write("\n\t");
326 }
327
328 else
329 {
330
331 jamonWriter.write("\n <section>\n ");
332
333 {
334 org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl __jamon__var_4 = new org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl(this.getTemplateManager());
335 __jamon__var_4.renderNoFlush(jamonWriter, master );
336 }
337
338 jamonWriter.write("\n </section>\n\t");
339 }
340
341 jamonWriter.write(" \n\n\n <section>\n ");
342
343 {
344 org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_5 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());
345 __jamon__var_5.setFilter(filter );
346 __jamon__var_5.renderNoFlush(jamonWriter);
347 }
348
349 jamonWriter.write("\n </section>\n\n <section>\n <h2>Software Attributes</h2>\n <table id=\"attributes_table\" class=\"table table-striped\">\n <tr>\n <th>Attribute Name</th>\n <th>Value</th>\n <th>Description</th>\n </tr>\n <tr>\n <td>HBase Version</td>\n <td>");
350
351 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getVersion()), jamonWriter);
352
353 jamonWriter.write(", revision=");
354
355 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getRevision()), jamonWriter);
356
357 jamonWriter.write("</td><td>HBase version and revision</td>\n </tr>\n <tr>\n <td>HBase Compiled</td>\n <td>");
358
359 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getDate()), jamonWriter);
360
361 jamonWriter.write(", ");
362
363 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getUser()), jamonWriter);
364
365 jamonWriter.write("</td>\n <td>When HBase version was compiled and by whom</td>\n </tr>\n <tr>\n <td>HBase Source Checksum</td>\n <td>");
366
367 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getSrcChecksum()), jamonWriter);
368
369 jamonWriter.write("</td>\n <td>HBase source MD5 checksum</td>\n </tr>\n <tr>\n <td>Hadoop Version</td>\n <td>");
370
371 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getVersion()), jamonWriter);
372
373 jamonWriter.write(", revision=");
374
375 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getRevision()), jamonWriter);
376
377 jamonWriter.write("</td>\n <td>Hadoop version and revision</td>\n </tr>\n <tr>\n <td>Hadoop Compiled</td>\n <td>");
378
379 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getDate()), jamonWriter);
380
381 jamonWriter.write(", ");
382
383 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getUser()), jamonWriter);
384
385 jamonWriter.write("</td>\n <td>When Hadoop version was compiled and by whom</td>\n </tr>\n <tr>\n <td>Hadoop Source Checksum</td>\n <td>");
386
387 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getSrcChecksum()), jamonWriter);
388
389 jamonWriter.write("</td>\n <td>Hadoop source MD5 checksum</td>\n </tr>\n <tr>\n <td>ZooKeeper Client Version</td>\n <td>");
390
391 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.zookeeper.Version.getVersion()), jamonWriter);
392
393 jamonWriter.write(", revision=");
394
395 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.zookeeper.Version.getRevision()), jamonWriter);
396
397 jamonWriter.write("</td>\n <td>ZooKeeper client version and revision</td>\n </tr>\n <tr>\n <td>ZooKeeper Client Compiled</td>\n <td>");
398
399 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.zookeeper.Version.getBuildDate()), jamonWriter);
400
401 jamonWriter.write("</td>\n <td>When ZooKeeper client version was compiled</td>\n </tr>\n <tr>\n <td>Zookeeper Quorum</td>\n <td> ");
402
403 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(formatZKString()), jamonWriter);
404
405 jamonWriter.write(" </td>\n <td>Addresses of all registered ZK servers. For more, see <a href=\"/zk.jsp\">zk dump</a>.</td>\n </tr>\n <tr>\n <td>Zookeeper Base Path</td>\n <td> ");
406
407 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getZooKeeper().getBaseZNode()), jamonWriter);
408
409 jamonWriter.write("</td>\n <td>Root node of this cluster in ZK.</td>\n </tr>\n <tr>\n <td>HBase Root Directory</td>\n <td>");
410
411 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(FSUtils.getRootDir(master.getConfiguration()).toString()), jamonWriter);
412
413 jamonWriter.write("</td>\n <td>Location of HBase home directory</td>\n </tr>\n <tr>\n <td>HMaster Start Time</td>\n <td>");
414
415 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(new Date(master.getMasterStartTime())), jamonWriter);
416
417 jamonWriter.write("</td>\n <td>Date stamp of when this HMaster was started</td>\n </tr>\n ");
418
419 if (master.isActiveMaster() )
420 {
421
422 jamonWriter.write("\n\t <tr>\n\t <td>HMaster Active Time</td>\n\t <td>");
423
424 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(new Date(master.getMasterActiveTime())), jamonWriter);
425
426 jamonWriter.write("</td>\n\t <td>Date stamp of when this HMaster became active</td>\n\t </tr>\n\t <tr>\n\t <td>HBase Cluster ID</td>\n\t <td>");
427
428 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getClusterId() != null ? master.getClusterId() : "Not set"), jamonWriter);
429
430 jamonWriter.write("</td>\n\t <td>Unique identifier generated for each HBase cluster</td>\n\t </tr>\n\t <tr>\n\t <td>Load average</td>\n\t <td>");
431
432 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerManager() == null ? "0.00" :
433 StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad())), jamonWriter);
434
435 jamonWriter.write("</td>\n\t <td>Average number of regions per regionserver. Naive computation.</td>\n\t </tr>\n\t ");
436
437 if (frags != null )
438 {
439
440 jamonWriter.write("\n\t <tr>\n\t <td>Fragmentation</td>\n\t <td>");
441
442 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(frags.get("-TOTAL-") != null ? frags.get("-TOTAL-").intValue() + "%" : "n/a"), jamonWriter);
443
444 jamonWriter.write("</td>\n\t <td>Overall fragmentation of all tables, including hbase:meta</td>\n\t </tr>\n\t ");
445 }
446
447 jamonWriter.write("\n\t <tr>\n\t <td>Coprocessors</td>\n\t <td>");
448
449 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getMasterCoprocessorHost() == null ? "[]" :
450 java.util.Arrays.toString(master.getMasterCoprocessors())), jamonWriter);
451
452 jamonWriter.write("</td>\n\t <td>Coprocessors currently loaded by the master</td>\n\t </tr>\n\t <tr>\n\t <td>LoadBalancer</td>\n\t <td>");
453
454 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getLoadBalancerClassName()), jamonWriter);
455
456 jamonWriter.write("</td>\n\t <td>LoadBalancer to be used in the Master</td>\n\t </tr>\n ");
457 }
458
459 jamonWriter.write("\n </table>\n </section>\n </div>\n </div> <!-- /container -->\n\n <script src=\"/static/js/jquery.min.js\" type=\"text/javascript\"></script>\n <script src=\"/static/js/bootstrap.min.js\" type=\"text/javascript\"></script>\n <script src=\"/static/js/tab.js\" type=\"text/javascript\"></script>\n </body>\n</html>\n\n");
460 }
461
462
463
464 private void __jamon_innerUnit__deadRegionServers(final java.io.Writer jamonWriter)
465 throws java.io.IOException
466 {
467
468 if ((deadServers != null && deadServers.size() > 0))
469 {
470
471 jamonWriter.write("\n<h2>Dead Region Servers</h2>\n<table class=\"table table-striped\">\n <tr>\n <th></th>\n <th>ServerName</th>\n <th>Stop time</th>\n </tr>\n ");
472
473
474 DeadServer deadServerUtil = master.getServerManager().getDeadServers();
475 ServerName [] deadServerNames = deadServers.toArray(new ServerName[deadServers.size()]);
476 Arrays.sort(deadServerNames);
477 for (ServerName deadServerName: deadServerNames) {
478
479
480 jamonWriter.write("<tr>\n \t<th></th>\n <td>");
481
482 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(deadServerName), jamonWriter);
483
484 jamonWriter.write("</td>\n <td>");
485
486 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(deadServerUtil.getTimeOfDeath(deadServerName)), jamonWriter);
487
488 jamonWriter.write("</td>\n </tr>\n ");
489
490
491 }
492
493
494 jamonWriter.write("<tr>\n <th>Total: </th>\n <td>servers: ");
495
496 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(deadServers.size()), jamonWriter);
497
498 jamonWriter.write("</td>\n <th></th>\n </tr>\n</table>\n");
499 }
500
501 jamonWriter.write("\n");
502 }
503
504
505
506 private void __jamon_innerUnit__catalogTables(final java.io.Writer jamonWriter)
507 throws java.io.IOException
508 {
509
510
511 HTableDescriptor[] sysTables = null;
512 try (Admin admin = master.getConnection().getAdmin()) {
513 sysTables = master.isInitialized() ? admin.listTableDescriptorsByNamespace(
514 NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR) : null;
515 }
516
517
518 if ((sysTables != null && sysTables.length > 0))
519 {
520
521 jamonWriter.write("\n<table class=\"table table-striped\">\n<tr>\n <th>Table Name</th>\n ");
522
523 if ((frags != null) )
524 {
525
526 jamonWriter.write("\n <th title=\"Fragmentation - Will be 0% after a major compaction and fluctuate during normal usage.\">Frag.</th>\n ");
527 }
528
529 jamonWriter.write("\n <th>Description</th>\n</tr>\n");
530
531 for (HTableDescriptor systemTable : sysTables)
532 {
533
534 jamonWriter.write("\n<tr>\n");
535
536 TableName tableName = systemTable.getTableName();
537
538 jamonWriter.write("<td><a href=\"table.jsp?name=");
539
540 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(tableName), jamonWriter);
541
542 jamonWriter.write("\">");
543
544 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(tableName), jamonWriter);
545
546 jamonWriter.write("</a></td>\n ");
547
548 if ((frags != null))
549 {
550
551 jamonWriter.write("\n <td align=\"center\">");
552
553 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(frags.get(tableName.getNameAsString()) != null ? frags.get(tableName.getNameAsString())
554 .intValue() + "%" : "n/a"), jamonWriter);
555
556 jamonWriter.write("</td>\n ");
557 }
558
559 jamonWriter.write("\n ");
560
561 String description = null;
562 if (tableName.equals(TableName.META_TABLE_NAME)){
563 description = "The hbase:meta table holds references to all User Table regions";
564 } else if (tableName.equals(AccessControlLists.ACL_TABLE_NAME)){
565 description = "The hbase:acl table holds information about acl";
566 } else if (tableName.equals(VisibilityConstants.LABELS_TABLE_NAME)){
567 description = "The hbase:labels table holds information about visibility labels";
568 } else if (tableName.equals(TableName.NAMESPACE_TABLE_NAME)){
569 description = "The hbase:namespace table holds information about namespaces.";
570 } else if (tableName.equals(QuotaUtil.QUOTA_TABLE_NAME)){
571 description = "The hbase:quota table holds quota information about number" +
572 " or size of requests in a given time frame.";
573 } else if (tableName.equals(TableName.valueOf("hbase:rsgroup"))){
574 description = "The hbase:rsgroup table holds information about regionserver groups";
575 }
576
577
578 jamonWriter.write("<td>");
579
580 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(description), jamonWriter);
581
582 jamonWriter.write("</td>\n</tr>\n");
583 }
584
585 jamonWriter.write("\n</table>\n");
586 }
587
588 jamonWriter.write("\n");
589 }
590
591
592
593 private void __jamon_innerUnit__userSnapshots(final java.io.Writer jamonWriter)
594 throws java.io.IOException
595 {
596
597
598 List<SnapshotDescription> snapshots = null;
599 try (Admin admin = master.getConnection().getAdmin()) {
600 snapshots = master.isInitialized() ? admin.listSnapshots() : null;
601 }
602
603
604 if ((snapshots != null && snapshots.size() > 0))
605 {
606
607 jamonWriter.write("\n<table class=\"table table-striped\">\n <tr>\n <th>Snapshot Name</th>\n <th>Table</th>\n <th>Creation Time</th>\n </tr>\n ");
608
609 for (SnapshotDescription snapshotDesc : snapshots)
610 {
611
612 jamonWriter.write("\n ");
613
614
615 TableName snapshotTable = TableName.valueOf(snapshotDesc.getTable());
616
617
618 jamonWriter.write("<tr>\n <td><a href=\"snapshot.jsp?name=");
619
620 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotDesc.getName()), jamonWriter);
621
622 jamonWriter.write("\">");
623
624 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotDesc.getName()), jamonWriter);
625
626 jamonWriter.write("</a> </td>\n <td><a href=\"table.jsp?name=");
627
628 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotTable.getNameAsString()), jamonWriter);
629
630 jamonWriter.write("\">");
631
632 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotTable.getNameAsString()), jamonWriter);
633
634 jamonWriter.write("</a>\n </td>\n <td>");
635
636 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(new Date(snapshotDesc.getCreationTime())), jamonWriter);
637
638 jamonWriter.write("</td>\n </tr>\n ");
639 }
640
641 jamonWriter.write("\n <p>");
642
643 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshots.size()), jamonWriter);
644
645 jamonWriter.write(" snapshot(s) in set.</p>\n</table>\n");
646 }
647
648 jamonWriter.write("\n");
649 }
650
651
652
653 private void __jamon_innerUnit__userTables(final java.io.Writer jamonWriter)
654 throws java.io.IOException
655 {
656
657
658 HTableDescriptor[] tables = null;
659 try (Admin admin = master.getConnection().getAdmin()) {
660 tables = master.isInitialized() ? admin.listTables() : null;
661 }
662
663
664 if ((tables != null && tables.length > 0))
665 {
666
667 jamonWriter.write("\n<table class=\"table table-striped\">\n <tr>\n <th>Namespace</th>\n <th>Table Name</th>\n ");
668
669 if ((frags != null) )
670 {
671
672 jamonWriter.write("\n <th title=\"Fragmentation - Will be 0% after a major compaction and fluctuate during normal usage.\">Frag.</th>\n ");
673 }
674
675 jamonWriter.write("\n <th>Online Regions</th>\n <th>Offline Regions</th>\n <th>Failed Regions</th>\n <th>Split Regions</th>\n <th>Other Regions</th>\n <th>Description</th>\n </tr>\n ");
676
677 for (HTableDescriptor htDesc : tables)
678 {
679
680 jamonWriter.write("\n ");
681
682
683 Map<RegionState.State, List<HRegionInfo>> tableRegions =
684 master.getAssignmentManager().getRegionStates()
685 .getRegionByStateOfTable(htDesc.getTableName());
686 int openRegionsCount = tableRegions.get(RegionState.State.OPEN).size();
687 int offlineRegionsCount = tableRegions.get(RegionState.State.OFFLINE).size();
688 int splitRegionsCount = tableRegions.get(RegionState.State.SPLIT).size();
689 int failedRegionsCount = tableRegions.get(RegionState.State.FAILED_OPEN).size()
690 + tableRegions.get(RegionState.State.FAILED_CLOSE).size();
691 int otherRegionsCount = 0;
692 for (List<HRegionInfo> list: tableRegions.values()) {
693 otherRegionsCount += list.size();
694 }
695
696 otherRegionsCount = otherRegionsCount - openRegionsCount
697 - failedRegionsCount - offlineRegionsCount
698 - splitRegionsCount;
699
700
701 jamonWriter.write("<tr>\n <td>");
702
703 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.getTableName().getNamespaceAsString()), jamonWriter);
704
705 jamonWriter.write("</td>\n <td><a href=table.jsp?name=");
706
707 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.getTableName().getNameAsString()), jamonWriter);
708
709 jamonWriter.write(">");
710
711 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.getTableName().getQualifierAsString()), jamonWriter);
712
713 jamonWriter.write("</a> </td>\n ");
714
715 if ((frags != null) )
716 {
717
718 jamonWriter.write("\n <td align=\"center\">");
719
720 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(frags.get(htDesc.getTableName().getNameAsString()) != null ? frags.get(htDesc.getTableName().getQualifierAsString()).intValue() + "%" : "n/a"), jamonWriter);
721
722 jamonWriter.write("</td>\n ");
723 }
724
725 jamonWriter.write("\n <td>");
726
727 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(openRegionsCount), jamonWriter);
728
729 jamonWriter.write("</td>\n <td>");
730
731 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(offlineRegionsCount), jamonWriter);
732
733 jamonWriter.write("</td>\n <td>");
734
735 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(failedRegionsCount), jamonWriter);
736
737 jamonWriter.write("</td>\n <td>");
738
739 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(splitRegionsCount), jamonWriter);
740
741 jamonWriter.write("</td>\n <td>");
742
743 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(otherRegionsCount), jamonWriter);
744
745 jamonWriter.write("</td>\n <td>");
746
747 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.toStringCustomizedValues()), jamonWriter);
748
749 jamonWriter.write("</td>\n </tr>\n ");
750 }
751
752 jamonWriter.write("\n <p>");
753
754 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(tables.length), jamonWriter);
755
756 jamonWriter.write(" table(s) in set. [<a href=tablesDetailed.jsp>Details</a>]</p>\n</table>\n");
757 }
758
759 jamonWriter.write("\n");
760 }
761
762
763 }