ar.setSuccess();
String currentInstanceName = System.getProperty("com.sun.aas.instanceName");
boolean isRunningOnDAS = "server".equals(currentInstanceName); //TODO this needs to come from an API. Check with admin team
MonitoringRuntimeDataRegistry monitoringRegistry =habitat.getRemoteLocator().getService(MonitoringRuntimeDataRegistry.class);
TreeNode rootNode = monitoringRegistry.get(currentInstanceName);
//The pathSegments will always contain "domain". Discard it
pathSegments = pathSegments.subList(1, pathSegments.size());
if(!pathSegments.isEmpty()) {
PathSegment lastSegment = pathSegments.get(pathSegments.size() - 1);
if(lastSegment.getPath().isEmpty()) { // if there is a trailing '/' (like monitoring/domain/), a spurious pathSegment is added. Discard it.
pathSegments = pathSegments.subList(0,pathSegments.size() - 1);
}
}
if(!pathSegments.isEmpty() ) {
String firstPathElement = pathSegments.get(0).getPath();
if(firstPathElement.equals(currentInstanceName)) { // Query for current instance. Execute it
//iterate over pathsegments and build a dotted name to look up in monitoring registry
StringBuilder pathInMonitoringRegistry = new StringBuilder();
for(PathSegment pathSegment : pathSegments.subList(1,pathSegments.size()) ) {
if(pathInMonitoringRegistry.length() > 0 ) {
pathInMonitoringRegistry.append('.');
}
pathInMonitoringRegistry.append(pathSegment.getPath().replaceAll("\\.", "\\\\.")); // Need to escape '.' before passing it to monitoring code
}
TreeNode resultNode = pathInMonitoringRegistry.length() > 0 ? rootNode.getNode(pathInMonitoringRegistry.toString()) : rootNode;
if (resultNode != null) {
List<TreeNode> list = new ArrayList<TreeNode>();
if (resultNode.hasChildNodes()) {
list.addAll(resultNode.getEnabledChildNodes());
} else {
list.add(resultNode);
}
constructEntity(list, ar);
responseBuilder.entity(new ActionReportResult(ar));