Skip to content

Commit effde97

Browse files
caroliney14apurtell
authored andcommitted
HBASE-25469 Add detailed RIT info in JSON format for consumption as metrics (#3555)
Signed-off-by: Andrew Purtell <apurtell@apache.org> Signed-off-by: Bharath Vissapragada <bharathv@apache.org>
1 parent 8e9253e commit effde97

File tree

1 file changed

+40
-2
lines changed
  • hbase-server/src/main/resources/hbase-webapps/master

1 file changed

+40
-2
lines changed

hbase-server/src/main/resources/hbase-webapps/master/rits.jsp

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,17 @@
2121
import="static org.apache.commons.lang3.StringEscapeUtils.escapeXml"
2222
import="java.util.Collections"
2323
import="java.util.Comparator"
24+
import="java.util.ArrayList"
2425
import="java.util.List"
26+
import="java.util.HashMap"
27+
import="java.util.Map"
2528
import="java.util.stream.Collectors"
2629
import="org.apache.hadoop.hbase.master.HMaster"
30+
import="org.apache.hadoop.hbase.master.RegionState"
2731
import="org.apache.hadoop.hbase.master.assignment.RegionStateNode"
2832
import="org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure"
33+
import="org.apache.hadoop.hbase.util.GsonUtil"
34+
import="org.apache.hbase.thirdparty.com.google.gson.Gson"
2935
%>
3036
<%
3137
HMaster master = (HMaster) getServletContext().getAttribute(HMaster.MASTER);
@@ -69,6 +75,7 @@
6975
<div class="page-header">
7076
<a href="/rits.jsp?format=txt&filter=region&table=<%=table%>&state=<%=state%>" class="btn btn-primary">Regions in text format</a>
7177
<a href="/rits.jsp?format=txt&filter=procedure&table=<%=table%>&state=<%=state%>" class="btn btn-info">Procedures in text format</a>
78+
<a href="/rits.jsp?format=json&table=<%=table%>&state=<%=state%>" class="btn btn-info">RIT info as JSON</a>
7279
<p>regions and procedures in text format can be copied and passed to command-line utils such as hbck2</p>
7380
</div>
7481
</div>
@@ -79,14 +86,18 @@
7986
<th>Region</th>
8087
<th>Table</th>
8188
<th>RegionState</th>
89+
<th>Server</th>
8290
<th>Procedure</th>
8391
<th>ProcedureState</th>
92+
<th>Start Time</th>
93+
<th>Duration (ms)</th>
8494
</tr>
8595
<% for (RegionStateNode regionStateNode : rit) { %>
8696
<tr>
8797
<td><%= regionStateNode.getRegionInfo().getEncodedName() %></td>
8898
<td><%= regionStateNode.getRegionInfo().getTable() %></td>
8999
<td><%= regionStateNode.getState() %></td>
100+
<td><%= regionStateNode.getRegionLocation().getServerName() %></td>
90101
<%
91102
TransitRegionStateProcedure procedure = regionStateNode.getProcedure();
92103
@@ -98,6 +109,10 @@
98109
<td><%= procedure.getProcId() %></td>
99110
<td><%= escapeXml(procedure.getState().toString() + (procedure.isBypass() ? "(Bypassed)" : "")) %></td>
100111
<% } %>
112+
113+
<% RegionState rs = regionStateNode.toRegionState(); %>
114+
<td><%= rs.getStamp() %></td>
115+
<td><%= System.currentTimeMillis() - rs.getStamp() %></td>
101116
</tr>
102117
<% } %>
103118
<p><%= rit.size() %> region(s) in transition.</p>
@@ -107,7 +122,30 @@
107122
<% } %>
108123
</div>
109124
<jsp:include page="footer.jsp" />
110-
125+
<% } else if (format.equals("json")) { %>
126+
<%
127+
Gson GSON = GsonUtil.createGson().create();
128+
Map<String, List<Map<String, Object>>> map = new HashMap<>();
129+
List<Map<String, Object>> rits = new ArrayList<>();
130+
map.put("rits", rits);
131+
for (RegionStateNode regionStateNode : rit) {
132+
Map<String, Object> r = new HashMap<>();
133+
r.put("region", regionStateNode.getRegionInfo().getEncodedName());
134+
r.put("table", regionStateNode.getRegionInfo().getTable().getNameAsString());
135+
r.put("state", regionStateNode.getState());
136+
r.put("server", regionStateNode.getRegionLocation().getServerName());
137+
TransitRegionStateProcedure procedure = regionStateNode.getProcedure();
138+
if (procedure != null) {
139+
r.put("procedureId", procedure.getProcId());
140+
r.put("procedureState", procedure.getState().toString());
141+
}
142+
RegionState rs = regionStateNode.toRegionState();
143+
r.put("startTime", rs.getStamp());
144+
r.put("duration", System.currentTimeMillis() - rs.getStamp());
145+
rits.add(r);
146+
}
147+
%>
148+
<%= GSON.toJson(map) %>
111149
<% } else { %>
112150
<div class="container-fluid content">
113151
<div class="row">
@@ -127,4 +165,4 @@
127165
</p>
128166
</div>
129167
</div>
130-
<% } %>
168+
<% } %>

0 commit comments

Comments
 (0)