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