159 } |
163 } |
160 } |
164 } |
161 |
165 |
162 @Override |
166 @Override |
163 public HttpResponse doGet(HttpExchange exchange) { |
167 public HttpResponse doGet(HttpExchange exchange) { |
164 final String path = PlatformRestAdapter.getDomain() |
|
165 + exchange.getRequestURI().getPath().replaceAll("/$", ""); |
|
166 try { |
168 try { |
|
169 final String path = PlatformRestAdapter.getDomain() |
|
170 + URLDecoder.decode(exchange.getRequestURI().getPath(), StandardCharsets.UTF_8.displayName()) |
|
171 .replaceAll("/$", ""); |
167 List<ObjectName> filteredMBeans = allowedMbeans; |
172 List<ObjectName> filteredMBeans = allowedMbeans; |
168 Map<String, String> queryMap = HttpUtil.getGetRequestQueryMap(exchange); |
173 Map<String, String> queryMap = HttpUtil.getGetRequestQueryMap(exchange); |
169 String query = exchange.getRequestURI().getQuery(); |
174 String query = exchange.getRequestURI().getQuery(); |
170 if(query != null && queryMap.isEmpty()) { |
175 if (query != null && queryMap.isEmpty()) { |
171 return new HttpResponse(HttpResponse.BAD_REQUEST, |
176 return new HttpResponse(HttpResponse.BAD_REQUEST, |
172 "Invalid query params : Allowed query keys [query,page]"); |
177 "Invalid query params : Allowed query keys [objectname,page]"); |
173 }else if(query != null && !queryMap.isEmpty()) { |
178 } else if (query != null && !queryMap.isEmpty()) { |
174 Map<String, String> newMap = new HashMap<>(queryMap); |
179 Map<String, String> newMap = new HashMap<>(queryMap); |
175 newMap.remove("query"); |
180 newMap.remove("objectname"); |
176 newMap.remove("page"); |
181 newMap.remove("page"); |
177 if(!newMap.isEmpty()) { // Invalid query params |
182 if (!newMap.isEmpty()) { // Invalid query params |
178 return new HttpResponse(HttpResponse.BAD_REQUEST, |
183 return new HttpResponse(HttpResponse.BAD_REQUEST, |
179 "Invalid query params : Allowed query keys [query,page]"); |
184 "Invalid query params : Allowed query keys [objectname,page]"); |
180 } |
185 } |
181 } |
186 } |
182 if (queryMap.containsKey("query")) { // Filter based on ObjectName query |
187 if (queryMap.containsKey("objectname")) { // Filter based on ObjectName query |
183 Set<ObjectName> queryMBeans = mBeanServer |
188 Set<ObjectName> queryMBeans = mBeanServer |
184 .queryNames(new ObjectName(queryMap.get("query")), null); |
189 .queryNames(new ObjectName(queryMap.get("objectname")), null); |
185 queryMBeans.retainAll(allowedMbeans); // Intersection of two lists |
190 queryMBeans.retainAll(allowedMbeans); // Intersection of two lists |
186 filteredMBeans = new ArrayList<>(queryMBeans); |
191 filteredMBeans = new ArrayList<>(queryMBeans); |
187 } |
192 } |
188 |
193 |
189 JSONObject _links = HttpUtil.getPaginationLinks(exchange, filteredMBeans, pageSize); |
194 JSONObject _links = HttpUtil.getPaginationLinks(exchange, filteredMBeans, pageSize); |
190 List<ObjectName> mbeanPage = HttpUtil.filterByPage(exchange, filteredMBeans, pageSize); |
195 List<ObjectName> mbeanPage = HttpUtil.filterByPage(exchange, filteredMBeans, pageSize); |
191 |
196 |
192 List<Map<String, String>> items = new ArrayList<>(filteredMBeans.size()); |
197 List<Map<String, String>> items = new ArrayList<>(filteredMBeans.size()); |
193 mbeanPage.forEach(objectName -> { |
198 for (ObjectName objectName : mbeanPage) { |
194 Map<String, String> item = new LinkedHashMap<>(2); |
199 Map<String, String> item = new LinkedHashMap<>(); |
195 item.put("name", objectName.toString()); |
200 item.put("name", objectName.toString()); |
|
201 MBeanResource mBeanResource = mBeanResourceMap.get(objectName.toString()); |
|
202 try { |
|
203 JSONObject mBeanInfo = mBeanResource.getMBeanInfo(mBeanServer, objectName); |
|
204 JSONElement element = mBeanInfo.get("descriptor"); |
|
205 if (element != null) { |
|
206 JSONElement element1 = ((JSONObject) element).get("interfaceClassName"); |
|
207 if (element1 != null) { |
|
208 String intfName = (String) ((JSONPrimitive) element1).getValue(); |
|
209 item.put("interfaceClassName", intfName); |
|
210 } |
|
211 } |
|
212 element = mBeanInfo.get("className"); |
|
213 if (element != null) { |
|
214 String className = (String) ((JSONPrimitive) element).getValue(); |
|
215 item.put("className", className); |
|
216 } |
|
217 element = mBeanInfo.get("description"); |
|
218 if (element != null) { |
|
219 String description = (String) ((JSONPrimitive) element).getValue(); |
|
220 item.put("description", description); |
|
221 } |
|
222 element = mBeanInfo.get("attributeInfo"); |
|
223 if(element != null) { |
|
224 item.put("attributeCount", ((JSONArray)element).size() + ""); |
|
225 } |
|
226 element = mBeanInfo.get("operationInfo"); |
|
227 if(element != null) { |
|
228 item.put("operationCount", ((JSONArray)element).size() + ""); |
|
229 } |
|
230 |
|
231 } catch (InstanceNotFoundException | IntrospectionException | ReflectionException e) { |
|
232 } |
|
233 |
196 String href = path + "/" + objectName.toString(); |
234 String href = path + "/" + objectName.toString(); |
197 href = HttpUtil.escapeUrl(href); |
235 href = HttpUtil.escapeUrl(href); |
198 item.put("href", href); |
236 item.put("href", href); |
199 items.add(item); |
237 items.add(item); |
200 }); |
238 String info = HttpUtil.escapeUrl(href + "/info"); |
|
239 item.put("info", info); |
|
240 } |
201 |
241 |
202 Map<String, String> properties = new HashMap<>(); |
242 Map<String, String> properties = new HashMap<>(); |
203 |
243 |
204 properties.put("mbeanCount", Integer.toString(filteredMBeans.size())); |
244 properties.put("mbeanCount", Integer.toString(filteredMBeans.size())); |
205 |
245 |