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.TraditionalBinaryPrefix;
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__storeStats(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\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>");
111
112 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumStores()), jamonWriter);
113
114 jamonWriter.write("</td>\n <td>");
115
116 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumStoreFiles()), jamonWriter);
117
118 jamonWriter.write("</td>\n <td>");
119
120 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(mWrap.getStoreFileIndexSize(), "B", 1)), jamonWriter);
121
122 jamonWriter.write("</td>\n <td>");
123
124 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(mWrap.getTotalStaticIndexSize(), "B", 1)), jamonWriter);
125
126 jamonWriter.write("</td>\n <td>");
127
128 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(mWrap.getTotalStaticBloomSize(), "B", 1)), jamonWriter);
129
130 jamonWriter.write("</td>\n</tr>\n</table>\n");
131 }
132
133
134
135 private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
136 throws java.io.IOException
137 {
138
139 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>");
140
141 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);
142
143 jamonWriter.write("</td>\n <td>");
144
145 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getReadRequestsCount()), jamonWriter);
146
147 jamonWriter.write("</td>\n <td>");
148
149 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWriteRequestsCount()), jamonWriter);
150
151 jamonWriter.write("</td>\n</tr>\n</table>\n");
152 }
153
154
155
156 private void __jamon_innerUnit__memoryStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
157 throws java.io.IOException
158 {
159
160 long usedHeap = -1L;
161 long maxHeap = -1L;
162 final MemoryUsage usage = HeapMemorySizeUtil.safeGetHeapMemoryUsage();
163 if (usage != null) {
164 maxHeap = usage.getMax();
165 usedHeap = usage.getUsed();
166 }
167
168
169 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 ");
170
171 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(usedHeap, "B", 1)), jamonWriter);
172
173 jamonWriter.write("\n </td>\n <td>\n ");
174
175 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(maxHeap, "B", 1)), jamonWriter);
176
177 jamonWriter.write("\n </td>\n <td>\n ");
178
179 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(DirectMemoryUtils.getDirectMemoryUsage(), "B", 1)), jamonWriter);
180
181 jamonWriter.write("\n </td>\n <td>\n ");
182
183 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(DirectMemoryUtils.getDirectMemorySize(), "B", 1)), jamonWriter);
184
185 jamonWriter.write("\n </td>\n <td>\n ");
186
187 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(mWrap.getMemstoreSize(), "B", 1)), jamonWriter);
188
189 jamonWriter.write("\n </td>\n</tr>\n</table>\n");
190 }
191
192
193
194 private void __jamon_innerUnit__walStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
195 throws java.io.IOException
196 {
197
198 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>");
199
200 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumWALFiles()), jamonWriter);
201
202 jamonWriter.write("</td>\n <td>");
203
204 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(mWrap.getWALFileSize(), "B", 1)), jamonWriter);
205
206 jamonWriter.write("</td>\n</tr>\n</table>\n");
207 }
208
209
210
211 private void __jamon_innerUnit__baseStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)
212 throws java.io.IOException
213 {
214
215 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>");
216
217 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);
218
219 jamonWriter.write("</td>\n <td>");
220
221 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumOnlineRegions()), jamonWriter);
222
223 jamonWriter.write("</td>\n <td>");
224
225 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocal()), jamonWriter);
226
227 jamonWriter.write("</td>\n <td>");
228
229 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocalSecondaryRegions()), jamonWriter);
230
231 jamonWriter.write("</td>\n <td>");
232
233 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(0), jamonWriter);
234
235 jamonWriter.write("</td>\n </tr>\n</table>\n");
236 }
237
238
239
240 private void __jamon_innerUnit__queueStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)
241 throws java.io.IOException
242 {
243
244 jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n <th>Compaction Queue Length</th>\n <th>Flush Queue Length</th>\n <th>Priority Call Queue Length</th>\n <th>General Call Queue Length</th>\n <th>Replication Call Queue Length</th>\n <th>Total Call Queue Size (bytes)</th>\n\n</tr>\n<tr>\n <td>");
245
246 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getCompactionQueueSize()), jamonWriter);
247
248 jamonWriter.write("</td>\n <td>");
249
250 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getFlushQueueSize()), jamonWriter);
251
252 jamonWriter.write("</td>\n <td>");
253
254 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mServerWrap.getPriorityQueueLength()), jamonWriter);
255
256 jamonWriter.write("</td>\n <td>");
257
258 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mServerWrap.getGeneralQueueLength()), jamonWriter);
259
260 jamonWriter.write("</td>\n <td>");
261
262 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mServerWrap.getReplicationQueueLength()), jamonWriter);
263
264 jamonWriter.write("</td>\n <td>");
265
266 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(mServerWrap.getTotalQueueSize(), "B", 1)), jamonWriter);
267
268 jamonWriter.write("</td>\n</tr>\n</table>\n");
269 }
270
271
272 }