1
2
3
4 package org.apache.hadoop.hbase.tmpl.master;
5
6
7 import java.util.*;
8
9 import org.apache.hadoop.util.StringUtils;
10
11 import org.apache.hadoop.hbase.util.Bytes;
12
13 import org.apache.hadoop.hbase.util.JvmVersion;
14
15 import org.apache.hadoop.hbase.util.FSUtils;
16
17 import org.apache.hadoop.hbase.master.HMaster;
18
19 import org.apache.hadoop.hbase.master.AssignmentManager;
20
21 import org.apache.hadoop.hbase.master.ServerManager;
22
23 import org.apache.hadoop.hbase.HConstants;
24
25 import org.apache.hadoop.hbase.NamespaceDescriptor;
26
27 import org.apache.hadoop.hbase.ServerLoad;
28
29 import org.apache.hadoop.hbase.ServerName;
30
31 import org.apache.hadoop.hbase.client.Admin;
32
33 import org.apache.hadoop.hbase.client.HConnectionManager;
34
35 import org.apache.hadoop.hbase.HTableDescriptor;
36
37 import org.apache.hadoop.hbase.HBaseConfiguration;
38
39 import org.apache.hadoop.hbase.TableName;
40
41 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
42
43 import org.apache.hadoop.hbase.master.DeadServer;
44
45 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
46
47 import org.apache.hadoop.hbase.security.visibility.VisibilityConstants;
48
49 import org.apache.hadoop.hbase.security.access.AccessControlLists;
50
51 public class MasterStatusTmplImpl
52 extends org.jamon.AbstractTemplateImpl
53 implements org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.Intf
54
55 {
56 private final HMaster master;
57 private final AssignmentManager assignmentManager;
58 private final Set<ServerName> deadServers;
59 private final Map<String,Integer> frags;
60 private final ServerManager serverManager;
61 private final ServerName metaLocation;
62 private final List<ServerName> servers;
63 private final String filter;
64 private final boolean catalogJanitorEnabled;
65 private final String format;
66
67
68 public String formatZKString() {
69 StringBuilder quorums = new StringBuilder();
70 String zkQuorum = master.getZooKeeper().getQuorum();
71
72 if (null == zkQuorum) {
73 return quorums.toString();
74 }
75
76 String[] zks = zkQuorum.split(",");
77
78 if (zks.length == 0) {
79 return quorums.toString();
80 }
81
82 for(int i = 0; i < zks.length; ++i) {
83 quorums.append(zks[i].trim());
84
85 if (i != (zks.length - 1)) {
86 quorums.append("<br/>");
87 }
88 }
89
90 return quorums.toString();
91 }
92
93 protected static org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)
94 {
95 if(! p_implData.getAssignmentManager__IsNotDefault())
96 {
97 p_implData.setAssignmentManager(null);
98 }
99 if(! p_implData.getDeadServers__IsNotDefault())
100 {
101 p_implData.setDeadServers(null);
102 }
103 if(! p_implData.getFrags__IsNotDefault())
104 {
105 p_implData.setFrags(null);
106 }
107 if(! p_implData.getServerManager__IsNotDefault())
108 {
109 p_implData.setServerManager(null);
110 }
111 if(! p_implData.getMetaLocation__IsNotDefault())
112 {
113 p_implData.setMetaLocation(null);
114 }
115 if(! p_implData.getServers__IsNotDefault())
116 {
117 p_implData.setServers(null);
118 }
119 if(! p_implData.getFilter__IsNotDefault())
120 {
121 p_implData.setFilter("general");
122 }
123 if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())
124 {
125 p_implData.setCatalogJanitorEnabled(true);
126 }
127 if(! p_implData.getFormat__IsNotDefault())
128 {
129 p_implData.setFormat("html");
130 }
131 return p_implData;
132 }
133 public MasterStatusTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)
134 {
135 super(p_templateManager, __jamon_setOptionalArguments(p_implData));
136 master = p_implData.getMaster();
137 assignmentManager = p_implData.getAssignmentManager();
138 deadServers = p_implData.getDeadServers();
139 frags = p_implData.getFrags();
140 serverManager = p_implData.getServerManager();
141 metaLocation = p_implData.getMetaLocation();
142 servers = p_implData.getServers();
143 filter = p_implData.getFilter();
144 catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();
145 format = p_implData.getFormat();
146 }
147
148 public void renderNoFlush(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
149 throws java.io.IOException
150 {
151
152 if (format.equals("json") )
153 {
154
155 jamonWriter.write("\n ");
156
157 {
158 org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_0 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());
159 __jamon__var_0.setFilter(filter);
160 __jamon__var_0.setFormat("json" );
161 __jamon__var_0.renderNoFlush(jamonWriter);
162 }
163
164 jamonWriter.write("\n ");
165
166 return;
167 }
168
169 jamonWriter.write("\n");
170
171
172 ServerManager serverManager = master.getServerManager();
173 AssignmentManager assignmentManager = master.getAssignmentManager();
174
175
176 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: ");
177
178 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerName().getHostname()), jamonWriter);
179
180 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=\"/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 ");
181
182 if (HBaseConfiguration.isShowConfInServlet())
183 {
184
185 jamonWriter.write("\n <li><a href=\"/conf\">HBase Configuration</a></li>\n ");
186 }
187
188 jamonWriter.write("\n </ul>\n </div><!--/.nav-collapse -->\n </div>\n </div>\n\n <div class=\"container\">\n\t");
189
190 if (master.isActiveMaster() )
191 {
192
193 jamonWriter.write("\n <div class=\"row inner_header\">\n <div class=\"page-header\">\n <h1>Master <small>");
194
195 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerName().getHostname()), jamonWriter);
196
197 jamonWriter.write(" </small></h1>\n </div>\n </div>\n\n <div class=\"row\">\n <!-- Various warnings that cluster admins should be aware of -->\n ");
198
199 if (JvmVersion.isBadJvmVersion() )
200 {
201
202 jamonWriter.write("\n <div class=\"alert alert-error\">\n Your current JVM version ");
203
204 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(System.getProperty("java.version")), jamonWriter);
205
206 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 ");
207 }
208
209 jamonWriter.write("\n ");
210
211 if (master.isInitialized() && !catalogJanitorEnabled )
212 {
213
214 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 ");
215 }
216
217 jamonWriter.write("\n\n <section>\n <h2>Region Servers</h2>\n ");
218
219 {
220 org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl __jamon__var_1 = new org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl(this.getTemplateManager());
221 __jamon__var_1.setServers(servers );
222 __jamon__var_1.renderNoFlush(jamonWriter, master);
223 }
224
225 jamonWriter.write("\n\n ");
226
227 if ((deadServers != null) )
228 {
229
230 jamonWriter.write("\n ");
231
232 {
233
234 __jamon_innerUnit__deadRegionServers(jamonWriter);
235 }
236
237 jamonWriter.write("\n ");
238 }
239
240 jamonWriter.write("\n </section>\n <section>\n ");
241
242 {
243 org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl __jamon__var_2 = new org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl(this.getTemplateManager());
244 __jamon__var_2.renderNoFlush(jamonWriter, master );
245 }
246
247 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 ");
248
249 if ((metaLocation != null) )
250 {
251
252 jamonWriter.write("\n ");
253
254 {
255
256 __jamon_innerUnit__userTables(jamonWriter);
257 }
258
259 jamonWriter.write("\n ");
260 }
261
262 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_catalogTables\">\n ");
263
264 if ((metaLocation != null) )
265 {
266
267 jamonWriter.write("\n ");
268
269 {
270
271 __jamon_innerUnit__catalogTables(jamonWriter);
272 }
273
274 jamonWriter.write("\n ");
275 }
276
277 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_userSnapshots\">\n ");
278
279 {
280
281 __jamon_innerUnit__userSnapshots(jamonWriter);
282 }
283
284 jamonWriter.write("\n </div>\n </div>\n </div>\n </section>\n ");
285
286 if (master.getAssignmentManager() != null )
287 {
288
289 jamonWriter.write("\n ");
290
291 {
292 org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl __jamon__var_3 = new org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl(this.getTemplateManager());
293 __jamon__var_3.renderNoFlush(jamonWriter, master.getAssignmentManager());
294 }
295
296 jamonWriter.write("\n ");
297 }
298
299 jamonWriter.write("\n\t");
300 }
301
302 else
303 {
304
305 jamonWriter.write("\n <section>\n ");
306
307 {
308 org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl __jamon__var_4 = new org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmpl(this.getTemplateManager());
309 __jamon__var_4.renderNoFlush(jamonWriter, master );
310 }
311
312 jamonWriter.write("\n </section>\n\t");
313 }
314
315 jamonWriter.write(" \n\n\n <section>\n ");
316
317 {
318 org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_5 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());
319 __jamon__var_5.setFilter(filter );
320 __jamon__var_5.renderNoFlush(jamonWriter);
321 }
322
323 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>");
324
325 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getVersion()), jamonWriter);
326
327 jamonWriter.write(", revision=");
328
329 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getRevision()), jamonWriter);
330
331 jamonWriter.write("</td><td>HBase version and revision</td>\n </tr>\n <tr>\n <td>HBase Compiled</td>\n <td>");
332
333 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getDate()), jamonWriter);
334
335 jamonWriter.write(", ");
336
337 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getUser()), jamonWriter);
338
339 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>");
340
341 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getSrcChecksum()), jamonWriter);
342
343 jamonWriter.write("</td>\n <td>HBase source MD5 checksum</td>\n </tr>\n <tr>\n <td>Hadoop Version</td>\n <td>");
344
345 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getVersion()), jamonWriter);
346
347 jamonWriter.write(", revision=");
348
349 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getRevision()), jamonWriter);
350
351 jamonWriter.write("</td>\n <td>Hadoop version and revision</td>\n </tr>\n <tr>\n <td>Hadoop Compiled</td>\n <td>");
352
353 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getDate()), jamonWriter);
354
355 jamonWriter.write(", ");
356
357 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getUser()), jamonWriter);
358
359 jamonWriter.write("</td>\n <td>When Hadoop version was compiled and by whom</td>\n </tr>\n <tr>\n <td>Zookeeper Quorum</td>\n <td> ");
360
361 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(formatZKString()), jamonWriter);
362
363 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> ");
364
365 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getZooKeeper().getBaseZNode()), jamonWriter);
366
367 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>");
368
369 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(FSUtils.getRootDir(master.getConfiguration()).toString()), jamonWriter);
370
371 jamonWriter.write("</td>\n <td>Location of HBase home directory</td>\n </tr>\n <tr>\n <td>HMaster Start Time</td>\n <td>");
372
373 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(new Date(master.getMasterStartTime())), jamonWriter);
374
375 jamonWriter.write("</td>\n <td>Date stamp of when this HMaster was started</td>\n </tr>\n ");
376
377 if (master.isActiveMaster() )
378 {
379
380 jamonWriter.write("\n\t <tr>\n\t <td>HMaster Active Time</td>\n\t <td>");
381
382 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(new Date(master.getMasterActiveTime())), jamonWriter);
383
384 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>");
385
386 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getClusterId() != null ? master.getClusterId() : "Not set"), jamonWriter);
387
388 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>");
389
390 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerManager() == null ? "0.00" :
391 StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad())), jamonWriter);
392
393 jamonWriter.write("</td>\n\t <td>Average number of regions per regionserver. Naive computation.</td>\n\t </tr>\n\t ");
394
395 if (frags != null )
396 {
397
398 jamonWriter.write("\n\t <tr>\n\t <td>Fragmentation</td>\n\t <td>");
399
400 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(frags.get("-TOTAL-") != null ? frags.get("-TOTAL-").intValue() + "%" : "n/a"), jamonWriter);
401
402 jamonWriter.write("</td>\n\t <td>Overall fragmentation of all tables, including hbase:meta</td>\n\t </tr>\n\t ");
403 }
404
405 jamonWriter.write("\n\t <tr>\n\t <td>Coprocessors</td>\n\t <td>");
406
407 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getMasterCoprocessorHost() == null ? "[]" :
408 java.util.Arrays.toString(master.getMasterCoprocessors())), jamonWriter);
409
410 jamonWriter.write("</td>\n\t <td>Coprocessors currently loaded by the master</td>\n\t </tr>\n ");
411 }
412
413 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");
414 }
415
416
417
418 private void __jamon_innerUnit__userSnapshots(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
419 throws java.io.IOException
420 {
421
422
423 List<SnapshotDescription> snapshots = null;
424 try (Admin admin = master.getConnection().getAdmin()) {
425 snapshots = master.isInitialized() ? admin.listSnapshots() : null;
426 }
427
428
429 if ((snapshots != null && snapshots.size() > 0))
430 {
431
432 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 ");
433
434 for (SnapshotDescription snapshotDesc : snapshots)
435 {
436
437 jamonWriter.write("\n ");
438
439
440 TableName snapshotTable = TableName.valueOf(snapshotDesc.getTable());
441
442
443 jamonWriter.write("<tr>\n <td><a href=\"snapshot.jsp?name=");
444
445 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotDesc.getName()), jamonWriter);
446
447 jamonWriter.write("\">");
448
449 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotDesc.getName()), jamonWriter);
450
451 jamonWriter.write("</a> </td>\n <td><a href=\"table.jsp?name=");
452
453 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotTable.getNameAsString()), jamonWriter);
454
455 jamonWriter.write("\">");
456
457 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshotTable.getNameAsString()), jamonWriter);
458
459 jamonWriter.write("</a>\n </td>\n <td>");
460
461 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(new Date(snapshotDesc.getCreationTime())), jamonWriter);
462
463 jamonWriter.write("</td>\n </tr>\n ");
464 }
465
466 jamonWriter.write("\n <p>");
467
468 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(snapshots.size()), jamonWriter);
469
470 jamonWriter.write(" snapshot(s) in set.</p>\n</table>\n");
471 }
472
473 jamonWriter.write("\n");
474 }
475
476
477
478 private void __jamon_innerUnit__catalogTables(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
479 throws java.io.IOException
480 {
481
482
483 HTableDescriptor[] sysTables = null;
484 try (Admin admin = master.getConnection().getAdmin()) {
485 sysTables = master.isInitialized() ? admin.listTableDescriptorsByNamespace(
486 NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR) : null;
487 }
488
489
490 if ((sysTables != null && sysTables.length > 0))
491 {
492
493 jamonWriter.write("\n<table class=\"table table-striped\">\n<tr>\n <th>Table Name</th>\n ");
494
495 if ((frags != null) )
496 {
497
498 jamonWriter.write("\n <th title=\"Fragmentation - Will be 0% after a major compaction and fluctuate during normal usage.\">Frag.</th>\n ");
499 }
500
501 jamonWriter.write("\n <th>Description</th>\n</tr>\n");
502
503 for (HTableDescriptor systemTable : sysTables)
504 {
505
506 jamonWriter.write("\n<tr>\n");
507
508 TableName tableName = systemTable.getTableName();
509
510 jamonWriter.write("<td><a href=\"table.jsp?name=");
511
512 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(tableName), jamonWriter);
513
514 jamonWriter.write("\">");
515
516 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(tableName), jamonWriter);
517
518 jamonWriter.write("</a></td>\n ");
519
520 if ((frags != null))
521 {
522
523 jamonWriter.write("\n <td align=\"center\">");
524
525 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(frags.get(tableName.getNameAsString()) != null ? frags.get(tableName.getNameAsString())
526 .intValue() + "%" : "n/a"), jamonWriter);
527
528 jamonWriter.write("</td>\n ");
529 }
530
531 jamonWriter.write("\n ");
532
533 String description = null;
534 if (tableName.equals(TableName.META_TABLE_NAME)){
535 description = "The hbase:meta table holds references to all User Table regions";
536 } else if (tableName.equals(AccessControlLists.ACL_TABLE_NAME)){
537 description = "The hbase:acl table holds information about acl";
538 } else if (tableName.equals(VisibilityConstants.LABELS_TABLE_NAME)){
539 description = "The hbase:labels table holds information about visibility labels";
540 } else {
541 description = "The .NAMESPACE. table holds information about namespaces.";
542 }
543
544
545 jamonWriter.write("<td>");
546
547 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(description), jamonWriter);
548
549 jamonWriter.write("</td>\n</tr>\n");
550 }
551
552 jamonWriter.write("\n</table>\n");
553 }
554
555 jamonWriter.write("\n");
556 }
557
558
559
560 private void __jamon_innerUnit__userTables(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
561 throws java.io.IOException
562 {
563
564
565 HTableDescriptor[] tables = null;
566 try (Admin admin = master.getConnection().getAdmin()) {
567 tables = master.isInitialized() ? admin.listTables() : null;
568 }
569
570
571 if ((tables != null && tables.length > 0))
572 {
573
574 jamonWriter.write("\n<table class=\"table table-striped\">\n <tr>\n <th>Namespace</th>\n <th>Table Name</th>\n ");
575
576 if ((frags != null) )
577 {
578
579 jamonWriter.write("\n <th title=\"Fragmentation - Will be 0% after a major compaction and fluctuate during normal usage.\">Frag.</th>\n ");
580 }
581
582 jamonWriter.write("\n <th>Online Regions</th>\n <th>Description</th>\n </tr>\n ");
583
584 for (HTableDescriptor htDesc : tables)
585 {
586
587 jamonWriter.write("\n <tr>\n <td>");
588
589 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.getTableName().getNamespaceAsString()), jamonWriter);
590
591 jamonWriter.write("</td>\n <td><a href=table.jsp?name=");
592
593 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.getTableName().getNameAsString()), jamonWriter);
594
595 jamonWriter.write(">");
596
597 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.getTableName().getQualifierAsString()), jamonWriter);
598
599 jamonWriter.write("</a> </td>\n ");
600
601 if ((frags != null) )
602 {
603
604 jamonWriter.write("\n <td align=\"center\">");
605
606 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);
607
608 jamonWriter.write("</td>\n ");
609 }
610
611 jamonWriter.write("\n <td>");
612
613 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(master.getAssignmentManager().getRegionStates().getRegionsOfTable(htDesc
614 .getTableName()).size()), jamonWriter);
615
616 jamonWriter.write("\n <td>");
617
618 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(htDesc.toStringCustomizedValues()), jamonWriter);
619
620 jamonWriter.write("</td>\n </tr>\n ");
621 }
622
623 jamonWriter.write("\n <p>");
624
625 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(tables.length), jamonWriter);
626
627 jamonWriter.write(" table(s) in set. [<a href=tablesDetailed.jsp>Details</a>]</p>\n</table>\n");
628 }
629
630 jamonWriter.write("\n");
631 }
632
633
634
635 private void __jamon_innerUnit__deadRegionServers(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
636 throws java.io.IOException
637 {
638
639 if ((deadServers != null && deadServers.size() > 0))
640 {
641
642 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 ");
643
644
645 DeadServer deadServerUtil = master.getServerManager().getDeadServers();
646 ServerName [] deadServerNames = deadServers.toArray(new ServerName[deadServers.size()]);
647 Arrays.sort(deadServerNames);
648 for (ServerName deadServerName: deadServerNames) {
649
650
651 jamonWriter.write("<tr>\n \t<th></th>\n <td>");
652
653 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(deadServerName), jamonWriter);
654
655 jamonWriter.write("</td>\n <td>");
656
657 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(deadServerUtil.getTimeOfDeath(deadServerName)), jamonWriter);
658
659 jamonWriter.write("</td>\n </tr>\n ");
660
661
662 }
663
664
665 jamonWriter.write("<tr>\n <th>Total: </th>\n <td>servers: ");
666
667 org.jamon.escaping.Escaping.NONE.write(org.jamon.emit.StandardEmitter.valueOf(deadServers.size()), jamonWriter);
668
669 jamonWriter.write("</td>\n <th></th>\n </tr>\n</table>\n");
670 }
671
672 jamonWriter.write("\n");
673 }
674
675
676 }