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