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