001// Autogenerated Jamon implementation
002// /Users/peter.somogyi/Cloudera/repos/hbase-upstream/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/RSGroupListTmpl.jamon
003
004package org.apache.hadoop.hbase.tmpl.master;
005
006// 27, 5
007import java.util.Collections;
008// 28, 5
009import java.util.List;
010// 29, 5
011import java.util.Map;
012// 30, 5
013import java.util.Set;
014// 31, 5
015import java.util.stream.Collectors;
016// 32, 5
017import org.apache.hadoop.hbase.master.HMaster;
018// 33, 5
019import org.apache.hadoop.hbase.RegionMetrics;
020// 34, 5
021import org.apache.hadoop.hbase.ServerMetrics;
022// 35, 5
023import org.apache.hadoop.hbase.Size;
024// 36, 5
025import org.apache.hadoop.hbase.RSGroupTableAccessor;
026// 37, 5
027import org.apache.hadoop.hbase.master.ServerManager;
028// 38, 5
029import org.apache.hadoop.hbase.net.Address;
030// 39, 5
031import org.apache.hadoop.hbase.rsgroup.RSGroupInfo;
032// 40, 5
033import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;
034
035public class RSGroupListTmplImpl
036  extends org.jamon.AbstractTemplateImpl
037  implements org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.Intf
038
039{
040  private final HMaster master;
041  private final ServerManager serverManager;
042  protected static org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.ImplData p_implData)
043  {
044    return p_implData;
045  }
046  public RSGroupListTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.RSGroupListTmpl.ImplData p_implData)
047  {
048    super(p_templateManager, __jamon_setOptionalArguments(p_implData));
049    master = p_implData.getMaster();
050    serverManager = p_implData.getServerManager();
051  }
052  
053  @Override public void renderNoFlush(final java.io.Writer jamonWriter)
054    throws java.io.IOException
055  {
056    // 42, 1
057    
058List<RSGroupInfo> groups = RSGroupTableAccessor.getAllRSGroupInfo(master.getConnection());
059
060    // 46, 1
061    if ((groups != null && groups.size() > 0))
062    {
063      // 46, 45
064      jamonWriter.write("\n\n");
065      // 48, 1
066      
067RSGroupInfo [] rsGroupInfos = groups.toArray(new RSGroupInfo[groups.size()]);
068Map<Address, ServerMetrics> collectServers = Collections.emptyMap();
069if (master.getServerManager() != null) {
070  collectServers =
071      master.getServerManager().getOnlineServers().entrySet().stream()
072          .collect(Collectors.toMap(p -> p.getKey().getAddress(), Map.Entry::getValue));
073}
074
075      // 58, 1
076      jamonWriter.write("<div class=\"tabbable\">\n    <ul class=\"nav nav-pills\">\n        <li class=\"active\"><a href=\"#tab_rsgroup_baseStats\" data-toggle=\"tab\">Base Stats</a></li>\n        <li class=\"\"><a href=\"#tab_rsgroup_memoryStats\" data-toggle=\"tab\">Memory</a></li>\n        <li class=\"\"><a href=\"#tab_rsgroup_requestStats\" data-toggle=\"tab\">Requests</a></li>\n        <li class=\"\"><a href=\"#tab_rsgroup_storeStats\" data-toggle=\"tab\">Storefiles</a></li>\n        <li class=\"\"><a href=\"#tab_rsgroup_compactStats\" 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_rsgroup_baseStats\">\n            ");
077      // 68, 13
078      {
079        // 68, 13
080        __jamon_innerUnit__rsgroup_baseStats(jamonWriter, rsGroupInfos, collectServers );
081      }
082      // 68, 97
083      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_rsgroup_memoryStats\">\n            ");
084      // 71, 13
085      {
086        // 71, 13
087        __jamon_innerUnit__rsgroup_memoryStats(jamonWriter, rsGroupInfos, collectServers );
088      }
089      // 71, 99
090      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_rsgroup_requestStats\">\n            ");
091      // 74, 13
092      {
093        // 74, 13
094        __jamon_innerUnit__rsgroup_requestStats(jamonWriter, rsGroupInfos, collectServers );
095      }
096      // 74, 100
097      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_rsgroup_storeStats\">\n            ");
098      // 77, 13
099      {
100        // 77, 13
101        __jamon_innerUnit__rsgroup_storeStats(jamonWriter, rsGroupInfos, collectServers );
102      }
103      // 77, 98
104      jamonWriter.write("\n        </div>\n        <div class=\"tab-pane\" id=\"tab_rsgroup_compactStats\">\n            ");
105      // 80, 13
106      {
107        // 80, 13
108        __jamon_innerUnit__rsgroup_compactStats(jamonWriter, rsGroupInfos, collectServers );
109      }
110      // 80, 100
111      jamonWriter.write("\n        </div>\n    </div>\n</div>\n\n");
112    }
113    // 85, 7
114    jamonWriter.write("\n\n");
115  }
116  
117  
118  // 356, 1
119  private void __jamon_innerUnit__rsGroupLink(final java.io.Writer jamonWriter, final String rsGroupName)
120    throws java.io.IOException
121  {
122    // 360, 5
123    jamonWriter.write("<a href=rsgroup.jsp?name=");
124    // 360, 30
125    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rsGroupName), jamonWriter);
126    // 360, 47
127    jamonWriter.write(">");
128    // 360, 48
129    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rsGroupName), jamonWriter);
130    // 360, 65
131    jamonWriter.write("</a>\n");
132  }
133  
134  
135  // 87, 1
136  private void __jamon_innerUnit__rsgroup_baseStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers)
137    throws java.io.IOException
138  {
139    // 92, 1
140    jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>RSGroup Name</th>\n    <th>Num. Online Servers</th>\n    <th>Num. Dead Servers</th>\n    <th>Num. Tables</th>\n    <th>Requests Per Second</th>\n    <th>Num. Regions</th>\n    <th>Average Load</th>\n</tr>\n");
141    // 102, 1
142    
143    int totalOnlineServers = 0;
144    int totalDeadServers = 0;
145    int totalTables = 0;
146    int totalRequests = 0;
147    int totalRegions = 0;
148    for (RSGroupInfo rsGroupInfo: rsGroupInfos) {
149      String rsGroupName = rsGroupInfo.getName();
150      int onlineServers = 0;
151      int deadServers = 0;
152      int tables = 0;
153      long requestsPerSecond = 0;
154      int numRegionsOnline = 0;
155      Set<Address> servers = rsGroupInfo.getServers();
156      for (Address server : servers) {
157        ServerMetrics sl = collectServers.get(server);
158        if (sl != null) {
159          requestsPerSecond += sl.getRequestCountPerSecond();
160          numRegionsOnline += sl.getRegionMetrics().size();
161          //rsgroup total
162          totalRegions += sl.getRegionMetrics().size();
163          totalRequests += sl.getRequestCountPerSecond();
164          totalOnlineServers++;
165          onlineServers++;
166        } else {
167          totalDeadServers++;
168          deadServers++;
169        }
170      }
171      tables = rsGroupInfo.getTables().size();
172      totalTables += tables;
173      double avgLoad = onlineServers == 0 ? 0 :
174            (double)numRegionsOnline / (double)onlineServers;
175
176    // 136, 1
177    jamonWriter.write("<tr>\n    <td>");
178    // 137, 9
179    {
180      // 137, 9
181      __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName);
182    }
183    // 137, 52
184    jamonWriter.write("</td>\n    <td>");
185    // 138, 9
186    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(onlineServers), jamonWriter);
187    // 138, 28
188    jamonWriter.write("</td>\n    <td>");
189    // 139, 9
190    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(deadServers), jamonWriter);
191    // 139, 26
192    jamonWriter.write("</td>\n    <td>");
193    // 140, 9
194    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(tables), jamonWriter);
195    // 140, 21
196    jamonWriter.write("</td>\n    <td>");
197    // 141, 9
198    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(requestsPerSecond), jamonWriter);
199    // 141, 32
200    jamonWriter.write("</td>\n    <td>");
201    // 142, 9
202    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numRegionsOnline), jamonWriter);
203    // 142, 31
204    jamonWriter.write("</td>\n    <td>");
205    // 143, 9
206    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(avgLoad), jamonWriter);
207    // 143, 22
208    jamonWriter.write("</td>\n</tr>\n");
209    // 145, 1
210    
211}
212
213    // 148, 1
214    jamonWriter.write("<tr><td>Total:");
215    // 148, 15
216    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rsGroupInfos.length), jamonWriter);
217    // 148, 40
218    jamonWriter.write("</td>\n<td>");
219    // 149, 5
220    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalOnlineServers), jamonWriter);
221    // 149, 29
222    jamonWriter.write("</td>\n<td>");
223    // 150, 5
224    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalDeadServers), jamonWriter);
225    // 150, 27
226    jamonWriter.write("</td>\n<td>");
227    // 151, 5
228    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalTables), jamonWriter);
229    // 151, 22
230    jamonWriter.write("</td>\n<td>");
231    // 152, 5
232    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRequests), jamonWriter);
233    // 152, 24
234    jamonWriter.write("</td>\n<td>");
235    // 153, 5
236    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRegions), jamonWriter);
237    // 153, 23
238    jamonWriter.write("</td>\n<td>");
239    // 154, 5
240    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(master.getServerManager().getAverageLoad()), jamonWriter);
241    // 154, 53
242    jamonWriter.write("</td>\n</tr>\n</table>\n");
243  }
244  
245  
246  // 305, 1
247  private void __jamon_innerUnit__rsgroup_compactStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers)
248    throws java.io.IOException
249  {
250    // 310, 1
251    jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>RSGroup Name</th>\n    <th>Num. Compacting Cells</th>\n    <th>Num. Compacted Cells</th>\n    <th>Remaining Cells</th>\n    <th>Compaction Progress</th>\n</tr>\n");
252    // 318, 1
253    
254    for (RSGroupInfo rsGroupInfo: rsGroupInfos) {
255      String rsGroupName = rsGroupInfo.getName();
256      int numStores = 0;
257      long totalCompactingCells = 0;
258      long totalCompactedCells = 0;
259      long remainingCells = 0;
260      long compactionProgress  = 0;
261      for (Address server : rsGroupInfo.getServers()) {
262        ServerMetrics sl = collectServers.get(server);
263        if (sl != null) {
264          for (RegionMetrics rl : sl.getRegionMetrics().values()) {
265            totalCompactingCells += rl.getCompactingCellCount();
266            totalCompactedCells += rl.getCompactedCellCount();
267          }
268        }
269      }
270      remainingCells = totalCompactingCells - totalCompactedCells;
271      String percentDone = "";
272      if  (totalCompactingCells > 0) {
273           percentDone = String.format("%.2f", 100 *
274              ((float) totalCompactedCells / totalCompactingCells)) + "%";
275      }
276
277    // 342, 1
278    jamonWriter.write("<tr>\n<td>");
279    // 343, 5
280    {
281      // 343, 5
282      __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName);
283    }
284    // 343, 48
285    jamonWriter.write("</td>\n<td>");
286    // 344, 5
287    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalCompactingCells), jamonWriter);
288    // 344, 31
289    jamonWriter.write("</td>\n<td>");
290    // 345, 5
291    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalCompactedCells), jamonWriter);
292    // 345, 30
293    jamonWriter.write("</td>\n<td>");
294    // 346, 5
295    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(remainingCells), jamonWriter);
296    // 346, 25
297    jamonWriter.write("</td>\n<td>");
298    // 347, 5
299    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(percentDone), jamonWriter);
300    // 347, 22
301    jamonWriter.write("</td>\n</tr>\n");
302    // 349, 1
303    
304}
305
306    // 352, 1
307    jamonWriter.write("</table>\n");
308  }
309  
310  
311  // 159, 1
312  private void __jamon_innerUnit__rsgroup_memoryStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers)
313    throws java.io.IOException
314  {
315    // 164, 1
316    jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>RSGroup Name</th>\n    <th>Used Heap</th>\n    <th>Max Heap</th>\n    <th>Memstore Size</th>\n\n</tr>\n");
317    // 172, 1
318    
319    for (RSGroupInfo rsGroupInfo: rsGroupInfos) {
320      String rsGroupName = rsGroupInfo.getName();
321      long usedHeap = 0;
322      long maxHeap = 0;
323      long memstoreSize = 0;
324      for (Address server : rsGroupInfo.getServers()) {
325        ServerMetrics sl = collectServers.get(server);
326        if (sl != null) {
327          usedHeap += (long) sl.getUsedHeapSize().get(Size.Unit.MEGABYTE);
328          maxHeap += (long) sl.getMaxHeapSize().get(Size.Unit.MEGABYTE);
329          memstoreSize += (long) sl.getRegionMetrics().values().stream().mapToDouble(
330            rm -> rm.getMemStoreSize().get(Size.Unit.MEGABYTE)).sum();
331        }
332      }
333
334    // 188, 1
335    jamonWriter.write("<tr>\n    <td>");
336    // 189, 9
337    {
338      // 189, 9
339      __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName);
340    }
341    // 189, 52
342    jamonWriter.write("</td>\n    <td>");
343    // 190, 9
344    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(usedHeap
345            * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter);
346    // 191, 61
347    jamonWriter.write("</td>\n    <td>");
348    // 192, 9
349    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(maxHeap
350            * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter);
351    // 193, 61
352    jamonWriter.write("</td>\n    <td>");
353    // 194, 9
354    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(memstoreSize
355            * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter);
356    // 195, 61
357    jamonWriter.write("</td>\n\n</tr>\n");
358    // 198, 1
359    
360}
361
362    // 201, 1
363    jamonWriter.write("</table>\n");
364  }
365  
366  
367  // 204, 1
368  private void __jamon_innerUnit__rsgroup_requestStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers)
369    throws java.io.IOException
370  {
371    // 209, 1
372    jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>RSGroup Name</th>\n    <th>Request Per Second</th>\n    <th>Read Request Count</th>\n    <th>Write Request Count</th>\n</tr>\n");
373    // 216, 1
374    
375    for (RSGroupInfo rsGroupInfo: rsGroupInfos) {
376      String rsGroupName = rsGroupInfo.getName();
377      long requestsPerSecond = 0;
378      long readRequests = 0;
379      long writeRequests = 0;
380      for (Address server : rsGroupInfo.getServers()) {
381        ServerMetrics sl = collectServers.get(server);
382        if (sl != null) {
383          for (RegionMetrics rm : sl.getRegionMetrics().values()) {
384            readRequests += rm.getReadRequestCount();
385            writeRequests += rm.getWriteRequestCount();
386          }
387          requestsPerSecond += sl.getRequestCountPerSecond();
388        }
389      }
390
391    // 233, 1
392    jamonWriter.write("<tr>\n<td>");
393    // 234, 5
394    {
395      // 234, 5
396      __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName);
397    }
398    // 234, 48
399    jamonWriter.write("</td>\n<td>");
400    // 235, 5
401    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(requestsPerSecond), jamonWriter);
402    // 235, 28
403    jamonWriter.write("</td>\n<td>");
404    // 236, 5
405    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(readRequests), jamonWriter);
406    // 236, 23
407    jamonWriter.write("</td>\n<td>");
408    // 237, 5
409    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(writeRequests), jamonWriter);
410    // 237, 24
411    jamonWriter.write("</td>\n</tr>\n");
412    // 239, 1
413    
414}
415
416    // 242, 1
417    jamonWriter.write("</table>\n");
418  }
419  
420  
421  // 246, 1
422  private void __jamon_innerUnit__rsgroup_storeStats(final java.io.Writer jamonWriter, final RSGroupInfo[] rsGroupInfos, final Map<Address,ServerMetrics> collectServers)
423    throws java.io.IOException
424  {
425    // 251, 1
426    jamonWriter.write("<table class=\"table table-striped\">\n<tr>\n    <th>RSGroup Name</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");
427    // 261, 1
428    
429    for (RSGroupInfo rsGroupInfo: rsGroupInfos) {
430      String rsGroupName = rsGroupInfo.getName();
431      int numStores = 0;
432      long numStorefiles = 0;
433      long uncompressedStorefileSize  = 0;
434      long storefileSize  = 0;
435      long indexSize  = 0;
436      long bloomSize  = 0;
437      int count = 0;
438      for (Address server : rsGroupInfo.getServers()) {
439        ServerMetrics sl = collectServers.get(server);
440        if (sl != null) {
441          for (RegionMetrics rm : sl.getRegionMetrics().values()) {
442            numStores += rm.getStoreCount();
443            numStorefiles += rm.getStoreFileCount();
444            uncompressedStorefileSize += rm.getUncompressedStoreFileSize().get(Size.Unit.MEGABYTE);
445            storefileSize += rm.getStoreFileSize().get(Size.Unit.MEGABYTE);
446            indexSize += rm.getStoreFileUncompressedDataIndexSize().get(Size.Unit.KILOBYTE);
447            bloomSize += rm.getBloomFilterSize().get(Size.Unit.KILOBYTE);
448          }
449          count++;
450        }
451      }
452
453    // 286, 1
454    jamonWriter.write("<tr>\n<td>");
455    // 287, 5
456    {
457      // 287, 5
458      __jamon_innerUnit__rsGroupLink(jamonWriter, rsGroupName);
459    }
460    // 287, 48
461    jamonWriter.write("</td>\n<td>");
462    // 288, 5
463    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numStores), jamonWriter);
464    // 288, 20
465    jamonWriter.write("</td>\n<td>");
466    // 289, 5
467    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numStorefiles), jamonWriter);
468    // 289, 24
469    jamonWriter.write("</td>\n<td>");
470    // 290, 5
471    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(
472    uncompressedStorefileSize * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter);
473    // 291, 79
474    jamonWriter.write("</td>\n<td>");
475    // 292, 5
476    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(
477    storefileSize * TraditionalBinaryPrefix.MEGA.value, "B", 1)), jamonWriter);
478    // 293, 67
479    jamonWriter.write("</td>\n<td>");
480    // 294, 5
481    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(
482    indexSize * TraditionalBinaryPrefix.KILO.value, "B", 1)), jamonWriter);
483    // 295, 63
484    jamonWriter.write("</td>\n<td>");
485    // 296, 5
486    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(TraditionalBinaryPrefix.long2String(
487    bloomSize * TraditionalBinaryPrefix.KILO.value, "B", 1)), jamonWriter);
488    // 297, 63
489    jamonWriter.write("</td>\n</tr>\n");
490    // 299, 1
491    
492}
493
494    // 302, 1
495    jamonWriter.write("</table>\n");
496  }
497  
498  
499}