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__serverNameLink(final java.io.Writer jamonWriter, final ServerName serverName, final ServerLoad serverLoad)
105 throws java.io.IOException
106 {
107
108
109 int infoPort = master.getRegionServerInfoPort(serverName);
110 String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";
111
112
113 if (infoPort > 0)
114 {
115
116 jamonWriter.write("\n <a href=\"");
117
118 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(url), jamonWriter);
119
120 jamonWriter.write("\">");
121
122 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(serverName.getServerName()), jamonWriter);
123
124 jamonWriter.write("</a>\n ");
125 }
126
127 else
128 {
129
130 jamonWriter.write("\n ");
131
132 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(serverName.getServerName()), jamonWriter);
133
134 jamonWriter.write("\n ");
135 }
136
137 jamonWriter.write("\n");
138 }
139
140
141
142 private void __jamon_innerUnit__storeStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
143 throws java.io.IOException
144 {
145
146 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");
147
148
149 for (ServerName serverName: serverNames) {
150
151 ServerLoad sl = master.getServerManager().getLoad(serverName);
152 if (sl != null) {
153
154
155 jamonWriter.write("<tr>\n<td>");
156
157 {
158
159 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
160 }
161
162 jamonWriter.write("</td>\n<td>");
163
164 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStores()), jamonWriter);
165
166 jamonWriter.write("</td>\n<td>");
167
168 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStorefiles()), jamonWriter);
169
170 jamonWriter.write("</td>\n<td>");
171
172 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStoreUncompressedSizeMB()), jamonWriter);
173
174 jamonWriter.write("m</td>\n<td>");
175
176 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStorefileSizeInMB()), jamonWriter);
177
178 jamonWriter.write("mb</td>\n<td>");
179
180 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalStaticIndexSizeKB()), jamonWriter);
181
182 jamonWriter.write("k</td>\n<td>");
183
184 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalStaticBloomSizeKB()), jamonWriter);
185
186 jamonWriter.write("k</td>\n</tr>\n");
187
188
189 } else {
190
191
192 {
193
194 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
195 }
196
197 jamonWriter.write("\n");
198
199
200 }
201 }
202
203
204 jamonWriter.write("</table>\n");
205 }
206
207
208
209 private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
210 throws java.io.IOException
211 {
212
213 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");
214
215
216 for (ServerName serverName: serverNames) {
217
218 ServerLoad sl = master.getServerManager().getLoad(serverName);
219 if (sl != null) {
220
221
222 jamonWriter.write("<tr>\n<td>");
223
224 {
225
226 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
227 }
228
229 jamonWriter.write("</td>\n<td>");
230
231 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", sl.getRequestsPerSecond())), jamonWriter);
232
233 jamonWriter.write("</td>\n<td>");
234
235 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getReadRequestsCount()), jamonWriter);
236
237 jamonWriter.write("</td>\n<td>");
238
239 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getWriteRequestsCount()), jamonWriter);
240
241 jamonWriter.write("</td>\n</tr>\n");
242
243
244 } else {
245
246
247 {
248
249 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
250 }
251
252 jamonWriter.write("\n");
253
254
255 }
256 }
257
258
259 jamonWriter.write("</table>\n");
260 }
261
262
263
264 private void __jamon_innerUnit__memoryStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
265 throws java.io.IOException
266 {
267
268 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");
269
270
271 for (ServerName serverName: serverNames) {
272
273 ServerLoad sl = master.getServerManager().getLoad(serverName);
274 if (sl != null) {
275
276
277 jamonWriter.write("<tr>\n <td>");
278
279 {
280
281 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
282 }
283
284 jamonWriter.write("</td>\n <td>");
285
286 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getUsedHeapMB()), jamonWriter);
287
288 jamonWriter.write("m</td>\n <td>");
289
290 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getMaxHeapMB()), jamonWriter);
291
292 jamonWriter.write("m</td>\n <td>");
293
294 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getMemstoreSizeInMB()), jamonWriter);
295
296 jamonWriter.write("m</td>\n\n</tr>\n");
297
298
299 } else {
300
301
302 {
303
304 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
305 }
306
307 jamonWriter.write("\n");
308
309
310 }
311 }
312
313
314 jamonWriter.write("</table>\n");
315 }
316
317
318
319 private void __jamon_innerUnit__compactionStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
320 throws java.io.IOException
321 {
322
323 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");
324
325
326 for (ServerName serverName: serverNames) {
327
328 ServerLoad sl = master.getServerManager().getLoad(serverName);
329 if (sl != null) {
330 String percentDone = "";
331 if (sl.getTotalCompactingKVs() > 0) {
332 percentDone = String.format("%.2f", 100 *
333 ((float) sl.getCurrentCompactedKVs() / sl.getTotalCompactingKVs())) + "%";
334 }
335
336
337 jamonWriter.write("<tr>\n<td>");
338
339 {
340
341 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
342 }
343
344 jamonWriter.write("</td>\n<td>");
345
346 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalCompactingKVs()), jamonWriter);
347
348 jamonWriter.write("</td>\n<td>");
349
350 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getCurrentCompactedKVs()), jamonWriter);
351
352 jamonWriter.write("</td>\n<td>");
353
354 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalCompactingKVs() - sl.getCurrentCompactedKVs()), jamonWriter);
355
356 jamonWriter.write("</td>\n<td>");
357
358 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(percentDone), jamonWriter);
359
360 jamonWriter.write("</td>\n</tr>\n");
361
362
363 } else {
364
365
366 {
367
368 __jamon_innerUnit__emptyStat(jamonWriter, serverName);
369 }
370
371 jamonWriter.write("\n");
372
373
374 }
375 }
376
377
378 jamonWriter.write("</table>\n");
379 }
380
381
382
383 private void __jamon_innerUnit__baseStats(final java.io.Writer jamonWriter, final ServerName[] serverNames)
384 throws java.io.IOException
385 {
386
387 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");
388
389
390 int totalRegions = 0;
391 int totalRequests = 0;
392 int inconsistentNodeNum = 0;
393 String masterVersion = VersionInfo.getVersion();
394 for (ServerName serverName: serverNames) {
395
396 ServerLoad sl = master.getServerManager().getLoad(serverName);
397 String version = master.getRegionServerVersion(serverName);
398 if (!masterVersion.equals(version)) {
399 inconsistentNodeNum ++;
400 }
401
402 double requestsPerSecond = 0.0;
403 int numRegionsOnline = 0;
404
405 if (sl != null) {
406 requestsPerSecond = sl.getRequestsPerSecond();
407 numRegionsOnline = sl.getNumberOfRegions();
408 totalRegions += sl.getNumberOfRegions();
409
410 totalRequests += sl.getNumberOfRequests();
411 }
412 long startcode = serverName.getStartcode();
413
414
415 jamonWriter.write("<tr>\n <td>");
416
417 {
418
419 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
420 }
421
422 jamonWriter.write("</td>\n <td>");
423
424 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(new Date(startcode)), jamonWriter);
425
426 jamonWriter.write("</td>\n <td>");
427
428 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(version), jamonWriter);
429
430 jamonWriter.write("</td>\n <td>");
431
432 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", requestsPerSecond)), jamonWriter);
433
434 jamonWriter.write("</td>\n <td>");
435
436 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numRegionsOnline), jamonWriter);
437
438 jamonWriter.write("</td>\n</tr>\n");
439
440
441 }
442
443
444 jamonWriter.write("<tr><td>Total:");
445
446 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(servers.size()), jamonWriter);
447
448 jamonWriter.write("</td>\n<td></td>\n");
449
450 if (inconsistentNodeNum > 0)
451 {
452
453 jamonWriter.write("\n <td style=\"color:red;\">");
454
455 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(inconsistentNodeNum), jamonWriter);
456
457 jamonWriter.write(" nodes with inconsistent version</td>\n");
458 }
459
460 else
461 {
462
463 jamonWriter.write("\n <td></td>\n");
464 }
465
466 jamonWriter.write("\n<td>");
467
468 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRequests), jamonWriter);
469
470 jamonWriter.write("</td>\n<td>");
471
472 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRegions), jamonWriter);
473
474 jamonWriter.write("</td>\n</tr>\n</table>\n");
475 }
476
477
478
479 private void __jamon_innerUnit__emptyStat(final java.io.Writer jamonWriter, final ServerName serverName)
480 throws java.io.IOException
481 {
482
483 jamonWriter.write("<tr>\n <td>");
484
485 {
486
487 __jamon_innerUnit__serverNameLink(jamonWriter, serverName, null);
488 }
489
490 jamonWriter.write("</td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n <td></td>\n </tr>\n");
491 }
492
493
494 }