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