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