1
2
3
4 package org.apache.hadoop.hbase.tmpl.master;
5
6
7 import java.util.*;
8
9 import org.apache.hadoop.hbase.master.HMaster;
10
11 import org.apache.hadoop.hbase.ServerLoad;
12
13 import org.apache.hadoop.hbase.ServerName;
14
15 import org.apache.hadoop.hbase.client.HBaseAdmin;
16
17 import org.apache.hadoop.hbase.client.HConnectionManager;
18
19 import org.apache.hadoop.hbase.HTableDescriptor;
20
21 import org.apache.hadoop.hbase.HBaseConfiguration;
22
23 import org.apache.hadoop.hbase.util.VersionInfo;
24
25 public class RegionServerListTmplImpl
26 extends org.jamon.AbstractTemplateImpl
27 implements org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.Intf
28
29 {
30 private final HMaster master;
31 private final List<ServerName> servers;
32 protected static org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.ImplData p_implData)
33 {
34 if(! p_implData.getServers__IsNotDefault())
35 {
36 p_implData.setServers(null);
37 }
38 return p_implData;
39 }
40 public RegionServerListTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.ImplData p_implData)
41 {
42 super(p_templateManager, __jamon_setOptionalArguments(p_implData));
43 master = p_implData.getMaster();
44 servers = p_implData.getServers();
45 }
46
47 @Override public void renderNoFlush(final java.io.Writer jamonWriter)
48 throws java.io.IOException
49 {
50
51 if ((servers != null && servers.size() > 0))
52 {
53
54 jamonWriter.write("\n\n");
55
56
57 ServerName [] serverNames = servers.toArray(new ServerName[servers.size()]);
58 Arrays.sort(serverNames);
59
60
61 jamonWriter.write("<div class=\"tabbable\">\n <ul class=\"nav nav-pills\">\n <li class=\"active\"><a href=\"#tab_baseStats\" data-toggle=\"tab\">Base Stats</a></li>\n <li class=\"\"><a href=\"#tab_memoryStats\" data-toggle=\"tab\">Memory</a></li>\n <li class=\"\"><a href=\"#tab_requestStats\" data-toggle=\"tab\">Requests</a></li>\n <li class=\"\"><a href=\"#tab_storeStats\" data-toggle=\"tab\">Storefiles</a></li>\n <li class=\"\"><a href=\"#tab_compactStas\" data-toggle=\"tab\">Compactions</a></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_baseStats\">\n ");
62
63 {
64
65 __jamon_innerUnit__baseStats(jamonWriter, serverNames);
66 }
67
68 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_memoryStats\">\n ");
69
70 {
71
72 __jamon_innerUnit__memoryStats(jamonWriter, serverNames);
73 }
74
75 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_requestStats\">\n ");
76
77 {
78
79 __jamon_innerUnit__requestStats(jamonWriter, serverNames);
80 }
81
82 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_storeStats\">\n ");
83
84 {
85
86 __jamon_innerUnit__storeStats(jamonWriter, serverNames);
87 }
88
89 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_compactStas\">\n ");
90
91 {
92
93 __jamon_innerUnit__compactionStats(jamonWriter, serverNames);
94 }
95
96 jamonWriter.write("\n </div>\n </div>\n</div>\n\n");
97 }
98
99 jamonWriter.write("\n\n");
100 }
101
102
103
104 private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
105 throws java.io.IOException
106 {
107
108 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>ServerName</th>\n <th>Request Per Second</th>\n <th>Read Request Count</th>\n <th>Write Request Count</th>\n</tr>\n");
109
110
111 for (ServerName serverName: serverNames) {
112
113 ServerLoad sl = master.getServerManager().getLoad(serverName);
114 if (sl != null) {
115
116
117 jamonWriter.write("<tr>\n<td>");
118
119 {
120
121 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
122 }
123
124 jamonWriter.write("</td>\n<td>");
125
126 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", sl.getRequestsPerSecond())), jamonWriter);
127
128 jamonWriter.write("</td>\n<td>");
129
130 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getReadRequestsCount()), jamonWriter);
131
132 jamonWriter.write("</td>\n<td>");
133
134 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getWriteRequestsCount()), jamonWriter);
135
136 jamonWriter.write("</td>\n</tr>\n");
137
138
139 } else {
140
141
142 {
143
144 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
145 }
146
147 jamonWriter.write("\n");
148
149
150 }
151 }
152
153
154 jamonWriter.write("</table>\n");
155 }
156
157
158
159 private void __jamon_innerUnit__emptyStat(final java.io.Writer jamonWriter, final ServerName serverName)
160 throws java.io.IOException
161 {
162
163 jamonWriter.write("<tr>\n <td>");
164
165 {
166
167 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, null);
168 }
169
170 jamonWriter.write("</td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </tr>\n");
171 }
172
173
174
175 private void __jamon_innerUnit__serverNameLink(final java.io.Writer jamonWriter, final ServerName serverName, final ServerLoad serverLoad)
176 throws java.io.IOException
177 {
178
179
180 int infoPort = master.getRegionServerInfoPort(serverName);
181 String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";
182
183
184 if (infoPort > 0)
185 {
186
187 jamonWriter.write("\n <a href=\"");
188
189 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(url), jamonWriter);
190
191 jamonWriter.write("\">");
192
193 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(serverName.getServerName()), jamonWriter);
194
195 jamonWriter.write("</a>\n ");
196 }
197
198 else
199 {
200
201 jamonWriter.write("\n ");
202
203 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(serverName.getServerName()), jamonWriter);
204
205 jamonWriter.write("\n ");
206 }
207
208 jamonWriter.write("\n");
209 }
210
211
212
213 private void __jamon_innerUnit__memoryStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
214 throws java.io.IOException
215 {
216
217 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>ServerName</th>\n <th>Used Heap</th>\n <th>Max Heap</th>\n <th>Memstore Size</th>\n\n</tr>\n");
218
219
220 for (ServerName serverName: serverNames) {
221
222 ServerLoad sl = master.getServerManager().getLoad(serverName);
223 if (sl != null) {
224
225
226 jamonWriter.write("<tr>\n <td>");
227
228 {
229
230 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
231 }
232
233 jamonWriter.write("</td>\n <td>");
234
235 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getUsedHeapMB()), jamonWriter);
236
237 jamonWriter.write("m</td>\n <td>");
238
239 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getMaxHeapMB()), jamonWriter);
240
241 jamonWriter.write("m</td>\n <td>");
242
243 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getMemstoreSizeInMB()), jamonWriter);
244
245 jamonWriter.write("m</td>\n\n</tr>\n");
246
247
248 } else {
249
250
251 {
252
253 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
254 }
255
256 jamonWriter.write("\n");
257
258
259 }
260 }
261
262
263 jamonWriter.write("</table>\n");
264 }
265
266
267
268 private void __jamon_innerUnit__baseStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
269 throws java.io.IOException
270 {
271
272 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>ServerName</th>\n <th>Start time</th>\n <th>Version</th>\n <th>Requests Per Second</th>\n <th>Num. Regions</th>\n</tr>\n");
273
274
275 int totalRegions = 0;
276 int totalRequests = 0;
277 int inconsistentNodeNum = 0;
278 String masterVersion = VersionInfo.getVersion();
279 for (ServerName serverName: serverNames) {
280
281 ServerLoad sl = master.getServerManager().getLoad(serverName);
282 String version = master.getRegionServerVersion(serverName);
283 if (!masterVersion.equals(version)) {
284 inconsistentNodeNum ++;
285 }
286
287 double requestsPerSecond = 0.0;
288 int numRegionsOnline = 0;
289
290 if (sl != null) {
291 requestsPerSecond = sl.getRequestsPerSecond();
292 numRegionsOnline = sl.getNumberOfRegions();
293 totalRegions += sl.getNumberOfRegions();
294
295 totalRequests += sl.getNumberOfRequests();
296 }
297 long startcode = serverName.getStartcode();
298
299
300 jamonWriter.write("<tr>\n <td>");
301
302 {
303
304 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
305 }
306
307 jamonWriter.write("</td>\n <td>");
308
309 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(new Date(startcode)), jamonWriter);
310
311 jamonWriter.write("</td>\n <td>");
312
313 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(version), jamonWriter);
314
315 jamonWriter.write("</td>\n <td>");
316
317 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", requestsPerSecond)), jamonWriter);
318
319 jamonWriter.write("</td>\n <td>");
320
321 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numRegionsOnline), jamonWriter);
322
323 jamonWriter.write("</td>\n</tr>\n");
324
325
326 }
327
328
329 jamonWriter.write("<tr><td>Total:");
330
331 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(servers.size()), jamonWriter);
332
333 jamonWriter.write("</td>\n<td></td>\n");
334
335 if (inconsistentNodeNum > 0)
336 {
337
338 jamonWriter.write("\n <td style=\"color:red;\">");
339
340 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(inconsistentNodeNum), jamonWriter);
341
342 jamonWriter.write(" nodes with inconsistent version</td>\n");
343 }
344
345 else
346 {
347
348 jamonWriter.write("\n <td></td>\n");
349 }
350
351 jamonWriter.write("\n<td>");
352
353 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRequests), jamonWriter);
354
355 jamonWriter.write("</td>\n<td>");
356
357 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRegions), jamonWriter);
358
359 jamonWriter.write("</td>\n</tr>\n</table>\n");
360 }
361
362
363
364 private void __jamon_innerUnit__compactionStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
365 throws java.io.IOException
366 {
367
368 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>ServerName</th>\n <th>Num. Compacting KVs</th>\n <th>Num. Compacted KVs</th>\n <th>Remaining KVs</th>\n <th>Compaction Progress</th>\n</tr>\n");
369
370
371 for (ServerName serverName: serverNames) {
372
373 ServerLoad sl = master.getServerManager().getLoad(serverName);
374 if (sl != null) {
375 String percentDone = "";
376 if (sl.getTotalCompactingKVs() > 0) {
377 percentDone = String.format("%.2f", 100 *
378 ((float) sl.getCurrentCompactedKVs() / sl.getTotalCompactingKVs())) + "%";
379 }
380
381
382 jamonWriter.write("<tr>\n<td>");
383
384 {
385
386 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
387 }
388
389 jamonWriter.write("</td>\n<td>");
390
391 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalCompactingKVs()), jamonWriter);
392
393 jamonWriter.write("</td>\n<td>");
394
395 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getCurrentCompactedKVs()), jamonWriter);
396
397 jamonWriter.write("</td>\n<td>");
398
399 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalCompactingKVs() - sl.getCurrentCompactedKVs()), jamonWriter);
400
401 jamonWriter.write("</td>\n<td>");
402
403 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(percentDone), jamonWriter);
404
405 jamonWriter.write("</td>\n</tr>\n");
406
407
408 } else {
409
410
411 {
412
413 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
414 }
415
416 jamonWriter.write("\n");
417
418
419 }
420 }
421
422
423 jamonWriter.write("</table>\n");
424 }
425
426
427
428 private void __jamon_innerUnit__storeStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
429 throws java.io.IOException
430 {
431
432 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>ServerName</th>\n <th>Num. Stores</th>\n <th>Num. Storefiles</th>\n <th>Storefile Size Uncompressed</th>\n <th>Storefile Size</th>\n <th>Index Size</th>\n <th>Bloom Size</th>\n</tr>\n");
433
434
435 for (ServerName serverName: serverNames) {
436
437 ServerLoad sl = master.getServerManager().getLoad(serverName);
438 if (sl != null) {
439
440
441 jamonWriter.write("<tr>\n<td>");
442
443 {
444
445 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
446 }
447
448 jamonWriter.write("</td>\n<td>");
449
450 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStores()), jamonWriter);
451
452 jamonWriter.write("</td>\n<td>");
453
454 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStorefiles()), jamonWriter);
455
456 jamonWriter.write("</td>\n<td>");
457
458 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStoreUncompressedSizeMB()), jamonWriter);
459
460 jamonWriter.write("m</td>\n<td>");
461
462 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStorefileSizeInMB()), jamonWriter);
463
464 jamonWriter.write("mb</td>\n<td>");
465
466 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalStaticIndexSizeKB()), jamonWriter);
467
468 jamonWriter.write("k</td>\n<td>");
469
470 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalStaticBloomSizeKB()), jamonWriter);
471
472 jamonWriter.write("k</td>\n</tr>\n");
473
474
475 } else {
476
477
478 {
479
480 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
481 }
482
483 jamonWriter.write("\n");
484
485
486 }
487 }
488
489
490 jamonWriter.write("</table>\n");
491 }
492
493
494 }