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