1   
2   
3   
4   package org.apache.hadoop.hbase.tmpl.regionserver;
5   
6   
7   import java.util.*;
8   
9   import org.apache.hadoop.hbase.regionserver.HRegionServer;
10  
11  import org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper;
12  
13  import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;
14  
15  import org.apache.hadoop.hbase.util.Bytes;
16  
17  import org.apache.hadoop.hbase.HRegionInfo;
18  
19  import org.apache.hadoop.hbase.ServerName;
20  
21  import org.apache.hadoop.hbase.HBaseConfiguration;
22  
23  import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
24  
25  import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;
26  
27  import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;
28  
29  import org.apache.hadoop.hbase.util.DirectMemoryUtils;
30  
31  import org.apache.hadoop.util.StringUtils;
32  
33  import java.lang.management.MemoryUsage;
34  
35  import org.apache.hadoop.hbase.io.util.HeapMemorySizeUtil;
36  
37  public class ServerMetricsTmplImpl
38    extends org.jamon.AbstractTemplateImpl
39    implements org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.Intf
40  
41  {
42    private final MetricsRegionServerWrapper mWrap;
43    private final MetricsHBaseServerWrapper mServerWrap;
44    protected static org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData p_implData)
45    {
46      return p_implData;
47    }
48    public ServerMetricsTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData p_implData)
49    {
50      super(p_templateManager, __jamon_setOptionalArguments(p_implData));
51      mWrap = p_implData.getMWrap();
52      mServerWrap = p_implData.getMServerWrap();
53    }
54    
55    @Override public void renderNoFlush(final java.io.Writer jamonWriter)
56      throws java.io.IOException
57    {
58      
59      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_walStats\" data-toggle=\"tab\">WALs</a></li>\n        <li class=\"\"><a href=\"#tab_storeStats\" data-toggle=\"tab\">Storefiles</a></li>\n        <li class=\"\"><a href=\"#tab_queueStats\" data-toggle=\"tab\">Queues</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            ");
60      
61      {
62        
63        __jamon_innerUnit__baseStats(jamonWriter, mWrap );
64      }
65      
66      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_memoryStats\">\n            ");
67      
68      {
69        
70        __jamon_innerUnit__memoryStats(jamonWriter, mWrap );
71      }
72      
73      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_requestStats\">\n            ");
74      
75      {
76        
77        __jamon_innerUnit__requestStats(jamonWriter, mWrap );
78      }
79      
80      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_walStats\">\n            ");
81      
82      {
83        
84        __jamon_innerUnit__walStats(jamonWriter, mWrap );
85      }
86      
87      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_storeStats\">\n            ");
88      
89      {
90        
91        __jamon_innerUnit__storeStats(jamonWriter, mWrap );
92      }
93      
94      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_queueStats\">\n            ");
95      
96      {
97        
98        __jamon_innerUnit__queueStats(jamonWriter, mWrap, mServerWrap);
99      }
100     
101     jamonWriter.write("\n        </div>\n    </div>\n</div>\n\n");
102   }
103   
104   
105   
106   private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
107     throws java.io.IOException
108   {
109     
110     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>Request Per Second</th>\n    <th>Read Request Count</th>\n    <th>Write Request Count</th>\n</tr>\n<tr>\n    <td>");
111     
112     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);
113     
114     jamonWriter.write("</td>\n    <td>");
115     
116     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getReadRequestsCount()), jamonWriter);
117     
118     jamonWriter.write("</td>\n    <td>");
119     
120     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWriteRequestsCount()), jamonWriter);
121     
122     jamonWriter.write("</td>\n</tr>\n</table>\n");
123   }
124   
125   
126   
127   private void __jamon_innerUnit__queueStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)
128     throws java.io.IOException
129   {
130     
131     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>Compaction Queue Size</th>\n    <th>Flush Queue Size</th>\n    <th>Call Queue Size (bytes)</th>\n\n</tr>\n<tr>\n    <td>");
132     
133     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getCompactionQueueSize()), jamonWriter);
134     
135     jamonWriter.write("</td>\n    <td>");
136     
137     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getFlushQueueSize()), jamonWriter);
138     
139     jamonWriter.write("</td>\n    <td>");
140     
141     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.TraditionalBinaryPrefix.long2String(mServerWrap.getTotalQueueSize(),
142       "", 1)), jamonWriter);
143     
144     jamonWriter.write("</td>\n</tr>\n</table>\n");
145   }
146   
147   
148   
149   private void __jamon_innerUnit__memoryStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
150     throws java.io.IOException
151   {
152     
153     long usedHeap = -1L;
154   long maxHeap = -1L;
155   final MemoryUsage usage = HeapMemorySizeUtil.safeGetHeapMemoryUsage();
156   if (usage != null) {
157     maxHeap = usage.getMax();
158     usedHeap = usage.getUsed();
159   }
160 
161     
162     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <tr>\n        <th>Used Heap</th>\n        <th>Max Heap</th>\n        <th>Direct Memory Used</th>\n        <th>Direct Memory Configured</th>\n        <th>Memstore Size</th>\n    </tr>\n</tr>\n<tr>\n    <td>\n        ");
163     
164     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(usedHeap)), jamonWriter);
165     
166     jamonWriter.write("\n    </td>\n    <td>\n        ");
167     
168     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(maxHeap)), jamonWriter);
169     
170     jamonWriter.write("\n    </td>\n    <td>\n        ");
171     
172     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(DirectMemoryUtils.getDirectMemoryUsage())), jamonWriter);
173     
174     jamonWriter.write("\n    </td>\n    <td>\n        ");
175     
176     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(DirectMemoryUtils.getDirectMemorySize())), jamonWriter);
177     
178     jamonWriter.write("\n    </td>\n    <td>");
179     
180     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getMemstoreSize())), jamonWriter);
181     
182     jamonWriter.write("</td>\n</tr>\n</table>\n");
183   }
184   
185   
186   
187   private void __jamon_innerUnit__baseStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
188     throws java.io.IOException
189   {
190     
191     jamonWriter.write("<table class=\"table table-striped\">\n    <tr>\n\n        <th>Requests Per Second</th>\n        <th>Num. Regions</th>\n        <th>Block locality</th>\n        <th>Block locality (Secondary replicas)</th>\n        <th>Slow WAL Append Count</th>\n    </tr>\n    <tr>\n        <td>");
192     
193     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);
194     
195     jamonWriter.write("</td>\n        <td>");
196     
197     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumOnlineRegions()), jamonWriter);
198     
199     jamonWriter.write("</td>\n        <td>");
200     
201     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocal()), jamonWriter);
202     
203     jamonWriter.write("</td>\n        <td>");
204     
205     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocalSecondaryRegions()), jamonWriter);
206     
207     jamonWriter.write("</td>\n        <td>");
208     
209     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(0), jamonWriter);
210     
211     jamonWriter.write("</td>\n    </tr>\n</table>\n");
212   }
213   
214   
215   
216   private void __jamon_innerUnit__walStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
217     throws java.io.IOException
218   {
219     
220     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <tr>\n        <th>Num. WAL Files</th>\n        <th>Size. WAL Files (bytes)</th>\n    </tr>\n</tr>\n<tr>\n    <td>");
221     
222     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumWALFiles()), jamonWriter);
223     
224     jamonWriter.write("</td>\n    <td>");
225     
226     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWALFileSize()), jamonWriter);
227     
228     jamonWriter.write("</td>\n</tr>\n</table>\n");
229   }
230   
231   
232   
233   private void __jamon_innerUnit__storeStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
234     throws java.io.IOException
235   {
236     
237     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n\n    <th>Num. Stores</th>\n    <th>Num. Storefiles</th>\n    <th>Root Index Size (bytes)</th>\n    <th>Index Size (bytes)</th>\n    <th>Bloom Size (bytes)</th>\n</tr>\n<tr>\n    <td>");
238     
239     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getNumStores())), jamonWriter);
240     
241     jamonWriter.write("</td>\n    <td>");
242     
243     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getNumStoreFiles())), jamonWriter);
244     
245     jamonWriter.write("</td>\n    <td>");
246     
247     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getStoreFileIndexSize())), jamonWriter);
248     
249     jamonWriter.write("</td>\n    <td>");
250     
251     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getTotalStaticIndexSize())), jamonWriter);
252     
253     jamonWriter.write("</td>\n    <td>");
254     
255     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getTotalStaticBloomSize())), jamonWriter);
256     
257     jamonWriter.write("</td>\n</tr>\n</table>\n");
258   }
259   
260   
261 }