1
2
3
4 package org.apache.hadoop.hbase.tmpl.regionserver;
5
6
7 import java.util.*;
8
9 import java.util.Map.Entry;
10
11 import org.apache.hadoop.hbase.procedure2.util.StringUtils;
12
13 import org.apache.hadoop.hbase.regionserver.HRegionServer;
14
15 import org.apache.hadoop.hbase.replication.regionserver.ReplicationStatus;
16
17 public class ReplicationStatusTmplImpl
18 extends org.jamon.AbstractTemplateImpl
19 implements org.apache.hadoop.hbase.tmpl.regionserver.ReplicationStatusTmpl.Intf
20
21 {
22 private final HRegionServer regionServer;
23 protected static org.apache.hadoop.hbase.tmpl.regionserver.ReplicationStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.ReplicationStatusTmpl.ImplData p_implData)
24 {
25 return p_implData;
26 }
27 public ReplicationStatusTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.ReplicationStatusTmpl.ImplData p_implData)
28 {
29 super(p_templateManager, __jamon_setOptionalArguments(p_implData));
30 regionServer = p_implData.getRegionServer();
31 }
32
33 @Override public void renderNoFlush(final java.io.Writer jamonWriter)
34 throws java.io.IOException
35 {
36
37
38 Map<String, ReplicationStatus> walGroupsReplicationStatus = regionServer.getWalGroupsReplicationStatus();
39
40
41 if ((walGroupsReplicationStatus != null && walGroupsReplicationStatus.size() > 0) )
42 {
43
44 jamonWriter.write("\n\n <div class=\"tabbable\">\n <ul class=\"nav nav-pills\">\n <li class=\"active\"><a href=\"#tab_currentLog\" data-toggle=\"tab\">Current Log</a> </li>\n <li class=\"\"><a href=\"#tab_replicationDelay\" data-toggle=\"tab\">Replication Delay</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_currentLog\">\n ");
45
46 {
47
48 __jamon_innerUnit__currentLog(jamonWriter, walGroupsReplicationStatus);
49 }
50
51 jamonWriter.write("\n </div>\n <div class=\"tab-pane\" id=\"tab_replicationDelay\">\n ");
52
53 {
54
55 __jamon_innerUnit__replicationDelay(jamonWriter, walGroupsReplicationStatus);
56 }
57
58 jamonWriter.write("\n </div>\n </div>\n </div>\n <p> If the replication delay is UNKNOWN, that means this walGroup doesn't start replicate yet and it may get disabled.\n If the size of log is 0, it means we are replicating current HLog, thus we can't get accurate size since it's not closed yet.</p>\n\n");
59 }
60
61 else
62 {
63
64 jamonWriter.write("\n <p>No Replication Metrics for Peers</p>\n");
65 }
66
67 jamonWriter.write("\n\n");
68 }
69
70
71
72 private void __jamon_innerUnit__replicationDelay(final java.io.Writer jamonWriter, final Map<String,ReplicationStatus> metrics)
73 throws java.io.IOException
74 {
75
76 jamonWriter.write("<table class=\"table table-striped\">\n <tr>\n <th>PeerId</th>\n <th>WalGroup</th>\n <th>Current Log</th>\n <th>Last Shipped Age</th>\n <th>Replication Delay</th>\n </tr>\n ");
77
78 for (Map.Entry<String, ReplicationStatus> entry: metrics.entrySet() )
79 {
80
81 jamonWriter.write("\n <tr>\n <td>");
82
83 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getPeerId()), jamonWriter);
84
85 jamonWriter.write("</td>\n <td>");
86
87 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getWalGroup()), jamonWriter);
88
89 jamonWriter.write("</td>\n <td>");
90
91 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getCurrentPath()), jamonWriter);
92
93 jamonWriter.write(" </td>\n <td>");
94
95 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanTimeDiff(entry.getValue().getAgeOfLastShippedOp())), jamonWriter);
96
97 jamonWriter.write("</td>\n <td>");
98
99 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getReplicationDelay() == Long.MAX_VALUE ? "UNKNOWN" : StringUtils.humanTimeDiff(entry.getValue().getReplicationDelay())), jamonWriter);
100
101 jamonWriter.write("</td>\n </tr>\n ");
102 }
103
104 jamonWriter.write("\n </table>\n");
105 }
106
107
108
109 private void __jamon_innerUnit__currentLog(final java.io.Writer jamonWriter, final Map<String,ReplicationStatus> metrics)
110 throws java.io.IOException
111 {
112
113 jamonWriter.write("<table class=\"table table-striped\">\n <tr>\n <th>PeerId</th>\n <th>WalGroup</th>\n <th>Current Log</th>\n <th>Size</th>\n <th>Queue Size</th>\n <th>Offset</th>\n </tr>\n ");
114
115 for (Map.Entry<String, ReplicationStatus> entry: metrics.entrySet() )
116 {
117
118 jamonWriter.write("\n <tr>\n <td>");
119
120 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getPeerId()), jamonWriter);
121
122 jamonWriter.write("</td>\n <td>");
123
124 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getWalGroup()), jamonWriter);
125
126 jamonWriter.write("</td>\n <td>");
127
128 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getCurrentPath()), jamonWriter);
129
130 jamonWriter.write(" </td>\n <td>");
131
132 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanSize(entry.getValue().getFileSize())), jamonWriter);
133
134 jamonWriter.write("</td>\n <td>");
135
136 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().getQueueSize()), jamonWriter);
137
138 jamonWriter.write("</td>\n <td>");
139
140 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanSize(entry.getValue().getCurrentPosition())), jamonWriter);
141
142 jamonWriter.write("</td>\n </tr>\n ");
143 }
144
145 jamonWriter.write("\n </table>\n");
146 }
147
148
149 }