1   
2   
3   
4   package org.apache.hadoop.hbase.tmpl.master;
5   
6   
7   import java.util.*;
8   
9   import org.apache.hadoop.util.StringUtils;
10  
11  import org.apache.hadoop.hbase.util.Bytes;
12  
13  import org.apache.hadoop.hbase.util.JvmVersion;
14  
15  import org.apache.hadoop.hbase.util.FSUtils;
16  
17  import org.apache.hadoop.hbase.master.HMaster;
18  
19  import org.apache.hadoop.hbase.HConstants;
20  
21  import org.apache.hadoop.hbase.ServerLoad;
22  
23  import org.apache.hadoop.hbase.ServerName;
24  
25  import org.apache.hadoop.hbase.client.HBaseAdmin;
26  
27  import org.apache.hadoop.hbase.client.HConnectionManager;
28  
29  import org.apache.hadoop.hbase.HTableDescriptor;
30  
31  import org.apache.hadoop.hbase.HBaseConfiguration;
32  
33  public class RegionServerListTmplImpl
34    extends org.jamon.AbstractTemplateImpl
35    implements org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.Intf
36  
37  {
38    private final HMaster master;
39    private final List<ServerName> servers;
40    protected static org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.ImplData p_implData)
41    {
42      if(! p_implData.getServers__IsNotDefault())
43      {
44        p_implData.setServers(null);
45      }
46      return p_implData;
47    }
48    public RegionServerListTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.RegionServerListTmpl.ImplData p_implData)
49    {
50      super(p_templateManager, __jamon_setOptionalArguments(p_implData));
51      master = p_implData.getMaster();
52      servers = p_implData.getServers();
53    }
54    
55    public void renderNoFlush(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
56      throws java.io.IOException
57    {
58      
59      if ((servers != null && servers.size() > 0))
60      {
61        
62        jamonWriter.write("\n\n");
63        
64        
65  ServerName [] serverNames = servers.toArray(new ServerName[servers.size()]);
66  Arrays.sort(serverNames);
67  
68        
69        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_storeStats\" data-toggle=\"tab\">Storefiles</a></li>\n        <li class=\"\"><a href=\"#tab_compactStas\" data-toggle=\"tab\">Compactions</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            ");
70        
71        {
72          
73          __jamon_innerUnit__baseStats(jamonWriter, serverNames);
74        }
75        
76        jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_memoryStats\">\n            ");
77        
78        {
79          
80          __jamon_innerUnit__memoryStats(jamonWriter, serverNames);
81        }
82        
83        jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_requestStats\">\n            ");
84        
85        {
86          
87          __jamon_innerUnit__requestStats(jamonWriter, serverNames);
88        }
89        
90        jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_storeStats\">\n            ");
91        
92        {
93          
94          __jamon_innerUnit__storeStats(jamonWriter, serverNames);
95        }
96        
97        jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_compactStas\">\n            ");
98        
99        {
100         
101         __jamon_innerUnit__compactionStats(jamonWriter, serverNames);
102       }
103       
104       jamonWriter.write("\n        </div>\n    </div>\n</div>\n\n");
105     }
106     
107     jamonWriter.write("\n\n");
108   }
109   
110   
111   
112   private void __jamon_innerUnit__serverNameLink(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName serverName, final ServerLoad serverLoad)
113     throws java.io.IOException
114   {
115     
116     
117         int infoPort = master.getRegionServerInfoPort(serverName);
118         String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";
119         
120     
121     if ((infoPort > 0) )
122     {
123       
124       jamonWriter.write("\n            <a href=\"");
125       
126       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(url), jamonWriter);
127       
128       jamonWriter.write("\">");
129       
130       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(serverName.getServerName()), jamonWriter);
131       
132       jamonWriter.write("</a>\n        ");
133     }
134     
135     else
136     {
137       
138       jamonWriter.write("\n            ");
139       
140       org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(serverName.getServerName()), jamonWriter);
141       
142       jamonWriter.write("\n        ");
143     }
144     
145     jamonWriter.write("\n");
146   }
147   
148   
149   
150   private void __jamon_innerUnit__storeStats(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName[] serverNames)
151     throws java.io.IOException
152   {
153     
154     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>ServerName</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</tr>\n");
155     
156     
157 for (ServerName serverName: serverNames) {
158 
159 ServerLoad sl = master.getServerManager().getLoad(serverName);
160 if (sl != null) {
161 
162     
163     jamonWriter.write("<tr>\n<td>");
164     
165     {
166       
167       __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
168     }
169     
170     jamonWriter.write("</td>\n<td>");
171     
172     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStores()), jamonWriter);
173     
174     jamonWriter.write("</td>\n<td>");
175     
176     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStorefiles()), jamonWriter);
177     
178     jamonWriter.write("</td>\n<td>");
179     
180     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStoreUncompressedSizeMB()), jamonWriter);
181     
182     jamonWriter.write("m</td>\n<td>");
183     
184     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getStorefileSizeInMB()), jamonWriter);
185     
186     jamonWriter.write("mb</td>\n<td>");
187     
188     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalStaticIndexSizeKB()), jamonWriter);
189     
190     jamonWriter.write("k</td>\n<td>");
191     
192     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalStaticBloomSizeKB()), jamonWriter);
193     
194     jamonWriter.write("k</td>\n</tr>\n");
195     
196     
197         }  else {
198         
199     
200     {
201       
202       __jamon_innerUnit__emptyStat(jamonWriter, serverName);
203     }
204     
205     jamonWriter.write("\n");
206     
207     
208     }
209 }
210 
211     
212     jamonWriter.write("</table>\n");
213   }
214   
215   
216   
217   private void __jamon_innerUnit__requestStats(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName[] serverNames)
218     throws java.io.IOException
219   {
220     
221     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>ServerName</th>\n    <th>Request Per Second</th>\n    <th>Read Request Count</th>\n    <th>Write Request Count</th>\n</tr>\n");
222     
223     
224 for (ServerName serverName: serverNames) {
225 
226 ServerLoad sl = master.getServerManager().getLoad(serverName);
227 if (sl != null) {
228 
229     
230     jamonWriter.write("<tr>\n<td>");
231     
232     {
233       
234       __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
235     }
236     
237     jamonWriter.write("</td>\n<td>");
238     
239     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", sl.getRequestsPerSecond())), jamonWriter);
240     
241     jamonWriter.write("</td>\n<td>");
242     
243     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getReadRequestsCount()), jamonWriter);
244     
245     jamonWriter.write("</td>\n<td>");
246     
247     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getWriteRequestsCount()), jamonWriter);
248     
249     jamonWriter.write("</td>\n</tr>\n");
250     
251     
252         }  else {
253         
254     
255     {
256       
257       __jamon_innerUnit__emptyStat(jamonWriter, serverName);
258     }
259     
260     jamonWriter.write("\n");
261     
262     
263         }
264 }
265 
266     
267     jamonWriter.write("</table>\n");
268   }
269   
270   
271   
272   private void __jamon_innerUnit__memoryStats(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName[] serverNames)
273     throws java.io.IOException
274   {
275     
276     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>ServerName</th>\n    <th>Used Heap</th>\n    <th>Max Heap</th>\n    <th>Memstore Size</th>\n\n</tr>\n");
277     
278     
279 for (ServerName serverName: serverNames) {
280 
281     ServerLoad sl = master.getServerManager().getLoad(serverName);
282     if (sl != null) {
283 
284     
285     jamonWriter.write("<tr>\n    <td>");
286     
287     {
288       
289       __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
290     }
291     
292     jamonWriter.write("</td>\n    <td>");
293     
294     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getUsedHeapMB()), jamonWriter);
295     
296     jamonWriter.write("m</td>\n    <td>");
297     
298     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getMaxHeapMB()), jamonWriter);
299     
300     jamonWriter.write("m</td>\n    <td>");
301     
302     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getMemstoreSizeInMB()), jamonWriter);
303     
304     jamonWriter.write("m</td>\n\n</tr>\n");
305     
306     
307         }  else {
308 
309     
310     {
311       
312       __jamon_innerUnit__emptyStat(jamonWriter, serverName);
313     }
314     
315     jamonWriter.write("\n");
316     
317     
318         }
319 }
320 
321     
322     jamonWriter.write("</table>\n");
323   }
324   
325   
326   
327   private void __jamon_innerUnit__compactionStats(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName[] serverNames)
328     throws java.io.IOException
329   {
330     
331     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>ServerName</th>\n    <th>Num. Compacting KVs</th>\n    <th>Num. Compacted KVs</th>\n    <th>Remaining KVs</th>\n    <th>Compaction Progress</th>\n</tr>\n");
332     
333     
334 for (ServerName serverName: serverNames) {
335 
336 ServerLoad sl = master.getServerManager().getLoad(serverName);
337 if (sl != null) {
338 String percentDone = "";
339 if  (sl.getTotalCompactingKVs() > 0) {
340      percentDone = String.format("%.2f", 100 *
341         ((float) sl.getCurrentCompactedKVs() / sl.getTotalCompactingKVs())) + "%";
342 }
343 
344     
345     jamonWriter.write("<tr>\n<td>");
346     
347     {
348       
349       __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
350     }
351     
352     jamonWriter.write("</td>\n<td>");
353     
354     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalCompactingKVs()), jamonWriter);
355     
356     jamonWriter.write("</td>\n<td>");
357     
358     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getCurrentCompactedKVs()), jamonWriter);
359     
360     jamonWriter.write("</td>\n<td>");
361     
362     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(sl.getTotalCompactingKVs() - sl.getCurrentCompactedKVs()), jamonWriter);
363     
364     jamonWriter.write("</td>\n<td>");
365     
366     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(percentDone), jamonWriter);
367     
368     jamonWriter.write("</td>\n</tr>\n");
369     
370     
371         }  else {
372         
373     
374     {
375       
376       __jamon_innerUnit__emptyStat(jamonWriter, serverName);
377     }
378     
379     jamonWriter.write("\n");
380     
381     
382     }
383 }
384 
385     
386     jamonWriter.write("</table>\n");
387   }
388   
389   
390   
391   private void __jamon_innerUnit__baseStats(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName[] serverNames)
392     throws java.io.IOException
393   {
394     
395     jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>ServerName</th>\n    <th>Start time</th>\n    <th>Requests Per Second</th>\n    <th>Num. Regions</th>\n</tr>\n");
396     
397     
398     int totalRegions = 0;
399     int totalRequests = 0;
400     for (ServerName serverName: serverNames) {
401 
402     ServerLoad sl = master.getServerManager().getLoad(serverName);
403     double requestsPerSecond = 0.0;
404     int numRegionsOnline = 0;
405 
406     if (sl != null) {
407         requestsPerSecond = sl.getRequestsPerSecond();
408         numRegionsOnline = sl.getNumberOfRegions();
409         totalRegions += sl.getNumberOfRegions();
410         
411         totalRequests += sl.getNumberOfRequests();
412     }
413     long startcode = serverName.getStartcode();
414 
415     
416     jamonWriter.write("<tr>\n    <td>");
417     
418     {
419       
420       __jamon_innerUnit__serverNameLink(jamonWriter, serverName, sl);
421     }
422     
423     jamonWriter.write("</td>\n    <td>");
424     
425     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(new Date(startcode)), jamonWriter);
426     
427     jamonWriter.write("</td>\n    <td>");
428     
429     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", requestsPerSecond)), jamonWriter);
430     
431     jamonWriter.write("</td>\n    <td>");
432     
433     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numRegionsOnline), jamonWriter);
434     
435     jamonWriter.write("</td>\n</tr>\n");
436     
437     
438 }
439 
440     
441     jamonWriter.write("<tr><td>Total:");
442     
443     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(servers.size()), jamonWriter);
444     
445     jamonWriter.write("</td>\n<td></td>\n<td>");
446     
447     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRequests), jamonWriter);
448     
449     jamonWriter.write("</td>\n<td>");
450     
451     org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRegions), jamonWriter);
452     
453     jamonWriter.write("</td>\n</tr>\n</table>\n");
454   }
455   
456   
457   
458   private void __jamon_innerUnit__emptyStat(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter, final ServerName serverName)
459     throws java.io.IOException
460   {
461     
462     jamonWriter.write("<tr>\n    <td>");
463     
464     {
465       
466       __jamon_innerUnit__serverNameLink(jamonWriter, serverName, null);
467     }
468     
469     jamonWriter.write("</td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    <td></td>\n    </tr>\n");
470   }
471   
472   
473 }