001// Autogenerated Jamon implementation 002// /Users/petersomogyi/projects/hbase-upstream/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/BlockCacheTmpl.jamon 003 004package org.apache.hadoop.hbase.tmpl.regionserver; 005 006// 32, 1 007import java.util.Map; 008// 33, 1 009import org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.CachedBlocksByFile; 010// 34, 1 011import org.apache.hadoop.hbase.io.hfile.AgeSnapshot; 012// 35, 1 013import org.apache.hadoop.hbase.io.hfile.CachedBlock; 014// 36, 1 015import org.apache.hadoop.conf.Configuration; 016// 37, 1 017import org.apache.hadoop.hbase.io.hfile.CacheConfig; 018// 38, 1 019import org.apache.hadoop.hbase.io.hfile.BlockCache; 020// 39, 1 021import org.apache.hadoop.hbase.io.hfile.bucket.BucketCacheStats; 022// 40, 1 023import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache; 024// 41, 1 025import org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator; 026// 42, 1 027import org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator.Bucket; 028// 43, 1 029import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix; 030 031public class BlockCacheTmplImpl 032 extends org.jamon.AbstractTemplateImpl 033 implements org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.Intf 034 035{ 036 private final CacheConfig cacheConfig; 037 private final Configuration config; 038 private final BlockCache bc; 039 protected static org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.ImplData p_implData) 040 { 041 return p_implData; 042 } 043 public BlockCacheTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.ImplData p_implData) 044 { 045 super(p_templateManager, __jamon_setOptionalArguments(p_implData)); 046 cacheConfig = p_implData.getCacheConfig(); 047 config = p_implData.getConfig(); 048 bc = p_implData.getBc(); 049 } 050 051 @Override public void renderNoFlush(final java.io.Writer jamonWriter) 052 throws java.io.IOException 053 { 054 // 25, 1 055 056 String bcUrl = bc == null ? null : "http://hbase.apache.org/devapidocs/" + bc.getClass().getName().replaceAll("\\.", "/") + ".html"; 057 String bcName = bc == null ? null : bc.getClass().getSimpleName(); 058 BlockCache [] bcs = bc == null ? null : bc.getBlockCaches(); 059 boolean evictions = bcs != null && bcs.length > 1; 060 061 // 45, 1 062 jamonWriter.write("<div class=\"tabbable\">\n <ul class=\"nav nav-pills\">\n <li class=\"active\"><a href=\"#tab_bc_baseInfo\" data-toggle=\"tab\">Base Info</a></li>\n <li class=\"\"><a href=\"#tab_bc_config\" data-toggle=\"tab\">Config</a></li>\n <li class=\"\"><a href=\"#tab_bc_stats\" data-toggle=\"tab\">Stats</a></li>\n <li class=\"\"><a href=\"#tab_bc_l1\" data-toggle=\"tab\">L1</a></li>\n <li class=\"\"><a href=\"#tab_bc_l2\" data-toggle=\"tab\">L2</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_bc_baseInfo\">\n "); 063 // 55, 13 064 { 065 // 55, 13 066 __jamon_innerUnit__bc_baseInfo(jamonWriter, bc, bcUrl, bcName); 067 } 068 // 55, 73 069 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_bc_config\">\n "); 070 // 58, 13 071 { 072 // 58, 13 073 __jamon_innerUnit__bc_config(jamonWriter, cacheConfig ); 074 } 075 // 58, 55 076 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_bc_stats\">\n "); 077 // 61, 13 078 { 079 // 61, 13 080 __jamon_innerUnit__bc_stats(jamonWriter, bc ); 081 } 082 // 61, 36 083 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_bc_l1\">\n "); 084 // 64, 13 085 { 086 // 64, 13 087 __jamon_innerUnit__bc_l(jamonWriter, bcs == null? bc: bcs[0], "L1", evictions); 088 } 089 // 64, 90 090 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_bc_l2\">\n "); 091 // 67, 13 092 { 093 // 67, 13 094 __jamon_innerUnit__bc_l(jamonWriter, bcs == null? null: bcs.length <= 1? null: bcs[1], "L2", evictions); 095 } 096 // 67, 115 097 jamonWriter.write("\n </div>\n </div>\n</div>\n\n"); 098 } 099 100 101 // 72, 1 102 private void __jamon_innerUnit__bc_baseInfo(final java.io.Writer jamonWriter, final BlockCache bc, final String bcUrl, final String bcName) 103 throws java.io.IOException 104 { 105 // 78, 1 106 107 BlockCache [] bcs = bc == null? null: bc.getBlockCaches(); 108 String bcl1Url = null; 109 String bcl1Name = null; 110 String bcl2Url = null; 111 String bcl2Name = null; 112 if (bcs != null) { 113 BlockCache bcl1 = bcs[0]; 114 if (bcl1 != null) { 115 bcl1Url = "http://hbase.apache.org/devapidocs/" + bcl1.getClass().getName().replaceAll("\\.", "/") + ".html"; 116 bcl1Name = bcl1.getClass().getSimpleName(); 117 } 118 if (bcs.length == 2) { 119 BlockCache bcl2 = bcs[1]; 120 bcl2Url = "http://hbase.apache.org/devapidocs/" + bcl2.getClass().getName().replaceAll("\\.", "/") + ".html"; 121 bcl2Name = bcl2.getClass().getSimpleName(); 122 } 123 } 124 125 // 97, 1 126 jamonWriter.write("<table class=\"table table-striped\">\n <tr>\n <th>Attribute</th>\n <th>Value</th>\n <th>Description</th>\n </tr>\n </tr>\n <tr>\n <td>Implementation</td>\n <td><a href=\""); 127 // 106, 22 128 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bcUrl), jamonWriter); 129 // 106, 33 130 jamonWriter.write("\">"); 131 // 106, 35 132 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bcName), jamonWriter); 133 // 106, 47 134 jamonWriter.write("</a></td>\n <td>Block cache implementing class</td>\n </tr>\n</table>\n<p>See <a href=\"http://hbase.apache.org/book.html#block.cache\">block cache</a> in the HBase Reference Guide for help.</p>\n"); 135 } 136 137 138 // 113, 1 139 private void __jamon_innerUnit__bc_config(final java.io.Writer jamonWriter, final CacheConfig cacheConfig) 140 throws java.io.IOException 141 { 142 // 117, 1 143 if (cacheConfig == null ) 144 { 145 // 117, 28 146 jamonWriter.write("\n<p>CacheConfig is null</p>\n"); 147 } 148 // 119, 1 149 else 150 { 151 // 119, 8 152 jamonWriter.write("\n<table class=\"table table-striped\">\n <tr>\n <th>Attribute</th>\n <th>Value</th>\n <th>Description</th>\n </tr>\n <tr>\n <td>Cache DATA on Read</td>\n <td>"); 153 // 128, 13 154 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheDataOnRead()), jamonWriter); 155 // 128, 54 156 jamonWriter.write("</td>\n <td>True if DATA blocks are cached on read\n (INDEX & BLOOM blocks are always cached)</td>\n </tr>\n <tr>\n <td>Cache DATA on Write</td>\n <td>"); 157 // 134, 13 158 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheDataOnWrite()), jamonWriter); 159 // 134, 55 160 jamonWriter.write("</td>\n <td>True if DATA blocks are cached on write.</td>\n </tr>\n <tr>\n <td>Cache INDEX on Write</td>\n <td>"); 161 // 139, 13 162 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheIndexesOnWrite()), jamonWriter); 163 // 139, 58 164 jamonWriter.write("</td>\n <td>True if INDEX blocks are cached on write</td>\n </tr>\n <tr>\n <td>Cache BLOOM on Write</td>\n <td>"); 165 // 144, 13 166 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheBloomsOnWrite()), jamonWriter); 167 // 144, 57 168 jamonWriter.write("</td>\n <td>True if BLOOM blocks are cached on write</td>\n </tr>\n <tr>\n <td>Evict blocks on Close</td>\n <td>"); 169 // 149, 13 170 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldEvictOnClose()), jamonWriter); 171 // 149, 51 172 jamonWriter.write("</td>\n <td>True if blocks are evicted from cache when an HFile\n reader is closed</td>\n </tr>\n <tr>\n <td>Cache DATA in compressed format</td>\n <td>"); 173 // 155, 13 174 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheDataCompressed()), jamonWriter); 175 // 155, 58 176 jamonWriter.write("</td>\n <td>True if DATA blocks are cached in their compressed form</td>\n </tr>\n <tr>\n <td>Prefetch on Open</td>\n <td>"); 177 // 160, 13 178 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldPrefetchOnOpen()), jamonWriter); 179 // 160, 53 180 jamonWriter.write("</td>\n <td>True if blocks are prefetched into cache on open</td>\n </tr>\n</table>\n"); 181 } 182 // 164, 7 183 jamonWriter.write("\n"); 184 } 185 186 187 // 262, 1 188 private void __jamon_innerUnit__bc_l(final java.io.Writer jamonWriter, final BlockCache bc, final String name, final boolean evictions) 189 throws java.io.IOException 190 { 191 // 268, 1 192 if (bc == null ) 193 { 194 // 268, 19 195 jamonWriter.write("\n<p>No "); 196 // 269, 7 197 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(name), jamonWriter); 198 // 269, 17 199 jamonWriter.write(" deployed</p>\n"); 200 } 201 // 270, 1 202 else 203 { 204 // 270, 8 205 jamonWriter.write("\n"); 206 // 271, 1 207 { 208 // 271, 1 209 __jamon_innerUnit__block_cache(jamonWriter, bc, name, evictions); 210 } 211 // 271, 65 212 jamonWriter.write("\n"); 213 } 214 // 272, 7 215 jamonWriter.write("\n"); 216 } 217 218 219 // 224, 1 220 private void __jamon_innerUnit__bc_stats(final java.io.Writer jamonWriter, final BlockCache bc) 221 throws java.io.IOException 222 { 223 // 228, 1 224 if (bc == null ) 225 { 226 // 228, 19 227 jamonWriter.write("\n<p>BlockCache is null</p>\n"); 228 } 229 // 230, 1 230 else 231 { 232 // 230, 8 233 jamonWriter.write("\n<table class=\"table table-striped\">\n <tr>\n <th>Attribute</th>\n <th>Value</th>\n <th>Description</th>\n </tr>\n <tr>\n <td>Size</td>\n <td>"); 234 // 239, 13 235 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(bc.getCurrentSize(), 236 "B", 1)), jamonWriter); 237 // 240, 23 238 jamonWriter.write("</td>\n <td>Current size of block cache in use</td>\n </tr>\n <tr>\n <td>Free</td>\n <td>"); 239 // 245, 13 240 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(bc.getFreeSize(), 241 "B", 1)), jamonWriter); 242 // 246, 23 243 jamonWriter.write("</td>\n <td>The total free memory currently available to store more cache entries</td>\n </tr>\n <tr>\n <td>Count</td>\n <td>"); 244 // 251, 13 245 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getBlockCount())), jamonWriter); 246 // 251, 59 247 jamonWriter.write("</td>\n <td>Number of blocks in block cache</td>\n </tr>\n "); 248 // 254, 5 249 { 250 // 254, 5 251 __jamon_innerUnit__evictions_tmpl(jamonWriter, bc); 252 } 253 // 254, 35 254 jamonWriter.write("\n "); 255 // 255, 5 256 { 257 // 255, 5 258 __jamon_innerUnit__hits_tmpl(jamonWriter, bc); 259 } 260 // 255, 30 261 jamonWriter.write("\n</table>\n<p>If block cache is made up of more than one cache -- i.e. a L1 and a L2 -- then the above\nare combined counts. Request count is sum of hits and misses.</p>\n"); 262 } 263 // 259, 7 264 jamonWriter.write("\n"); 265 } 266 267 268 // 275, 1 269 private void __jamon_innerUnit__block_cache(final java.io.Writer jamonWriter, final BlockCache bc, final String name, final boolean evictions) 270 throws java.io.IOException 271 { 272 // 281, 1 273 274 String bcUrl = "http://hbase.apache.org/devapidocs/" + bc.getClass().getName().replaceAll("\\.", "/") + ".html"; 275 String bcName = bc.getClass().getSimpleName(); 276 org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.CachedBlocksByFile cbsbf = 277 org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.getLoadedCachedBlocksByFile(config, bc); 278 AgeSnapshot cbsbfSnapshot = cbsbf.getAgeInCacheSnapshot(); 279 280 boolean bucketCache = bc.getClass().getSimpleName().equals("BucketCache"); 281 BucketCacheStats bucketCacheStats = null; 282 BucketAllocator bucketAllocator = null; 283 284 if (bucketCache) { 285 bucketCacheStats = (BucketCacheStats)bc.getStats(); 286 bucketAllocator = ((BucketCache)bc).getAllocator(); 287 } 288 289 // 297, 1 290 if (cbsbf.isFull() ) 291 { 292 // 297, 23 293 jamonWriter.write("\n<p>\n<div class=\"alert alert-danger\">\n<strong>The stats below are incomplete!</strong> We ran into our accounting limit of "); 294 // 300, 86 295 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cbsbf.getCount()), jamonWriter); 296 // 300, 108 297 jamonWriter.write(" blocks. Up the configuration <i>hbase.ui.blockcache.by.file.max</i>.\n</div>\n</p> \n"); 298 } 299 // 303, 7 300 jamonWriter.write("\n<table id=\"blocks_summary\" class=\"table table-striped\">\n <tr>\n <th>Attribute</th>\n <th>Value</th>\n <th>Description</th>\n </tr>\n <tr>\n <td>Implementation</td>\n <td><a href=\""); 301 // 312, 22 302 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bcUrl), jamonWriter); 303 // 312, 33 304 jamonWriter.write("\">"); 305 // 312, 35 306 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bc.getClass().getSimpleName()), jamonWriter); 307 // 312, 70 308 jamonWriter.write("</a></td>\n <td>Class implementing this block cache Level</td>\n </tr>\n"); 309 // 315, 1 310 if (bucketCache ) 311 { 312 // 315, 20 313 jamonWriter.write("\n <tr>\n <td>Implementation</td>\n <td>"); 314 // 318, 13 315 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(((BucketCache)bc).getIoEngine()), jamonWriter); 316 // 318, 50 317 jamonWriter.write("</a></td>\n <td>IOEngine</td>\n </tr>\n"); 318 } 319 // 321, 7 320 jamonWriter.write("\n <tr>\n <td>Cache Size Limit</td>\n <td>"); 321 // 324, 13 322 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(bc.getMaxSize(), "B", 1)), jamonWriter); 323 // 324, 79 324 jamonWriter.write("</td>\n <td>Max size of cache</td>\n </tr>\n <tr>\n <td>Block Count</td>\n <td>"); 325 // 329, 13 326 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getBlockCount())), jamonWriter); 327 // 329, 59 328 jamonWriter.write("</td>\n <td>Count of Blocks</td>\n </tr>\n"); 329 // 332, 1 330 if (!bucketCache ) 331 { 332 // 332, 21 333 jamonWriter.write("\n <tr>\n <td>Data Block Count</td>\n <td>"); 334 // 335, 13 335 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getDataBlockCount())), jamonWriter); 336 // 335, 63 337 jamonWriter.write("</td>\n <td>Count of DATA Blocks</td>\n </tr>\n"); 338 } 339 // 338, 7 340 jamonWriter.write("\n <tr>\n <td>Size of Blocks</td>\n <td>"); 341 // 341, 13 342 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(bc.getCurrentSize(), "B", 1)), jamonWriter); 343 // 341, 83 344 jamonWriter.write("</td>\n <td>Size of Blocks</td>\n </tr>\n"); 345 // 344, 1 346 if (!bucketCache ) 347 { 348 // 344, 21 349 jamonWriter.write("\n <tr>\n <td>Size of Data Blocks</td>\n <td>"); 350 // 347, 13 351 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(bc.getCurrentDataSize(), "B", 1)), jamonWriter); 352 // 347, 87 353 jamonWriter.write("</td>\n <td>Size of DATA Blocks</td>\n </tr>\n"); 354 } 355 // 350, 7 356 jamonWriter.write(" \n"); 357 // 351, 1 358 { 359 // 351, 1 360 __jamon_innerUnit__evictions_tmpl(jamonWriter, bc); 361 } 362 // 351, 31 363 jamonWriter.write("\n"); 364 // 352, 1 365 { 366 // 352, 1 367 __jamon_innerUnit__hits_tmpl(jamonWriter, bc); 368 } 369 // 352, 26 370 jamonWriter.write("\n\n"); 371 // 354, 1 372 if (bucketCache ) 373 { 374 // 354, 20 375 jamonWriter.write("\n <tr>\n <td>Hits per Second</td>\n <td>"); 376 // 357, 13 377 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucketCacheStats.getIOHitsPerSecond()), jamonWriter); 378 // 357, 56 379 jamonWriter.write("</td>\n <td>Block gets against this cache per second</td>\n </tr>\n <tr>\n <td>Time per Hit</td>\n <td>"); 380 // 362, 13 381 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucketCacheStats.getIOTimePerHit()), jamonWriter); 382 // 362, 53 383 jamonWriter.write("</td>\n <td>Time per cache hit</td>\n </tr>\n"); 384 } 385 // 365, 7 386 jamonWriter.write("\n</table>\n<p>View block cache <a href=\"?format=json&bcn="); 387 // 368, 47 388 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(name), jamonWriter); 389 // 368, 57 390 jamonWriter.write("\">as JSON</a> | Block cache <a href=\"?format=json&bcn="); 391 // 368, 111 392 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(name), jamonWriter); 393 // 368, 121 394 jamonWriter.write("&bcv=file\">as JSON by file</a></p>\n"); 395 // 369, 1 396 397cbsbf = null; 398 399 } 400 401 402 // 167, 1 403 private void __jamon_innerUnit__evictions_tmpl(final java.io.Writer jamonWriter, final BlockCache bc) 404 throws java.io.IOException 405 { 406 // 171, 1 407 408 AgeSnapshot ageAtEvictionSnapshot = bc.getStats().getAgeAtEvictionSnapshot(); 409 // Only show if non-zero mean and stddev as is the case in combinedblockcache 410 411 // 175, 5 412 jamonWriter.write("<tr>\n <td>Evicted</td>\n <td>"); 413 // 177, 13 414 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getStats().getEvictedCount())), jamonWriter); 415 // 177, 72 416 jamonWriter.write("</td>\n <td>The total number of blocks evicted</td>\n </tr>\n <tr>\n <td>Evictions</td>\n <td>"); 417 // 182, 13 418 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getStats().getEvictionCount())), jamonWriter); 419 // 182, 73 420 jamonWriter.write("</td>\n <td>The total number of times an eviction has occurred</td>\n </tr>\n <tr>\n <td>Mean</td>\n <td>"); 421 // 187, 13 422 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)ageAtEvictionSnapshot.getMean())), jamonWriter); 423 // 187, 78 424 jamonWriter.write("</td>\n <td>Mean age of Blocks at eviction time (seconds)</td>\n </tr>\n"); 425 } 426 427 428 // 192, 1 429 private void __jamon_innerUnit__hits_tmpl(final java.io.Writer jamonWriter, final BlockCache bc) 430 throws java.io.IOException 431 { 432 // 196, 5 433 jamonWriter.write("<tr>\n <td>Hits</td>\n <td>"); 434 // 198, 13 435 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getStats().getHitCount())), jamonWriter); 436 // 198, 68 437 jamonWriter.write("</td>\n <td>Number requests that were cache hits</td>\n </tr>\n <tr>\n <td>Hits Caching</td>\n <td>"); 438 // 203, 13 439 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getStats().getHitCachingCount())), jamonWriter); 440 // 203, 75 441 jamonWriter.write("</td>\n <td>Cache hit block requests but only requests set to cache block if a miss</td>\n </tr>\n <tr>\n <td>Misses</td>\n <td>"); 442 // 208, 13 443 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getStats().getMissCount())), jamonWriter); 444 // 208, 69 445 jamonWriter.write("</td>\n <td>Block requests that were cache misses but set to cache missed blocks</td>\n </tr>\n <tr>\n <td>Misses Caching</td>\n <td>"); 446 // 213, 13 447 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", bc.getStats().getMissCount())), jamonWriter); 448 // 213, 69 449 jamonWriter.write("</td>\n <td>Block requests that were cache misses but only requests set to use block cache</td>\n </tr>\n <tr>\n <td>Hit Ratio</td>\n <td>"); 450 // 218, 13 451 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,.2f", bc.getStats().getHitRatio() * 100)), jamonWriter); 452 // 218, 76 453 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf("%"), jamonWriter); 454 // 218, 85 455 jamonWriter.write("</td>\n <td>Hit Count divided by total requests count</td>\n </tr>\n\n"); 456 } 457 458 459}