private List<String> createTreeForStatsProvider(TreeNode parentNode, Object statsProvider) { /* construct monitoring tree at PluginPoint using subTreePath */ List<String> childNodeNames = new ArrayList(); /* retrieve ManagedAttribute attribute id (v2 compatible) and method names */ /* Check for custom reset method and store for later to be called instead of standard reset methods on Statistic classes*/ for (Method m : statsProvider.getClass().getMethods()) { ManagedAttribute ma = m.getAnnotation(ManagedAttribute.class); Reset resetMeth = m.getAnnotation(Reset.class); if (resetMeth != null) { StatsProviderRegistryElement spre = this.statsProviderRegistry.getStatsProviderRegistryElement(statsProvider); spre.setResetMethod(m); } if (ma != null) { String methodName = m.getName(); String id = ma.id(); if ((id == null) || id.isEmpty()) { // if id not specified, derive from method name String methodNameLower = methodName.toLowerCase(Locale.ENGLISH); if (methodNameLower.startsWith("get") && methodNameLower.length() > 3) { id = methodNameLower.substring(3); } } TreeNode attrNode = TreeNodeFactory.createMethodInvoker(id, statsProvider, id, m); parentNode.addChild(attrNode); childNodeNames.add(attrNode.getName()); } } return childNodeNames; }
private void updateTreeNodes(StatsProviderRegistryElement spre, boolean enable) { // Enable/Disable the child TreeNodes String parentNodePath = spre.getParentTreeNodePath(); List<String> childNodeNames = spre.getChildTreeNodeNames(); TreeNode rootNode = mrdr.get(instanceName); if (rootNode != null) { // This has to return one node List<TreeNode> nodeList = rootNode.getNodes(parentNodePath, false, true); TreeNode parentNode = nodeList.get(0); // For each child Node, enable it Collection<TreeNode> childNodes = parentNode.getChildNodes(); boolean hasUpdatedNode = false; for (TreeNode childNode : childNodes) { if (childNodeNames.contains(childNode.getName())) { // Enabling or Disabling the child node (based on enable flag) if (childNode.isEnabled() != enable) { childNode.setEnabled(enable); hasUpdatedNode = true; } } } if (!hasUpdatedNode) return; // Make sure the tree path is affected with the changes. if (enable) { enableTreeNode(parentNode); } else { disableTreeNode(parentNode); } } }
public void unregister(Object statsProvider) { // Unregisters the statsProvider try { StatsProviderRegistryElement spre = statsProviderRegistry.getStatsProviderRegistryElement(statsProvider); if (spre == null) { logger.log( Level.INFO, invalidStatsProvider, new Object[] {statsProvider.getClass().getName()}); return; } // get the Parent node and delete all children nodes (only that we know of) String parentNodePath = spre.getParentTreeNodePath(); List<String> childNodeNames = spre.getChildTreeNodeNames(); TreeNode rootNode = mrdr.get(instanceName); if ((rootNode != null) && (parentNodePath != null)) { // This has to return one node List<TreeNode> nodeList = rootNode.getNodes(parentNodePath, false, true); if (nodeList.size() > 0) { TreeNode parentNode = nodeList.get(0); // Remove each of the child nodes Collection<TreeNode> childNodes = parentNode.getChildNodes(); for (TreeNode childNode : childNodes) { if (childNodeNames.contains(childNode.getName())) { parentNode.removeChild(childNode); } } if (!parentNode.hasChildNodes()) removeParentNode(parentNode); } } // get the handles and unregister the listeners from Flashlight Collection<ProbeClientMethodHandle> handles = spre.getHandles(); if (handles != null) { for (ProbeClientMethodHandle handle : handles) { // handle.remove????? Mahesh? // TODO IMPLEMENTATION // For now disable the handle => remove the client from invokerlist handle.disable(); } } // unregister the statsProvider from Gmbal if (spre.getManagedObjectManager() != null) unregisterGmbal(spre); // Unregister from the MonitoringDataTreeRegistry and the map entries statsProviderRegistry.unregisterStatsProvider(statsProvider); } catch (Exception ex) { String msg = MessageFormat.format(errorUnregisteringStatsProvider, statsProvider.getClass().getName()); logger.log(Level.SEVERE, msg, ex); } }
private void resetChildNodeStatistics( String parentNodePath, List<String> childNodeNames, String statsProviderName) { TreeNode rootNode = mrdr.get(instanceName); if (rootNode != null) { List<TreeNode> nodeList = rootNode.getNodes(parentNodePath, false, true); if (nodeList.size() > 0) { TreeNode parentNode = nodeList.get(0); Collection<TreeNode> childNodes = parentNode.getChildNodes(); for (TreeNode childNode : childNodes) { if (childNodeNames.contains(childNode.getName())) { invokeStatisticResetMethod(childNode.getValue()); } } } else { logger.log(Level.WARNING, nodeNotFound, new Object[] {parentNodePath, statsProviderName}); } } }