001// Autogenerated Jamon implementation 002// /Users/peter.somogyi/Cloudera/repos/hbase-upstream/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/RSGroupListTmpl.jamon 003 004package org.apache.hadoop.hbase.tmpl.master; 005 006// 27, 5 007import java.util.Collections; 008// 28, 5 009import java.util.List; 010// 29, 5 011import java.util.Map; 012// 30, 5 013import java.util.Set; 014// 31, 5 015import java.util.stream.Collectors; 016// 32, 5 017import org.apache.hadoop.hbase.master.HMaster; 018// 33, 5 019import org.apache.hadoop.hbase.RegionMetrics; 020// 34, 5 021import org.apache.hadoop.hbase.ServerMetrics; 022// 35, 5 023import org.apache.hadoop.hbase.Size; 024// 36, 5 025import org.apache.hadoop.hbase.RSGroupTableAccessor; 026// 37, 5 027import org.apache.hadoop.hbase.master.ServerManager; 028// 38, 5 029import org.apache.hadoop.hbase.net.Address; 030// 39, 5 031import org.apache.hadoop.hbase.rsgroup.RSGroupInfo; 032// 40, 5 033import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix; 034 035public class RSGroupListTmplImpl 036 extends org.jamon.AbstractTemplateImpl 037 implements org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.Intf 038 039{ 040 private final HMaster master; 041 private final ServerManager serverManager; 042 protected static org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.ImplData p_implData) 043 { 044 return p_implData; 045 } 046 public RSGroupListTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.ImplData p_implData) 047 { 048 super(p_templateManager, __jamon_setOptionalArguments(p_implData)); 049 master = p_implData.getMaster(); 050 serverManager = p_implData.getServerManager(); 051 } 052 053 @Override public void renderNoFlush(final java.io.Writer jamonWriter) 054 throws java.io.IOException 055 { 056 // 42, 1 057 058List<RSGroupInfo> groups = RSGroupTableAccessor.getAllRSGroupInfo(master.getConnection()); 059 060 // 46, 1 061 if ((groups != null && groups.size() > 0)) 062 { 063 // 46, 45 064 jamonWriter.write("\n\n"); 065 // 48, 1 066 067RSGroupInfo [] rsGroupInfos = groups.toArray(new RSGroupInfo[groups.size()]); 068Map<Address, ServerMetrics> collectServers = Collections.emptyMap(); 069if (master.getServerManager() != null) { 070 collectServers = 071 master.getServerManager().getOnlineServers().entrySet().stream() 072 .collect(Collectors.toMap(p -> p.getKey().getAddress(), Map.Entry::getValue)); 073} 074 075 // 58, 1 076 jamonWriter.write("<div class=\"tabbable\">\n <ul class=\"nav nav-pills\">\n <li class=\"active\"><a href=\"#tab_rsgroup_baseStats\" data-toggle=\"tab\">Base Stats</a></li>\n <li class=\"\"><a href=\"#tab_rsgroup_memoryStats\" data-toggle=\"tab\">Memory</a></li>\n <li class=\"\"><a href=\"#tab_rsgroup_requestStats\" data-toggle=\"tab\">Requests</a></li>\n <li class=\"\"><a href=\"#tab_rsgroup_storeStats\" data-toggle=\"tab\">Storefiles</a></li>\n <li class=\"\"><a href=\"#tab_rsgroup_compactStats\" 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_rsgroup_baseStats\">\n "); 077 // 68, 13 078 { 079 // 68, 13 080 __jamon_innerUnit__rsgroup_baseStats(jamonWriter, rsGroupInfos, collectServers ); 081 } 082 // 68, 97 083 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_rsgroup_memoryStats\">\n "); 084 // 71, 13 085 { 086 // 71, 13 087 __jamon_innerUnit__rsgroup_memoryStats(jamonWriter, rsGroupInfos, collectServers ); 088 } 089 // 71, 99 090 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_rsgroup_requestStats\">\n "); 091 // 74, 13 092 { 093 // 74, 13 094 __jamon_innerUnit__rsgroup_requestStats(jamonWriter, rsGroupInfos, collectServers ); 095 } 096 // 74, 100 097 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_rsgroup_storeStats\">\n "); 098 // 77, 13 099 { 100 // 77, 13 101 __jamon_innerUnit__rsgroup_storeStats(jamonWriter, rsGroupInfos, collectServers ); 102 } 103 // 77, 98 104 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_rsgroup_compactStats\">\n "); 105 // 80, 13 106 { 107 // 80, 13 108 __jamon_innerUnit__rsgroup_compactStats(jamonWriter, rsGroupInfos, collectServers ); 109 } 110 // 80, 100 111 jamonWriter.write("\n </div>\n </div>\n</div>\n\n"); 112 } 113 // 85, 7 114 jamonWriter.write("\n\n"); 115 } 116 117 118 // 356, 1 119 private void __jamon_innerUnit__rsGroupLink(final java.io.Writer jamonWriter, final String rsGroupName) 120 throws java.io.IOException 121 { 122 // 360, 5 123 jamonWriter.write("<a href=rsgroup.jsp?name="); 124 // 360, 30 125 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rsGroupName), jamonWriter); 126 // 360, 47 127 jamonWriter.write(">"); 128 // 360, 48 129 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rsGroupName), jamonWriter); 130 // 360, 65 131 jamonWriter.write("</a>\n"); 132 } 133 134 135 // 87, 1 136 private void __jamon_innerUnit__rsgroup_baseStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers) 137 throws java.io.IOException 138 { 139 // 92, 1 140 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>RSGroup Name</th>\n <th>Num. Online Servers</th>\n <th>Num. Dead Servers</th>\n <th>Num. Tables</th>\n <th>Requests Per Second</th>\n <th>Num. Regions</th>\n <th>Average Load</th>\n</tr>\n"); 141 // 102, 1 142 143 int totalOnlineServers = 0; 144 int totalDeadServers = 0; 145 int totalTables = 0; 146 int totalRequests = 0; 147 int totalRegions = 0; 148 for (RSGroupInfo rsGroupInfo: rsGroupInfos) { 149 String rsGroupName = rsGroupInfo.getName(); 150 int onlineServers = 0; 151 int deadServers = 0; 152 int tables = 0; 153 long requestsPerSecond = 0; 154 int numRegionsOnline = 0; 155 Set<Address> servers = rsGroupInfo.getServers(); 156 for (Address server : servers) { 157 ServerMetrics sl = collectServers.get(server); 158 if (sl != null) { 159 requestsPerSecond += sl.getRequestCountPerSecond(); 160 numRegionsOnline += sl.getRegionMetrics().size(); 161 //rsgroup total 162 totalRegions += sl.getRegionMetrics().size(); 163 totalRequests += sl.getRequestCountPerSecond(); 164 totalOnlineServers++; 165 onlineServers++; 166 } else { 167 totalDeadServers++; 168 deadServers++; 169 } 170 } 171 tables = rsGroupInfo.getTables().size(); 172 totalTables += tables; 173 double avgLoad = onlineServers == 0 ? 0 : 174 (double)numRegionsOnline / (double)onlineServers; 175 176 // 136, 1 177 jamonWriter.write("<tr>\n <td>"); 178 // 137, 9 179 { 180 // 137, 9 181 __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName); 182 } 183 // 137, 52 184 jamonWriter.write("</td>\n <td>"); 185 // 138, 9 186 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(onlineServers), jamonWriter); 187 // 138, 28 188 jamonWriter.write("</td>\n <td>"); 189 // 139, 9 190 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(deadServers), jamonWriter); 191 // 139, 26 192 jamonWriter.write("</td>\n <td>"); 193 // 140, 9 194 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(tables), jamonWriter); 195 // 140, 21 196 jamonWriter.write("</td>\n <td>"); 197 // 141, 9 198 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(requestsPerSecond), jamonWriter); 199 // 141, 32 200 jamonWriter.write("</td>\n <td>"); 201 // 142, 9 202 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numRegionsOnline), jamonWriter); 203 // 142, 31 204 jamonWriter.write("</td>\n <td>"); 205 // 143, 9 206 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(avgLoad), jamonWriter); 207 // 143, 22 208 jamonWriter.write("</td>\n</tr>\n"); 209 // 145, 1 210 211} 212 213 // 148, 1 214 jamonWriter.write("<tr><td>Total:"); 215 // 148, 15 216 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rsGroupInfos.length), jamonWriter); 217 // 148, 40 218 jamonWriter.write("</td>\n<td>"); 219 // 149, 5 220 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalOnlineServers), jamonWriter); 221 // 149, 29 222 jamonWriter.write("</td>\n<td>"); 223 // 150, 5 224 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalDeadServers), jamonWriter); 225 // 150, 27 226 jamonWriter.write("</td>\n<td>"); 227 // 151, 5 228 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalTables), jamonWriter); 229 // 151, 22 230 jamonWriter.write("</td>\n<td>"); 231 // 152, 5 232 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRequests), jamonWriter); 233 // 152, 24 234 jamonWriter.write("</td>\n<td>"); 235 // 153, 5 236 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRegions), jamonWriter); 237 // 153, 23 238 jamonWriter.write("</td>\n<td>"); 239 // 154, 5 240 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerManager().getAverageLoad()), jamonWriter); 241 // 154, 53 242 jamonWriter.write("</td>\n</tr>\n</table>\n"); 243 } 244 245 246 // 305, 1 247 private void __jamon_innerUnit__rsgroup_compactStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers) 248 throws java.io.IOException 249 { 250 // 310, 1 251 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>RSGroup Name</th>\n <th>Num. Compacting Cells</th>\n <th>Num. Compacted Cells</th>\n <th>Remaining Cells</th>\n <th>Compaction Progress</th>\n</tr>\n"); 252 // 318, 1 253 254 for (RSGroupInfo rsGroupInfo: rsGroupInfos) { 255 String rsGroupName = rsGroupInfo.getName(); 256 int numStores = 0; 257 long totalCompactingCells = 0; 258 long totalCompactedCells = 0; 259 long remainingCells = 0; 260 long compactionProgress = 0; 261 for (Address server : rsGroupInfo.getServers()) { 262 ServerMetrics sl = collectServers.get(server); 263 if (sl != null) { 264 for (RegionMetrics rl : sl.getRegionMetrics().values()) { 265 totalCompactingCells += rl.getCompactingCellCount(); 266 totalCompactedCells += rl.getCompactedCellCount(); 267 } 268 } 269 } 270 remainingCells = totalCompactingCells - totalCompactedCells; 271 String percentDone = ""; 272 if (totalCompactingCells > 0) { 273 percentDone = String.format("%.2f", 100 * 274 ((float) totalCompactedCells / totalCompactingCells)) + "%"; 275 } 276 277 // 342, 1 278 jamonWriter.write("<tr>\n<td>"); 279 // 343, 5 280 { 281 // 343, 5 282 __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName); 283 } 284 // 343, 48 285 jamonWriter.write("</td>\n<td>"); 286 // 344, 5 287 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalCompactingCells), jamonWriter); 288 // 344, 31 289 jamonWriter.write("</td>\n<td>"); 290 // 345, 5 291 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalCompactedCells), jamonWriter); 292 // 345, 30 293 jamonWriter.write("</td>\n<td>"); 294 // 346, 5 295 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(remainingCells), jamonWriter); 296 // 346, 25 297 jamonWriter.write("</td>\n<td>"); 298 // 347, 5 299 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(percentDone), jamonWriter); 300 // 347, 22 301 jamonWriter.write("</td>\n</tr>\n"); 302 // 349, 1 303 304} 305 306 // 352, 1 307 jamonWriter.write("</table>\n"); 308 } 309 310 311 // 159, 1 312 private void __jamon_innerUnit__rsgroup_memoryStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers) 313 throws java.io.IOException 314 { 315 // 164, 1 316 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>RSGroup Name</th>\n <th>Used Heap</th>\n <th>Max Heap</th>\n <th>Memstore Size</th>\n\n</tr>\n"); 317 // 172, 1 318 319 for (RSGroupInfo rsGroupInfo: rsGroupInfos) { 320 String rsGroupName = rsGroupInfo.getName(); 321 long usedHeap = 0; 322 long maxHeap = 0; 323 long memstoreSize = 0; 324 for (Address server : rsGroupInfo.getServers()) { 325 ServerMetrics sl = collectServers.get(server); 326 if (sl != null) { 327 usedHeap += (long) sl.getUsedHeapSize().get(Size.Unit.MEGABYTE); 328 maxHeap += (long) sl.getMaxHeapSize().get(Size.Unit.MEGABYTE); 329 memstoreSize += (long) sl.getRegionMetrics().values().stream().mapToDouble( 330 rm -> rm.getMemStoreSize().get(Size.Unit.MEGABYTE)).sum(); 331 } 332 } 333 334 // 188, 1 335 jamonWriter.write("<tr>\n <td>"); 336 // 189, 9 337 { 338 // 189, 9 339 __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName); 340 } 341 // 189, 52 342 jamonWriter.write("</td>\n <td>"); 343 // 190, 9 344 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(usedHeap 345 * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter); 346 // 191, 61 347 jamonWriter.write("</td>\n <td>"); 348 // 192, 9 349 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(maxHeap 350 * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter); 351 // 193, 61 352 jamonWriter.write("</td>\n <td>"); 353 // 194, 9 354 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(memstoreSize 355 * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter); 356 // 195, 61 357 jamonWriter.write("</td>\n\n</tr>\n"); 358 // 198, 1 359 360} 361 362 // 201, 1 363 jamonWriter.write("</table>\n"); 364 } 365 366 367 // 204, 1 368 private void __jamon_innerUnit__rsgroup_requestStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers) 369 throws java.io.IOException 370 { 371 // 209, 1 372 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>RSGroup Name</th>\n <th>Request Per Second</th>\n <th>Read Request Count</th>\n <th>Write Request Count</th>\n</tr>\n"); 373 // 216, 1 374 375 for (RSGroupInfo rsGroupInfo: rsGroupInfos) { 376 String rsGroupName = rsGroupInfo.getName(); 377 long requestsPerSecond = 0; 378 long readRequests = 0; 379 long writeRequests = 0; 380 for (Address server : rsGroupInfo.getServers()) { 381 ServerMetrics sl = collectServers.get(server); 382 if (sl != null) { 383 for (RegionMetrics rm : sl.getRegionMetrics().values()) { 384 readRequests += rm.getReadRequestCount(); 385 writeRequests += rm.getWriteRequestCount(); 386 } 387 requestsPerSecond += sl.getRequestCountPerSecond(); 388 } 389 } 390 391 // 233, 1 392 jamonWriter.write("<tr>\n<td>"); 393 // 234, 5 394 { 395 // 234, 5 396 __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName); 397 } 398 // 234, 48 399 jamonWriter.write("</td>\n<td>"); 400 // 235, 5 401 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(requestsPerSecond), jamonWriter); 402 // 235, 28 403 jamonWriter.write("</td>\n<td>"); 404 // 236, 5 405 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(readRequests), jamonWriter); 406 // 236, 23 407 jamonWriter.write("</td>\n<td>"); 408 // 237, 5 409 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(writeRequests), jamonWriter); 410 // 237, 24 411 jamonWriter.write("</td>\n</tr>\n"); 412 // 239, 1 413 414} 415 416 // 242, 1 417 jamonWriter.write("</table>\n"); 418 } 419 420 421 // 246, 1 422 private void __jamon_innerUnit__rsgroup_storeStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers) 423 throws java.io.IOException 424 { 425 // 251, 1 426 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>RSGroup Name</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"); 427 // 261, 1 428 429 for (RSGroupInfo rsGroupInfo: rsGroupInfos) { 430 String rsGroupName = rsGroupInfo.getName(); 431 int numStores = 0; 432 long numStorefiles = 0; 433 long uncompressedStorefileSize = 0; 434 long storefileSize = 0; 435 long indexSize = 0; 436 long bloomSize = 0; 437 int count = 0; 438 for (Address server : rsGroupInfo.getServers()) { 439 ServerMetrics sl = collectServers.get(server); 440 if (sl != null) { 441 for (RegionMetrics rm : sl.getRegionMetrics().values()) { 442 numStores += rm.getStoreCount(); 443 numStorefiles += rm.getStoreFileCount(); 444 uncompressedStorefileSize += rm.getUncompressedStoreFileSize().get(Size.Unit.MEGABYTE); 445 storefileSize += rm.getStoreFileSize().get(Size.Unit.MEGABYTE); 446 indexSize += rm.getStoreFileUncompressedDataIndexSize().get(Size.Unit.KILOBYTE); 447 bloomSize += rm.getBloomFilterSize().get(Size.Unit.KILOBYTE); 448 } 449 count++; 450 } 451 } 452 453 // 286, 1 454 jamonWriter.write("<tr>\n<td>"); 455 // 287, 5 456 { 457 // 287, 5 458 __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName); 459 } 460 // 287, 48 461 jamonWriter.write("</td>\n<td>"); 462 // 288, 5 463 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numStores), jamonWriter); 464 // 288, 20 465 jamonWriter.write("</td>\n<td>"); 466 // 289, 5 467 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numStorefiles), jamonWriter); 468 // 289, 24 469 jamonWriter.write("</td>\n<td>"); 470 // 290, 5 471 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String( 472 uncompressedStorefileSize * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter); 473 // 291, 79 474 jamonWriter.write("</td>\n<td>"); 475 // 292, 5 476 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String( 477 storefileSize * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter); 478 // 293, 67 479 jamonWriter.write("</td>\n<td>"); 480 // 294, 5 481 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String( 482 indexSize * TraditionalBinaryPrefix.KILO.value, "B", 1)), jamonWriter); 483 // 295, 63 484 jamonWriter.write("</td>\n<td>"); 485 // 296, 5 486 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String( 487 bloomSize * TraditionalBinaryPrefix.KILO.value, "B", 1)), jamonWriter); 488 // 297, 63 489 jamonWriter.write("</td>\n</tr>\n"); 490 // 299, 1 491 492} 493 494 // 302, 1 495 jamonWriter.write("</table>\n"); 496 } 497 498 499}