use of org.glassfish.flashlight.datatree.TreeNode in project Payara by payara.
the class StatsProviderManagerDelegateImpl method createSubTreeNode.
private TreeNode createSubTreeNode(TreeNode parent, String child) {
TreeNode childNode = parent.getChild(child);
if (childNode == null) {
childNode = TreeNodeFactory.createTreeNode(child, null, child);
parent.addChild(childNode);
} else {
// the childNode is found, but ensure that its enabled
enableTreeNode(childNode);
}
return childNode;
}
use of org.glassfish.flashlight.datatree.TreeNode in project Payara by payara.
the class JVMStatsImpl method getFirstTreeNodeAsLong.
// @author bnevins
private long getFirstTreeNodeAsLong(TreeNode parent, String name) {
List<TreeNode> nodes = parent.getNodes(name);
if (!nodes.isEmpty()) {
TreeNode node = nodes.get(0);
Object val = node.getValue();
if (val != null) {
try {
CountStatistic cs = (CountStatistic) val;
return cs.getCount();
} catch (Exception e) {
// TODO: handle exception
}
}
}
return 0L;
}
use of org.glassfish.flashlight.datatree.TreeNode in project Payara by payara.
the class JVMStatsImpl method process.
public ActionReport process(final ActionReport report, final String filter) {
if (monitoringService != null) {
String level = monitoringService.getMonitoringLevel("jvm");
if ((level != null) && (level.equals(ContainerMonitoring.LEVEL_OFF))) {
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
report.setMessage(localStrings.getLocalString("level.off", "Monitoring level for jvm is off"));
return report;
}
}
if (mrdr == null) {
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
report.setMessage(localStrings.getLocalString("mrdr.null", "MonitoringRuntimeDataRegistry is null"));
return report;
}
TreeNode serverNode = mrdr.get("server");
if (serverNode == null) {
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
report.setMessage(localStrings.getLocalString("mrdr.null", "MonitoringRuntimeDataRegistry server node is null"));
return report;
}
if ((filter != null) && (filter.length() > 0)) {
if ("heapmemory".equals(filter)) {
return (heapMemory(report, serverNode));
} else if ("nonheapmemory".equals(filter)) {
return (nonHeapMemory(report, serverNode));
}
} else {
return (v2JVM(report, serverNode));
}
return null;
}
use of org.glassfish.flashlight.datatree.TreeNode in project Payara by payara.
the class MonitoringResource method constructEntity.
private void constructEntity(List<TreeNode> nodeList, RestActionReporter ar) {
Map<String, Object> entity = new TreeMap<String, Object>();
Map<String, String> links = new TreeMap<String, String>();
for (TreeNode node : nodeList) {
// process only the leaf nodes, if any
if (!node.hasChildNodes()) {
// getValue() on leaf node will return one of the following -
// Statistic object, String object or the object for primitive type
Object value = node.getValue();
if (value != null) {
try {
if (value instanceof Statistic) {
Statistic statisticObject = (Statistic) value;
entity.put(node.getName(), getStatistic(statisticObject));
} else if (value instanceof Stats) {
Map<String, Map> subMap = new TreeMap<String, Map>();
for (Statistic statistic : ((Stats) value).getStatistics()) {
subMap.put(statistic.getName(), getStatistic(statistic));
}
entity.put(node.getName(), subMap);
} else {
entity.put(node.getName(), jsonValue(value));
}
} catch (Exception exception) {
// log exception message as warning
}
}
} else {
String name = node.getName();
// Grizzly will barf if it sees backslash
name = name.replace("\\.", ".");
links.put(name, getElementLink(uriInfo, name));
}
}
ar.getExtraProperties().put("entity", entity);
ar.getExtraProperties().put("childResources", links);
}
use of org.glassfish.flashlight.datatree.TreeNode in project Payara by payara.
the class MonitoringResource method getChildNodes.
@GET
@Path("domain{path:.*}")
@Produces({ MediaType.TEXT_HTML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response getChildNodes(@PathParam("path") List<PathSegment> pathSegments) {
Response.ResponseBuilder responseBuilder = Response.status(OK);
RestActionReporter ar = new RestActionReporter();
ar.setActionDescription("Monitoring Data");
ar.setMessage("");
ar.setSuccess();
String currentInstanceName = System.getProperty("com.sun.aas.instanceName");
// TODO this needs to come from an API. Check with admin team
boolean isRunningOnDAS = "server".equals(currentInstanceName);
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('.');
}
// Need to escape '.' before passing it to monitoring code
pathInMonitoringRegistry.append(pathSegment.getPath().replaceAll("\\.", "\\\\."));
}
TreeNode resultNode = pathInMonitoringRegistry.length() > 0 && rootNode != null ? 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));
} else {
// No monitoring data, so nothing to list
responseBuilder.status(NOT_FOUND);
ar.setFailure();
responseBuilder.entity(new ActionReportResult(ar));
}
} else {
// firstPathElement != currentInstanceName => A proxy request
if (isRunningOnDAS) {
// Attempt to forward to instance if running on Das
// TODO validate that firstPathElement corresponds to a valid server name
Properties proxiedResponse = new MonitoringProxyImpl().proxyRequest(uriInfo, Util.getJerseyClient(), habitat.getRemoteLocator());
ar.setExtraProperties(proxiedResponse);
responseBuilder.entity(new ActionReportResult(ar));
} else {
// Not running on DAS and firstPathElement != currentInstanceName => Reject the request as invalid
return Response.status(FORBIDDEN).build();
}
}
} else {
// Called for /monitoring/domain/
List<TreeNode> list = new ArrayList<TreeNode>();
if (rootNode != null) {
// Add currentInstance to response
list.add(rootNode);
}
constructEntity(list, ar);
if (isRunningOnDAS) {
// Add links to instances from the cluster
Domain domain = habitat.getRemoteLocator().getService(Domain.class);
Map<String, String> links = (Map<String, String>) ar.getExtraProperties().get("childResources");
for (Server s : domain.getServers().getServer()) {
if (!s.getName().equals("server")) {
// add all non 'server' instances
links.put(s.getName(), getElementLink(uriInfo, s.getName()));
}
}
}
responseBuilder.entity(new ActionReportResult(ar));
}
return responseBuilder.build();
}
Aggregations