001// Autogenerated Jamon implementation 002// /Users/petersomogyi/projects/hbase-upstream/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/RegionListTmpl.jamon 003 004package org.apache.hadoop.hbase.tmpl.regionserver; 005 006// 24, 9 007import java.util.*; 008// 25, 9 009import org.apache.commons.lang3.time.FastDateFormat; 010// 26, 9 011import org.apache.hadoop.hbase.regionserver.HRegionServer; 012// 27, 9 013import org.apache.hadoop.hbase.util.Bytes; 014// 28, 9 015import org.apache.hadoop.hbase.client.RegionInfo; 016// 29, 9 017import org.apache.hadoop.hbase.client.RegionInfoDisplay; 018// 30, 9 019import org.apache.hadoop.hbase.regionserver.Region; 020// 31, 9 021import org.apache.hadoop.hbase.ServerName; 022// 32, 9 023import org.apache.hadoop.hbase.HBaseConfiguration; 024// 33, 9 025import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; 026// 34, 9 027import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ServerInfo; 028// 35, 9 029import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad; 030// 36, 9 031import org.apache.hadoop.hbase.client.RegionReplicaUtil; 032// 37, 9 033import org.apache.hadoop.hbase.regionserver.MetricsRegionWrapper; 034// 38, 9 035import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix; 036 037public class RegionListTmplImpl 038 extends org.jamon.AbstractTemplateImpl 039 implements org.apache.hadoop.hbase.tmpl.regionserver.RegionListTmpl.Intf 040 041{ 042 private final HRegionServer regionServer; 043 private final List<RegionInfo> onlineRegions; 044 protected static org.apache.hadoop.hbase.tmpl.regionserver.RegionListTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RegionListTmpl.ImplData p_implData) 045 { 046 return p_implData; 047 } 048 public RegionListTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.RegionListTmpl.ImplData p_implData) 049 { 050 super(p_templateManager, __jamon_setOptionalArguments(p_implData)); 051 regionServer = p_implData.getRegionServer(); 052 onlineRegions = p_implData.getOnlineRegions(); 053 } 054 055 @Override public void renderNoFlush(final java.io.Writer jamonWriter) 056 throws java.io.IOException 057 { 058 // 40, 1 059 if ((onlineRegions != null && onlineRegions.size() > 0) ) 060 { 061 // 40, 60 062 jamonWriter.write("\n\n "); 063 // 42, 5 064 065 Collections.sort(onlineRegions, RegionInfo.COMPARATOR); 066 067 // 46, 5 068 jamonWriter.write("<div class=\"tabbable\">\n <ul class=\"nav nav-pills\">\n <li class=\"active\"><a href=\"#tab_regionBaseInfo\" data-toggle=\"tab\">Base Info</a> </li>\n <li><a href=\"#tab_regionRequestStats\" data-toggle=\"tab\">Request metrics</a></li>\n <li class=\"\"><a href=\"#tab_regionStoreStats\" data-toggle=\"tab\">Storefile Metrics</a></li>\n <li class=\"\"><a href=\"#tab_regionMemstoreStats\" data-toggle=\"tab\">Memstore Metrics</a></li>\n <li class=\"\"><a href=\"#tab_regionCompactStats\" data-toggle=\"tab\">Compaction Metrics</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_regionBaseInfo\">\n "); 069 // 56, 17 070 { 071 // 56, 17 072 __jamon_innerUnit__baseInfo(jamonWriter, onlineRegions); 073 } 074 // 56, 63 075 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_regionRequestStats\">\n "); 076 // 59, 17 077 { 078 // 59, 17 079 __jamon_innerUnit__requestStats(jamonWriter, onlineRegions); 080 } 081 // 59, 67 082 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_regionStoreStats\">\n "); 083 // 62, 17 084 { 085 // 62, 17 086 __jamon_innerUnit__storeStats(jamonWriter, onlineRegions); 087 } 088 // 62, 65 089 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_regionMemstoreStats\">\n "); 090 // 65, 17 091 { 092 // 65, 17 093 __jamon_innerUnit__memstoreStats(jamonWriter, onlineRegions); 094 } 095 // 65, 68 096 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_regionCompactStats\">\n "); 097 // 68, 17 098 { 099 // 68, 17 100 __jamon_innerUnit__compactStats(jamonWriter, onlineRegions); 101 } 102 // 68, 67 103 jamonWriter.write("\n </div>\n </div>\n </div>\n <p>Region names are made of the containing table's name, a comma,\n the start key, a comma, and a randomly generated region id. To illustrate,\n the region named\n <em>domains,apache.org,5464829424211263407</em> is party to the table\n <em>domains</em>, has an id of <em>5464829424211263407</em> and the first key\n in the region is <em>apache.org</em>. The <em>hbase:meta</em> 'table' is an internal\n system table (or a 'catalog' table in db-speak).\n The hbase:meta table keeps a list of all regions in the system. The empty key is used to denote\n table start and table end. A region with an empty start key is the first region in a table.\n If a region has both an empty start key and an empty end key, it's the only region in the\n table. See <a href=\"http://hbase.apache.org\">HBase Home</a> for further explication.<p>\n"); 104 } 105 // 83, 1 106 else 107 { 108 // 83, 8 109 jamonWriter.write("\n <p>Not serving regions</p>\n"); 110 } 111 // 85, 7 112 jamonWriter.write("\n\n"); 113 } 114 115 116 // 87, 1 117 private void __jamon_innerUnit__baseInfo(final java.io.Writer jamonWriter, final List<RegionInfo> onlineRegions) 118 throws java.io.IOException 119 { 120 // 91, 5 121 jamonWriter.write("<table id=\"baseStatsTable\" class=\"tablesorter table table-striped\">\n <thead>\n <tr>\n <th>Region Name</th>\n <th>Start Key</th>\n <th>End Key</th>\n <th>ReplicaID</th>\n </tr>\n </thead>\n\n <tbody>\n "); 122 // 102, 9 123 for (RegionInfo r: onlineRegions ) 124 { 125 // 102, 45 126 jamonWriter.write("\n <tr>\n "); 127 // 104, 13 128 129 String displayName = RegionInfoDisplay.getRegionNameAsStringForDisplay(r, 130 regionServer.getConfiguration()); 131 132 // 108, 13 133 jamonWriter.write("<td><a href=\"region.jsp?name="); 134 // 108, 42 135 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(r.getEncodedName()), jamonWriter); 136 // 108, 66 137 jamonWriter.write("\">"); 138 // 108, 68 139 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(displayName), jamonWriter); 140 // 108, 85 141 jamonWriter.write("</a></td>\n <td>"); 142 // 109, 17 143 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(Bytes.toStringBinary(RegionInfoDisplay.getStartKeyForDisplay(r, 144 regionServer.getConfiguration()))), jamonWriter); 145 // 110, 77 146 jamonWriter.write("</td>\n <td>"); 147 // 111, 17 148 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(Bytes.toStringBinary(RegionInfoDisplay.getEndKeyForDisplay(r, 149 regionServer.getConfiguration()))), jamonWriter); 150 // 112, 77 151 jamonWriter.write("</td>\n <td>"); 152 // 113, 17 153 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(r.getReplicaId()), jamonWriter); 154 // 113, 39 155 jamonWriter.write("</td>\n </tr>\n "); 156 } 157 // 115, 16 158 jamonWriter.write("\n </tbody>\n </table>\n"); 159 } 160 161 162 // 228, 1 163 private void __jamon_innerUnit__compactStats(final java.io.Writer jamonWriter, final List<RegionInfo> onlineRegions) 164 throws java.io.IOException 165 { 166 // 232, 5 167 jamonWriter.write("<table id=\"compactionStatsTable\" class=\"tablesorter table table-striped\">\n <thead>\n <tr>\n <th>Region Name</th>\n <th>Num. Compacting Cells</th>\n <th>Num. Compacted Cells</th>\n <th>Compaction Progress</th>\n <th data-date-format=\"yyyymmdd hhmm zz\">Last Major Compaction</th>\n </tr>\n </thead>\n\n <tbody>\n "); 168 // 244, 9 169 for (RegionInfo r: onlineRegions ) 170 { 171 // 244, 45 172 jamonWriter.write("\n\n <tr>\n "); 173 // 247, 9 174 175 RegionLoad load = regionServer.createRegionLoad(r.getEncodedName()); 176 String percentDone = ""; 177 String compactTime = ""; 178 if (load != null) { 179 if (load.getTotalCompactingKVs() > 0) { 180 percentDone = String.format("%.2f", 100 * 181 ((float) load.getCurrentCompactedKVs() / load.getTotalCompactingKVs())) + "%"; 182 } 183 if (load.getLastMajorCompactionTs() > 0) { 184 FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm (ZZ)"); 185 compactTime = fdf.format(load.getLastMajorCompactionTs()); 186 } 187 } 188 String displayName = RegionInfoDisplay.getRegionNameAsStringForDisplay(r, 189 regionServer.getConfiguration()); 190 191 // 264, 13 192 jamonWriter.write("<td><a href=\"region.jsp?name="); 193 // 264, 42 194 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(r.getEncodedName()), jamonWriter); 195 // 264, 66 196 jamonWriter.write("\">"); 197 // 264, 68 198 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(displayName), jamonWriter); 199 // 264, 85 200 jamonWriter.write("</a></td>\n "); 201 // 265, 13 202 if (load != null ) 203 { 204 // 265, 33 205 jamonWriter.write("\n <td>"); 206 // 266, 17 207 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getTotalCompactingKVs()), jamonWriter); 208 // 266, 51 209 jamonWriter.write("</td>\n <td>"); 210 // 267, 17 211 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getCurrentCompactedKVs()), jamonWriter); 212 // 267, 52 213 jamonWriter.write("</td>\n <td>"); 214 // 268, 17 215 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(percentDone), jamonWriter); 216 // 268, 34 217 jamonWriter.write("</td>\n <td>"); 218 // 269, 17 219 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(compactTime), jamonWriter); 220 // 269, 34 221 jamonWriter.write("</td>\n "); 222 } 223 // 270, 19 224 jamonWriter.write("\n </tr>\n "); 225 } 226 // 272, 16 227 jamonWriter.write("\n </tbody>\n </table>\n"); 228 } 229 230 231 // 277, 1 232 private void __jamon_innerUnit__memstoreStats(final java.io.Writer jamonWriter, final List<RegionInfo> onlineRegions) 233 throws java.io.IOException 234 { 235 // 281, 5 236 jamonWriter.write("<table id=\"memstoreStatsTable\" class=\"tablesorter table table-striped\">\n <thead>\n <tr>\n <th>Region Name</th>\n <th>Memstore Size</th>\n </tr>\n </thead>\n\n <tbody>\n "); 237 // 290, 9 238 for (RegionInfo r: onlineRegions ) 239 { 240 // 290, 45 241 jamonWriter.write("\n\n <tr>\n "); 242 // 293, 9 243 244 final String ZEROMB = "0 MB"; 245 String memStoreSizeMBStr = ZEROMB; 246 RegionLoad load = regionServer.createRegionLoad(r.getEncodedName()); 247 String displayName = RegionInfoDisplay.getRegionNameAsStringForDisplay(r, 248 regionServer.getConfiguration()); 249 if (load != null) { 250 long memStoreSizeMB = load.getMemStoreSizeMB(); 251 if (memStoreSizeMB > 0) { 252 memStoreSizeMBStr = TraditionalBinaryPrefix.long2String( 253 memStoreSizeMB * TraditionalBinaryPrefix.MEGA.value, "B", 1); 254 } 255 } 256 257 // 307, 13 258 jamonWriter.write("<td><a href=\"region.jsp?name="); 259 // 307, 42 260 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(r.getEncodedName()), jamonWriter); 261 // 307, 66 262 jamonWriter.write("\">"); 263 // 307, 68 264 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(displayName), jamonWriter); 265 // 307, 85 266 jamonWriter.write("</a></td>\n "); 267 // 308, 13 268 if (load != null ) 269 { 270 // 308, 33 271 jamonWriter.write("\n <td>"); 272 // 309, 17 273 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(memStoreSizeMBStr), jamonWriter); 274 // 309, 40 275 jamonWriter.write("</td>\n "); 276 } 277 // 310, 19 278 jamonWriter.write("\n </tr>\n "); 279 } 280 // 312, 16 281 jamonWriter.write("\n </tbody>\n </table>\n"); 282 } 283 284 285 // 120, 1 286 private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final List<RegionInfo> onlineRegions) 287 throws java.io.IOException 288 { 289 // 124, 5 290 jamonWriter.write("<table id=\"requestStatsTable\" class=\"tablesorter table table-striped\">\n <thead>\n <tr>\n <th>Region Name</th>\n <th>Read Request Count</th>\n <th>Filtered Read Request Count</th>\n <th>Write Request Count</th>\n </tr>\n </thead>\n\n <tbody>\n "); 291 // 135, 9 292 for (RegionInfo r: onlineRegions ) 293 { 294 // 135, 45 295 jamonWriter.write("\n\n <tr>\n "); 296 // 138, 9 297 298 RegionLoad load = regionServer.createRegionLoad(r.getEncodedName()); 299 String displayName = RegionInfoDisplay.getRegionNameAsStringForDisplay(r, 300 regionServer.getConfiguration()); 301 302 // 143, 13 303 jamonWriter.write("<td><a href=\"region.jsp?name="); 304 // 143, 42 305 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(r.getEncodedName()), jamonWriter); 306 // 143, 66 307 jamonWriter.write("\">"); 308 // 143, 68 309 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(displayName), jamonWriter); 310 // 143, 85 311 jamonWriter.write("</a></td>\n "); 312 // 144, 13 313 if (load != null ) 314 { 315 // 144, 33 316 jamonWriter.write("\n <td>"); 317 // 145, 17 318 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getReadRequestsCount()), jamonWriter); 319 // 145, 50 320 jamonWriter.write("</td>\n <td>"); 321 // 146, 17 322 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getFilteredReadRequestsCount()), jamonWriter); 323 // 146, 58 324 jamonWriter.write("</td>\n <td>"); 325 // 147, 17 326 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getWriteRequestsCount()), jamonWriter); 327 // 147, 51 328 jamonWriter.write("</td>\n "); 329 } 330 // 148, 19 331 jamonWriter.write("\n </tr>\n "); 332 } 333 // 150, 16 334 jamonWriter.write("\n </tbody>\n </table>\n"); 335 } 336 337 338 // 156, 1 339 private void __jamon_innerUnit__storeStats(final java.io.Writer jamonWriter, final List<RegionInfo> onlineRegions) 340 throws java.io.IOException 341 { 342 // 160, 5 343 jamonWriter.write("<table id=\"storeStatsTable\" class=\"tablesorter table table-striped\">\n <thead>\n <tr>\n <th>Region 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 <th>Data Locality</th>\n </tr>\n </thead>\n\n <tbody>\n "); 344 // 175, 9 345 for (RegionInfo r: onlineRegions ) 346 { 347 // 175, 45 348 jamonWriter.write("\n\n <tr>\n "); 349 // 178, 9 350 351 final String ZEROMB = "0 MB"; 352 final String ZEROKB = "0 KB"; 353 String uncompressedStorefileSizeStr = ZEROMB; 354 String storefileSizeStr = ZEROMB; 355 String indexSizeStr = ZEROKB; 356 String bloomSizeStr = ZEROKB; 357 RegionLoad load = regionServer.createRegionLoad(r.getEncodedName()); 358 String displayName = RegionInfoDisplay.getRegionNameAsStringForDisplay(r, 359 regionServer.getConfiguration()); 360 if (load != null) { 361 long uncompressedStorefileSize = load.getStoreUncompressedSizeMB(); 362 long storefileSize = load.getStorefileSizeMB(); 363 long indexSize = load.getTotalStaticIndexSizeKB(); 364 long bloomSize = load.getTotalStaticBloomSizeKB(); 365 if (uncompressedStorefileSize > 0) { 366 uncompressedStorefileSizeStr = TraditionalBinaryPrefix.long2String( 367 uncompressedStorefileSize * TraditionalBinaryPrefix.MEGA.value, "B", 1); 368 } 369 if (storefileSize > 0) { 370 storefileSizeStr = TraditionalBinaryPrefix.long2String(storefileSize 371 * TraditionalBinaryPrefix.MEGA.value, "B", 1); 372 } 373 if(indexSize > 0) { 374 indexSizeStr = TraditionalBinaryPrefix.long2String(indexSize 375 * TraditionalBinaryPrefix.KILO.value, "B", 1); 376 } 377 if (bloomSize > 0) { 378 bloomSizeStr = TraditionalBinaryPrefix.long2String(bloomSize 379 * TraditionalBinaryPrefix.KILO.value, "B", 1); 380 } 381 } 382 383 // 211, 13 384 jamonWriter.write("<td><a href=\"region.jsp?name="); 385 // 211, 42 386 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(r.getEncodedName()), jamonWriter); 387 // 211, 66 388 jamonWriter.write("\">"); 389 // 211, 68 390 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(displayName), jamonWriter); 391 // 211, 85 392 jamonWriter.write("</a></td>\n "); 393 // 212, 13 394 if (load != null ) 395 { 396 // 212, 33 397 jamonWriter.write("\n <td>"); 398 // 213, 17 399 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getStores()), jamonWriter); 400 // 213, 39 401 jamonWriter.write("</td>\n <td>"); 402 // 214, 17 403 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getStorefiles()), jamonWriter); 404 // 214, 43 405 jamonWriter.write("</td>\n <td>"); 406 // 215, 17 407 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(uncompressedStorefileSizeStr), jamonWriter); 408 // 215, 51 409 jamonWriter.write("</td>\n <td>"); 410 // 216, 17 411 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(storefileSizeStr), jamonWriter); 412 // 216, 39 413 jamonWriter.write("</td>\n <td>"); 414 // 217, 17 415 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(indexSizeStr), jamonWriter); 416 // 217, 35 417 jamonWriter.write("</td>\n <td>"); 418 // 218, 17 419 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bloomSizeStr), jamonWriter); 420 // 218, 35 421 jamonWriter.write("</td>\n <td>"); 422 // 219, 17 423 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(load.getDataLocality()), jamonWriter); 424 // 219, 45 425 jamonWriter.write("</td>\n "); 426 } 427 // 220, 19 428 jamonWriter.write("\n </tr>\n "); 429 } 430 // 222, 16 431 jamonWriter.write("\n </tbody>\n </table>\n"); 432 } 433 434 435}