View Javadoc

1   // Autogenerated Jamon implementation
2   // /wrkdirs/usr/ports/databases/hbase/work/hbase-0.98.4/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/BlockCacheTmpl.jamon
3   
4   package org.apache.hadoop.hbase.tmpl.regionserver;
5   
6   // 35, 1
7   import java.util.Map;
8   // 36, 1
9   import org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.CachedBlocksByFile;
10  // 37, 1
11  import org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.AgeSnapshot;
12  // 38, 1
13  import org.apache.hadoop.hbase.io.hfile.CachedBlock;
14  // 39, 1
15  import org.apache.hadoop.conf.Configuration;
16  // 40, 1
17  import org.apache.hadoop.hbase.io.hfile.CacheConfig;
18  // 41, 1
19  import org.apache.hadoop.hbase.io.hfile.BlockCache;
20  // 42, 1
21  import org.apache.hadoop.hbase.io.hfile.bucket.BucketCacheStats;
22  // 43, 1
23  import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;
24  // 44, 1
25  import org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator;
26  // 45, 1
27  import org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator.Bucket;
28  // 46, 1
29  import org.apache.hadoop.hbase.io.hfile.slab.SlabCache;
30  // 47, 1
31  import org.apache.hadoop.hbase.io.hfile.slab.SingleSizeCache;
32  // 48, 1
33  import org.apache.hadoop.util.StringUtils;
34  
35  public class BlockCacheTmplImpl
36    extends org.jamon.AbstractTemplateImpl
37    implements org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.Intf
38  
39  {
40    private final CacheConfig cacheConfig;
41    private final Configuration config;
42    protected static org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.ImplData p_implData)
43    {
44      return p_implData;
45    }
46    public BlockCacheTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl.ImplData p_implData)
47    {
48      super(p_templateManager, __jamon_setOptionalArguments(p_implData));
49      cacheConfig = p_implData.getCacheConfig();
50      config = p_implData.getConfig();
51    }
52    
53    public void renderNoFlush(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
54      throws java.io.IOException
55    {
56      // 24, 1
57      
58    BlockCache bc = cacheConfig == null? null: cacheConfig.getBlockCache();
59    String bcUrl = null;
60    String bcName = null;
61    if (bc != null) {
62      bcUrl = "http://hbase.apache.org/devapidocs/" + bc.getClass().getName().replaceAll("\\.", "/") + ".html";
63      bcName = bc.getClass().getSimpleName();
64    }
65    BlockCache [] bcs = cacheConfig == null? null: cacheConfig.getBlockCache() == null? null: cacheConfig.getBlockCache().getBlockCaches();
66  
67      // 50, 1
68      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            ");
69      // 60, 13
70      {
71        // 60, 13
72        __jamon_innerUnit__bc_baseInfo(jamonWriter, cacheConfig, bcUrl, bcName);
73      }
74      // 60, 91
75      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_bc_config\">\n            ");
76      // 63, 13
77      {
78        // 63, 13
79        __jamon_innerUnit__bc_config(jamonWriter, cacheConfig );
80      }
81      // 63, 55
82      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_bc_stats\">\n            ");
83      // 66, 13
84      {
85        // 66, 13
86        __jamon_innerUnit__bc_stats(jamonWriter, cacheConfig );
87      }
88      // 66, 54
89      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_bc_l1\">\n            ");
90      // 69, 13
91      {
92        // 69, 13
93        __jamon_innerUnit__bc_l(jamonWriter, bcs == null? bc: bcs[0], "L1" );
94      }
95      // 69, 66
96      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_bc_l2\">\n            ");
97      // 72, 13
98      {
99        // 72, 13
100       __jamon_innerUnit__bc_l(jamonWriter, bcs == null? null: bcs.length <= 1? null: bcs[1], "L2"  );
101     }
102     // 72, 92
103     jamonWriter.write("\n        </div>\n    </div>\n</div>\n\n");
104   }
105   
106   
107   // 173, 1
108   private void __jamon_innerUnit__bc_stats(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final CacheConfig cacheConfig)
109     throws java.io.IOException
110   {
111     // 177, 1
112     if (cacheConfig == null )
113     {
114       // 177, 28
115       jamonWriter.write("\n<p>CacheConfig is null</p>\n");
116     }
117     // 179, 1
118     else
119     {
120       // 179, 8
121       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>");
122       // 188, 13
123       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(cacheConfig.getBlockCache().size())), jamonWriter);
124       // 188, 83
125       jamonWriter.write("</td>\n        <td>Total size of Block Cache (bytes)</td>\n    </tr>\n    <tr>\n        <td>Free</td>\n        <td>");
126       // 193, 13
127       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(cacheConfig.getBlockCache().getFreeSize())), jamonWriter);
128       // 193, 90
129       jamonWriter.write("</td>\n        <td>Free space in Block Cache (bytes)</td>\n    </tr>\n    <tr>\n        <td>Count</td>\n        <td>");
130       // 198, 13
131       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getBlockCount())), jamonWriter);
132       // 198, 84
133       jamonWriter.write("</td>\n        <td>Number of blocks in Block Cache</td>\n    </tr>\n    <tr>\n        <td>Evicted</td>\n        <td>");
134       // 203, 13
135       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getStats().getEvictedCount())), jamonWriter);
136       // 203, 97
137       jamonWriter.write("</td>\n        <td>Number of blocks evicted</td>\n    </tr>\n    <tr>\n        <td>Evictions</td>\n        <td>");
138       // 208, 13
139       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getStats().getEvictionCount())), jamonWriter);
140       // 208, 98
141       jamonWriter.write("</td>\n        <td>Number of times an eviction occurred</td>\n    </tr>\n    <tr>\n        <td>Hits</td>\n        <td>");
142       // 213, 13
143       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getStats().getHitCount())), jamonWriter);
144       // 213, 93
145       jamonWriter.write("</td>\n        <td>Number requests that were cache hits</td>\n    </tr>\n    <tr>\n        <td>Hits Caching</td>\n        <td>");
146       // 218, 13
147       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getStats().getHitCachingCount())), jamonWriter);
148       // 218, 100
149       jamonWriter.write("</td>\n        <td>Cache hit block requests but only requests set to use Block Cache</td>\n    </tr>\n    <tr>\n        <td>Misses</td>\n        <td>");
150       // 223, 13
151       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getStats().getMissCount())), jamonWriter);
152       // 223, 94
153       jamonWriter.write("</td>\n        <td>Number of requests that were cache misses</td>\n    </tr>\n    <tr>\n        <td>Misses Caching</td>\n        <td>");
154       // 228, 13
155       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cacheConfig.getBlockCache().getStats().getMissCount())), jamonWriter);
156       // 228, 94
157       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>");
158       // 233, 13
159       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,.2f", cacheConfig.getBlockCache().getStats().getHitRatio() * 100)), jamonWriter);
160       // 233, 101
161       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf("%"), jamonWriter);
162       // 233, 110
163       jamonWriter.write("</td>\n        <td>Hit Count divided by total requests count</td>\n    </tr>\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");
164     }
165     // 239, 7
166     jamonWriter.write("\n");
167   }
168   
169   
170   // 119, 1
171   private void __jamon_innerUnit__bc_config(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final CacheConfig cacheConfig)
172     throws java.io.IOException
173   {
174     // 123, 1
175     if (cacheConfig == null )
176     {
177       // 123, 28
178       jamonWriter.write("\n<p>CacheConfig is null</p>\n");
179     }
180     // 125, 1
181     else
182     {
183       // 125, 8
184       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>");
185       // 134, 13
186       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheDataOnRead()), jamonWriter);
187       // 134, 54
188       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>");
189       // 140, 13
190       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheDataOnWrite()), jamonWriter);
191       // 140, 55
192       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>");
193       // 145, 13
194       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheIndexesOnWrite()), jamonWriter);
195       // 145, 58
196       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>");
197       // 150, 13
198       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheBloomsOnWrite()), jamonWriter);
199       // 150, 57
200       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>");
201       // 155, 13
202       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldEvictOnClose()), jamonWriter);
203       // 155, 51
204       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>Compress blocks</td>\n        <td>");
205       // 161, 13
206       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldCacheCompressed()), jamonWriter);
207       // 161, 54
208       jamonWriter.write("</td>\n        <td>True if blocks are compressed in cache</td>\n    </tr>\n    <tr>\n        <td>Prefetch on Open</td>\n        <td>");
209       // 166, 13
210       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(cacheConfig.shouldPrefetchOnOpen()), jamonWriter);
211       // 166, 53
212       jamonWriter.write("</td>\n        <td>True if blocks are prefetched into cache on open</td>\n    </tr>\n</table>\n");
213     }
214     // 170, 7
215     jamonWriter.write("\n");
216   }
217   
218   
219   // 77, 1
220   private void __jamon_innerUnit__bc_baseInfo(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final CacheConfig cacheConfig, final String bcUrl, final String bcName)
221     throws java.io.IOException
222   {
223     // 83, 1
224     
225   BlockCache bc = cacheConfig == null? null: cacheConfig.getBlockCache();
226   BlockCache [] bcs = bc == null? null: bc.getBlockCaches();
227   String bcl1Url = null;
228   String bcl1Name = null;
229   String bcl2Url = null;
230   String bcl2Name = null;
231   if (bcs != null) {
232     BlockCache bcl1 = bcs[0];
233     if (bcl1 != null) {
234       bcl1Url = "http://hbase.apache.org/devapidocs/" + bcl1.getClass().getName().replaceAll("\\.", "/") + ".html";
235       bcl1Name = bcl1.getClass().getSimpleName();
236     }
237     if (bcs.length == 2) {
238       BlockCache bcl2 = bcs[1];
239       bcl2Url = "http://hbase.apache.org/devapidocs/" + bcl2.getClass().getName().replaceAll("\\.", "/") + ".html";
240       bcl2Name = bcl2.getClass().getSimpleName();
241     }
242   }
243 
244     // 103, 1
245     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=\"");
246     // 112, 22
247     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bcUrl), jamonWriter);
248     // 112, 33
249     jamonWriter.write("\">");
250     // 112, 35
251     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bcName), jamonWriter);
252     // 112, 47
253     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");
254   }
255   
256   
257   // 254, 1
258   private void __jamon_innerUnit__block_cache(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final BlockCache bc, final String name)
259     throws java.io.IOException
260   {
261     // 259, 1
262     
263   final long nanosPerSecond = 1000000000;
264   String bcUrl = "http://hbase.apache.org/devapidocs/" + bc.getClass().getName().replaceAll("\\.", "/") + ".html";
265   String bcName = bc.getClass().getSimpleName();
266   org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.CachedBlocksByFile cbsbf =
267     org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.getLoadedCachedBlocksByFile(config, bc);
268   AgeSnapshot snapshot = cbsbf.getAgeSnapshot();
269 
270   boolean slabCache = bc.getClass().getSimpleName().equals("SlabCache");
271   Map<Integer, SingleSizeCache> sizer = null;
272 
273   boolean bucketCache = bc.getClass().getSimpleName().equals("BucketCache");
274   BucketCacheStats bucketCacheStats = null;
275   BucketAllocator bucketAllocator = null;
276   Bucket [] buckets = null;
277 
278   if (slabCache) {
279     sizer = ((SlabCache)bc).getSizer();
280   } else if (bucketCache) {
281     bucketCacheStats = (BucketCacheStats)bc.getStats();
282     bucketAllocator = ((BucketCache)bc).getAllocator();
283     buckets = bucketAllocator.getBuckets();
284   }
285 
286     // 283, 1
287     if (cbsbf.isFull() )
288     {
289       // 283, 23
290       jamonWriter.write("\n<p><b>Too many blocks!</b> Listing out the first ");
291       // 284, 50
292       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(snapshot.getMax()), jamonWriter);
293       // 284, 73
294       jamonWriter.write(" only (hbase.ui.blockcache.by.file.max)</p> \n");
295     }
296     // 285, 7
297     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=\"");
298     // 294, 22
299     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bcUrl), jamonWriter);
300     // 294, 33
301     jamonWriter.write("\">");
302     // 294, 35
303     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bc.getClass().getSimpleName()), jamonWriter);
304     // 294, 70
305     jamonWriter.write("</a></td>\n        <td>Class implementing this Block Cache Level</td>\n    </tr>\n");
306     // 297, 1
307     if (bucketCache )
308     {
309       // 297, 20
310       jamonWriter.write("\n    <tr>\n        <td>Implementation</td>\n        <td>");
311       // 300, 13
312       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(((BucketCache)bc).getIoEngine()), jamonWriter);
313       // 300, 50
314       jamonWriter.write("</a></td>\n        <td>IOEngine</td>\n    </tr>\n");
315     }
316     // 303, 7
317     jamonWriter.write("\n    <tr>\n        <td>Count</td>\n        <td>");
318     // 306, 13
319     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cbsbf.getCount())), jamonWriter);
320     // 306, 57
321     jamonWriter.write("</td>\n        <td>Count of Blocks</td>\n    </tr>\n");
322     // 309, 1
323     if (!bucketCache )
324     {
325       // 309, 21
326       jamonWriter.write("\n    <tr>\n        <td>Count</td>\n        <td>");
327       // 312, 13
328       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", cbsbf.getDataCount())), jamonWriter);
329       // 312, 61
330       jamonWriter.write("</td>\n        <td>Count of DATA Blocks</td>\n    </tr>\n");
331     }
332     // 315, 7
333     jamonWriter.write("\n    <tr>\n        <td>Size</td>\n        <td>");
334     // 318, 13
335     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(cbsbf.getSize())), jamonWriter);
336     // 318, 64
337     jamonWriter.write("</td>\n        <td>Size of Blocks</td>\n    </tr>\n");
338     // 321, 1
339     if (!bucketCache )
340     {
341       // 321, 21
342       jamonWriter.write("\n    <tr>\n        <td>Size</td>\n        <td>");
343       // 324, 13
344       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(cbsbf.getDataSize())), jamonWriter);
345       // 324, 68
346       jamonWriter.write("</td>\n        <td>Size of DATA Blocks</td>\n    </tr>\n");
347     }
348     // 327, 7
349     jamonWriter.write("\n");
350     // 329, 1
351     if (!slabCache )
352     {
353       // 329, 19
354       jamonWriter.write("\n    <tr>\n        <td>Mean</td>\n        <td>");
355       // 332, 13
356       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)(snapshot.getMean()/nanosPerSecond))), jamonWriter);
357       // 332, 82
358       jamonWriter.write("</td>\n        <td>Mean age of Blocks in cache (seconds)</td>\n    </tr>\n    <tr>\n        <td>StdDev</td>\n        <td>");
359       // 337, 13
360       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)(snapshot.getStdDev()/nanosPerSecond))), jamonWriter);
361       // 337, 84
362       jamonWriter.write("</td>\n        <td>Age standard deviation of Blocks in cache</td>\n    </tr>\n    <tr>\n        <td>Min</td>\n        <td>");
363       // 342, 13
364       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)(snapshot.getMin()/nanosPerSecond))), jamonWriter);
365       // 342, 81
366       jamonWriter.write("</td>\n        <td>Min age of Blocks in cache (seconds)</td>\n    </tr>\n    <tr>\n        <td>Max</td>\n        <td>");
367       // 347, 13
368       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)(snapshot.getMax()/nanosPerSecond))), jamonWriter);
369       // 347, 81
370       jamonWriter.write("</td>\n        <td>Max age of Blocks in cache (seconds)</td>\n    </tr>\n    <tr>\n        <td>95th Percentile</td>\n        <td>");
371       // 352, 13
372       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)(snapshot.get95thPercentile()/nanosPerSecond))), jamonWriter);
373       // 352, 92
374       jamonWriter.write("</td>\n        <td>95th percentile of age of Blocks in cache (seconds)</td>\n    </tr>\n    <tr>\n        <td>99th Percentile</td>\n        <td>");
375       // 357, 13
376       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,d", (long)(snapshot.get99thPercentile()/nanosPerSecond))), jamonWriter);
377       // 357, 92
378       jamonWriter.write("</td>\n        <td>99th percentile of age of Blocks in cache (seconds)</td>\n    </tr>\n");
379     }
380     // 360, 7
381     jamonWriter.write("\n");
382     // 361, 1
383     if (bucketCache )
384     {
385       // 361, 20
386       jamonWriter.write("\n    <tr>\n        <td>Hits per Second</td>\n        <td>");
387       // 364, 13
388       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucketCacheStats.getIOHitsPerSecond()), jamonWriter);
389       // 364, 56
390       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>");
391       // 369, 13
392       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucketCacheStats.getIOTimePerHit()), jamonWriter);
393       // 369, 53
394       jamonWriter.write("</td>\n        <td>Time per cache hit</td>\n    </tr>\n");
395     }
396     // 372, 7
397     jamonWriter.write("\n</table>\n<p>View Block Cache <a href=\"?format=json&bcn=");
398     // 375, 47
399     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(name), jamonWriter);
400     // 375, 57
401     jamonWriter.write("\">as JSON</a> | Block Cache <a href=\"?format=json&bcn=");
402     // 375, 111
403     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(name), jamonWriter);
404     // 375, 121
405     jamonWriter.write("&bcv=file\">as JSON by file</a></p>\n");
406     // 376, 1
407     if (bucketCache )
408     {
409       // 376, 20
410       jamonWriter.write("\n<p>BucketCache does not discern between DATA and META blocks so we do not show DATA counts (If deploy is using CombinedBlockCache, BucketCache is only DATA blocks</p>\n<h3>BucketCache Buckets</h3>\n<table class=\"table table-striped\">\n    <tr>\n        <th>Bucket Offset</th>\n        <th>Allocation Size</th>\n        <th>Free Count</th>\n        <th>Used Count</th>\n    </tr>\n");
411       // 386, 1
412       for (Bucket bucket: buckets )
413       {
414         // 386, 32
415         jamonWriter.write("\n    <tr>\n        <td>");
416         // 388, 13
417         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucket.getBaseOffset()), jamonWriter);
418         // 388, 41
419         jamonWriter.write("</td>\n        <td>");
420         // 389, 13
421         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucket.getItemAllocationSize()), jamonWriter);
422         // 389, 49
423         jamonWriter.write("</td>\n        <td>");
424         // 390, 13
425         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucket.getFreeBytes()), jamonWriter);
426         // 390, 40
427         jamonWriter.write("</td>\n        <td>");
428         // 391, 13
429         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(bucket.getUsedBytes()), jamonWriter);
430         // 391, 40
431         jamonWriter.write("</td>\n    </tr>\n");
432       }
433       // 393, 8
434       jamonWriter.write("\n</table>\n");
435     }
436     // 395, 1
437     else if (slabCache )
438     {
439       // 395, 22
440       jamonWriter.write("\n<p>SlabCache does not keep account of block ages so can not show stats on how long blocks have been cached.</p>\n<h3>SlabCache Slabs</h3>\n<table class=\"table table-striped\">\n    <tr>\n        <th>Block Size</th>\n        <th>Size</th>\n        <th>Free Size</th>\n        <th>Count</th>\n        <th>Evicted</th>\n        <th>Evictions</th>\n        <th>Hits</th>\n        <th>Caching</th>\n        <th>Misses</th>\n        <th>Caching</th>\n        <th>Hit Ratio</th>\n    </tr>\n");
441       // 412, 1
442       for (Map.Entry<Integer, SingleSizeCache> e: sizer.entrySet() )
443       {
444         // 412, 65
445         jamonWriter.write("\n    <tr>\n        <td>");
446         // 414, 13
447         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getKey())), jamonWriter);
448         // 414, 59
449         jamonWriter.write("</td>\n        <td>");
450         // 415, 13
451         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().size())), jamonWriter);
452         // 415, 68
453         jamonWriter.write("</td>\n        <td>");
454         // 416, 13
455         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getFreeSize())), jamonWriter);
456         // 416, 75
457         jamonWriter.write("</td>\n        <td>");
458         // 417, 13
459         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getBlockCount())), jamonWriter);
460         // 417, 77
461         jamonWriter.write("</td>\n        <td>");
462         // 418, 13
463         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getStats().getEvictedCount())), jamonWriter);
464         // 418, 90
465         jamonWriter.write("</td>\n        <td>");
466         // 419, 13
467         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getStats().getEvictionCount())), jamonWriter);
468         // 419, 91
469         jamonWriter.write("</td>\n        <td>");
470         // 420, 13
471         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getStats().getHitCount())), jamonWriter);
472         // 420, 86
473         jamonWriter.write("</td>\n        <td>");
474         // 421, 13
475         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getStats().getHitCachingCount())), jamonWriter);
476         // 421, 93
477         jamonWriter.write("</td>\n        <td>");
478         // 422, 13
479         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getStats().getMissCount())), jamonWriter);
480         // 422, 87
481         jamonWriter.write("</td>\n        <td>");
482         // 423, 13
483         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(e.getValue().getStats().getMissCachingCount())), jamonWriter);
484         // 423, 94
485         jamonWriter.write("</td>\n        <td>");
486         // 424, 13
487         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%,.2f", e.getValue().getStats().getHitRatio() * 100)), jamonWriter);
488         // 424, 86
489         org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf("%"), jamonWriter);
490         // 424, 95
491         jamonWriter.write("</td>\n    </tr>\n");
492       }
493       // 426, 8
494       jamonWriter.write("\n</table>\n");
495     }
496     // 428, 7
497     jamonWriter.write("\n");
498     // 429, 1
499     
500 cbsbf = null;
501 
502   }
503   
504   
505   // 242, 1
506   private void __jamon_innerUnit__bc_l(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final BlockCache bc, final String name)
507     throws java.io.IOException
508   {
509     // 247, 1
510     if (bc == null )
511     {
512       // 247, 19
513       jamonWriter.write("\n<p>No ");
514       // 248, 7
515       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(name), jamonWriter);
516       // 248, 17
517       jamonWriter.write(" deployed</p>\n");
518     }
519     // 249, 1
520     else
521     {
522       // 249, 8
523       jamonWriter.write("\n");
524       // 250, 1
525       {
526         // 250, 1
527         __jamon_innerUnit__block_cache(jamonWriter, bc, name);
528       }
529       // 250, 42
530       jamonWriter.write("\n");
531     }
532     // 251, 7
533     jamonWriter.write("\n");
534   }
535   
536   
537 }