modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAdminView.java
| 31 --
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAlertHistoryView.java
| 131 ++++++----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/StorageGWTService.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/StorageGWTServiceImpl.java
| 14 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
| 42 +--
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
| 4
7 files changed, 147 insertions(+), 84 deletions(-)
New commits:
commit ac8a69feb34a5b1b9b3af5035a9170c512811c4e
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Aug 30 15:19:20 2013 +0200
C* UI: Adding a link to the storage node whose child caused the alert to the alert
table.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
index dd7aaa3..db5da39 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
@@ -276,6 +276,10 @@ public class LinkManager {
return link;
}
+
+ public static String getStorageNodeLink(int storageNodeId) {
+ return "#Administration/Topology/StorageNodes/" + storageNodeId;
+ }
public static String getAutodiscoveryQueueLink() {
if (GWT) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAdminView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAdminView.java
index 5526c34..cb3ab83 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAdminView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAdminView.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.admin.storage;
import java.util.EnumSet;
+import java.util.Map;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -27,7 +28,6 @@ import com.smartgwt.client.widgets.tab.events.TabSelectedEvent;
import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.util.collection.ArrayUtils;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
@@ -66,7 +66,7 @@ public class StorageNodeAdminView extends EnhancedVLayout implements
Bookmarkabl
private TabInfo backupTabInfo = new TabInfo(3, new ViewName("Backup"));
private StorageNodeTableView table;
- private int[] resIds;
+ private Map<Integer, Integer> resIdsToStorageNodeIdsMap;
public StorageNodeAdminView() {
super();
@@ -115,11 +115,11 @@ public class StorageNodeAdminView extends EnhancedVLayout implements
Bookmarkabl
} else if (tabInfo.equals(backupTabInfo)) {
tabset.getTabByName(tabInfo.name.getName()).setPane(new Label("in
progress.."));
} else if (tabInfo.equals(alertsTabInfo)) {
- if (resIds != null) {
+ if (resIdsToStorageNodeIdsMap != null) {
tabset.getTabByName(tabInfo.name.getName()).setPane(
- new StorageNodeAlertHistoryView("storageNodesAlerts",
resIds));
+ new StorageNodeAlertHistoryView("storageNodesAlerts",
resIdsToStorageNodeIdsMap));
} else {
-
GWTServiceLookup.getStorageService().findResourcesWithAlertDefinitions(new
AsyncCallback<Integer[]>() {
+
GWTServiceLookup.getStorageService().findResourcesWithAlertDefinitions(new
AsyncCallback<Map<Integer, Integer>>() {
@Override
public void onFailure(Throwable caught) {
Message message = new Message("Unable to render storage node
alert view: "
@@ -128,15 +128,15 @@ public class StorageNodeAdminView extends EnhancedVLayout implements
Bookmarkabl
}
@Override
- public void onSuccess(Integer[] result) {
- if (result == null || result.length == 0) {
+ public void onSuccess(Map<Integer, Integer> result) {
+ if (result == null || result.size() == 0) {
onFailure(new Exception(
"Unfortunately, there are no associated resources
for the available storage nodes. " +
"Check if the agents are running on the machines
where the storage nodes are deployed."));
} else {
- resIds = ArrayUtils.unwrapArray(result);
+ resIdsToStorageNodeIdsMap = result;
tabset.getTabByName(tabInfo.name.getName()).setPane(
- new
StorageNodeAlertHistoryView("storageNodesAlerts", resIds));
+ new
StorageNodeAlertHistoryView("storageNodesAlerts", resIdsToStorageNodeIdsMap));
tabset.selectTab(tabInfo.index);
}
}
@@ -176,19 +176,6 @@ public class StorageNodeAdminView extends EnhancedVLayout implements
Bookmarkabl
}
}
- private void loadResourceType(int resourceTypeId) {
- ResourceTypeRepository.Cache.getInstance().getResourceTypes(
- resourceTypeId,
- EnumSet.of(ResourceTypeRepository.MetadataType.content,
ResourceTypeRepository.MetadataType.operations,
- ResourceTypeRepository.MetadataType.measurements,
ResourceTypeRepository.MetadataType.events,
- ResourceTypeRepository.MetadataType.resourceConfigurationDefinition),
- new ResourceTypeRepository.TypeLoadedCallback() {
- public void onTypesLoaded(ResourceType type) {
-
- }
- });
- }
-
private void scheduleUnacknowledgedAlertsPollingJob(final NamedTab alerts) {
new Timer() {
public void run() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAlertHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAlertHistoryView.java
index 9fa55a6..6005cf6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAlertHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/storage/StorageNodeAlertHistoryView.java
@@ -19,6 +19,9 @@
package org.rhq.enterprise.gui.coregui.client.admin.storage;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Record;
@@ -36,6 +39,7 @@ import org.rhq.core.domain.cloud.StorageNode;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.criteria.StorageNodeCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.collection.ArrayUtils;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
@@ -48,50 +52,35 @@ import
org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
/**
+ * The view for accessing alerts on storage node resource and its children.
+ *
* @author Jirka Kremser
- *
*/
public class StorageNodeAlertHistoryView extends AlertHistoryView {
private boolean isGouped = true;
private final HTMLFlow header;
private final int storageNodeId;
+ private final boolean allStorageNodes;
+ private Map<Integer, Integer> resourceIdToStorageNodeIdMap;
+ private Map<Integer, String> storageNodeIdToAddressMap;
- public StorageNodeAlertHistoryView(String tableTitle, int[] resourceIds) {
- this(tableTitle, resourceIds, null, -1);
+ public StorageNodeAlertHistoryView(String tableTitle, Map<Integer, Integer>
resourceIdToStorageNodeIdMap) {
+ this(tableTitle,
ArrayUtils.unwrapArray(resourceIdToStorageNodeIdMap.keySet().toArray(new Integer[]{})),
null, -1);
+ this.resourceIdToStorageNodeIdMap = resourceIdToStorageNodeIdMap;
}
public StorageNodeAlertHistoryView(String tableTitle, int[] resourceIds, HTMLFlow
header, int storageNodeId) {
super(tableTitle, resourceIds);
this.header = header;
- this.storageNodeId = storageNodeId;
+ this.storageNodeId = -1;
+ this.allStorageNodes = storageNodeId == -1;
+ storageNodeIdToAddressMap = new HashMap<Integer, String>();
}
@Override
protected void onInit() {
super.onInit();
- if (header != null && storageNodeId != -1) {
- StorageNodeCriteria criteria = new StorageNodeCriteria();
- criteria.addFilterId(storageNodeId);
- GWTServiceLookup.getStorageService().findStorageNodesByCriteria(criteria,
- new AsyncCallback<PageList<StorageNode>>() {
- public void onSuccess(final PageList<StorageNode> storageNodes)
{
- if (storageNodes == null || storageNodes.isEmpty() ||
storageNodes.size() != 1) {
- CoreGUI.getErrorHandler().handleError(
-
MSG.view_adminTopology_message_fetchServerFail(String.valueOf(storageNodeId)));
- }
- final StorageNode node = storageNodes.get(0);
- header
- .setContents("<div style='text-align: center;
font-weight: bold; font-size: medium;'> Storage Node ("
- + node.getAddress() + ")</div>");
- }
-
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
-
MSG.view_adminTopology_message_fetchServerFail(String.valueOf(storageNodeId)) + "
"
- + caught.getMessage(), caught);
- }
- });
- }
+ fetchAddresses();
}
@Override
@@ -107,19 +96,20 @@ public class StorageNodeAlertHistoryView extends AlertHistoryView {
|| AncestryUtil.RESOURCE_ANCESTRY.equals(field.getName())) {
continue;
} if (AlertCriteria.SORT_FIELD_CTIME.equals(field.getName())) {
- field.setWidth(240);
- field.setShowGridSummary(true);
- field.setShowGroupSummary(true);
- field.setSummaryFunction(new SummaryFunction() {
- public Object getSummaryValue(Record[] records, ListGridField
field) {
- if (records != null && records.length > 0
&& records[0] != null) {
- Integer resourceId =
records[0].getAttributeAsInt(AncestryUtil.RESOURCE_ID);
- Integer defId =
records[0].getAttributeAsInt("definitionId");
- String url =
LinkManager.getSubsystemAlertDefinitionLink(resourceId, defId);
- return LinkManager.getHref(url, "Link to
Definition");
- } else return "";
- }
- });
+// field.setShowGridSummary(true);
+// field.setShowGroupSummary(true);
+// field.setSummaryFunction(new SummaryFunction() {
+// public Object getSummaryValue(Record[] records,
ListGridField field) {
+// if (records != null && records.length > 0
&& records[0] != null) {
+//
http://localhost:7080/coregui/#Administration/Configuration/AlertDefTempl...
+//
+// Integer resourceId =
records[0].getAttributeAsInt(AncestryUtil.RESOURCE_ID);
+// Integer defId =
records[0].getAttributeAsInt("definitionId");
+// String url =
LinkManager.getSubsystemAlertDefinitionLink(resourceId, defId);
+// return LinkManager.getHref(url, "Link to
Definition");
+// } else return "";
+// }
+// });
field.setCellFormatter(new CellFormatter() {
public String format(Object o, ListGridRecord listGridRecord,
int i, int i1) {
if (listGridRecord.getAttribute("groupValue")
!= null) {
@@ -180,6 +170,24 @@ public class StorageNodeAlertHistoryView extends AlertHistoryView {
ListGridField descriptionField = new
ListGridField("description", MSG.common_title_description());
descriptionField.setCanSortClientOnly(true);
newFields.add(descriptionField);
+
+ if (allStorageNodes) { // all storage nodes
+ ListGridField storageNodeLinkField = new
ListGridField("storageNodeLink", "Storage Node");
+ storageNodeLinkField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int
i, int i1) {
+ if (listGridRecord.getAttribute("groupValue") !=
null) {
+ return (String) o;
+ }
+ Integer resourceId =
listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID);
+ int storageNodeId =
resourceIdToStorageNodeIdMap.get(resourceId);
+ String url = LinkManager.getStorageNodeLink(storageNodeId);
+ return LinkManager.getHref(url,
storageNodeIdToAddressMap.get(storageNodeId));
+
+ }
+ });
+ storageNodeLinkField.setWidth(90);
+ newFields.add(2, storageNodeLinkField);
+ }
return newFields;
}
};
@@ -217,6 +225,49 @@ public class StorageNodeAlertHistoryView extends AlertHistoryView {
CoreGUI.goToView(getDetailUrlFromRecord(record));
}
+ private void fetchAddresses() {
+ if (header != null && !allStorageNodes) {
+ StorageNodeCriteria criteria = new StorageNodeCriteria();
+ criteria.addFilterId(storageNodeId);
+ GWTServiceLookup.getStorageService().findStorageNodesByCriteria(criteria,
+ new AsyncCallback<PageList<StorageNode>>() {
+ public void onSuccess(final PageList<StorageNode> storageNodes)
{
+ if (storageNodes == null || storageNodes.isEmpty() ||
storageNodes.size() != 1) {
+ CoreGUI.getErrorHandler().handleError(
+
MSG.view_adminTopology_message_fetchServerFail(String.valueOf(storageNodeId)));
+ }
+ final StorageNode node = storageNodes.get(0);
+ header
+ .setContents("<div style='text-align: center;
font-weight: bold; font-size: medium;'> Storage Node ("
+ + node.getAddress() + ")</div>");
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+
MSG.view_adminTopology_message_fetchServerFail(String.valueOf(storageNodeId)) + "
"
+ + caught.getMessage(), caught);
+ }
+ });
+ } else { // fetch the addresses of all storage nodes
+ GWTServiceLookup.getStorageService().getStorageNodes(new
AsyncCallback<List<StorageNode>>() {
+ public void onSuccess(final List<StorageNode> storageNodes) {
+ if (storageNodes != null && !storageNodes.isEmpty()) {
+ for (StorageNode node : storageNodes) {
+ storageNodeIdToAddressMap.put(node.getId(),
node.getAddress());
+ }
+ }
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+
MSG.view_adminTopology_message_fetchServerFail(String.valueOf(storageNodeId)) + "
"
+ + caught.getMessage(), caught);
+ }
+ });
+
+ }
+ }
+
private String getDetailUrlFromRecord(ListGridRecord record) {
if (record == null) {
throw new IllegalArgumentException("'record' parameter is
null.");
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/StorageGWTService.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/StorageGWTService.java
index 9470302..f24e4b0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/StorageGWTService.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/StorageGWTService.java
@@ -27,7 +27,6 @@ import java.util.Map;
import com.google.gwt.user.client.rpc.RemoteService;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.cloud.StorageClusterSettings;
import org.rhq.core.domain.cloud.StorageNode;
import org.rhq.core.domain.cloud.StorageNodeConfigurationComposite;
@@ -76,7 +75,9 @@ public interface StorageGWTService extends RemoteService {
PageList<StorageNodeLoadComposite> getStorageNodeComposites() throws
RuntimeException;
- Integer[] findResourcesWithAlertDefinitions() throws RuntimeException;
+ List<StorageNode> getStorageNodes() throws RuntimeException;
+
+ Map<Integer, Integer> findResourcesWithAlertDefinitions() throws
RuntimeException;
Integer[] findResourcesWithAlertDefinitions(StorageNode storageNode) throws
RuntimeException;
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/StorageGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/StorageGWTServiceImpl.java
index 9ce328e..9d6c7ba 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/StorageGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/StorageGWTServiceImpl.java
@@ -111,9 +111,19 @@ public class StorageGWTServiceImpl extends AbstractGWTServiceImpl
implements Sto
}
@Override
- public Integer[] findResourcesWithAlertDefinitions() throws RuntimeException {
+ public List<StorageNode> getStorageNodes() throws RuntimeException {
try {
- return storageNodeManager.findResourcesWithAlertDefinitions();
+ return SerialUtility.prepare(storageNodeManager.getStorageNodes(),
+ "StorageGWTServiceImpl.getStorageNodes");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ } }
+
+ @Override
+ public Map<Integer, Integer> findResourcesWithAlertDefinitions() throws
RuntimeException {
+ try {
+ return
SerialUtility.prepare(storageNodeManager.findResourcesWithAlertDefinitions(),
+ "StorageGWTServiceImpl.findResourcesWithAlertDefinitions");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
index b30e50a..eda6ae1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
@@ -670,12 +670,21 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
}
@Override
- public Integer[] findResourcesWithAlertDefinitions() {
- return this.findResourcesWithAlertDefinitions(null);
+ public Map<Integer, Integer> findResourcesWithAlertDefinitions() {
+ return this.findResourcesWithAlertsToStorageNodeMap(null);
}
@Override
public Integer[] findResourcesWithAlertDefinitions(StorageNode storageNode) {
+ Map<Integer, Integer> result =
findResourcesWithAlertsToStorageNodeMap(storageNode);
+ if (result != null) {
+ Set<Integer> resourceIds = result.keySet();
+ return resourceIds.toArray(new Integer[resourceIds.size()]);
+ }
+ return new Integer[0];
+ }
+
+ private Map<Integer, Integer>
findResourcesWithAlertsToStorageNodeMap(StorageNode storageNode) {
List<StorageNode> initialStorageNodes = getStorageNodes();
if (storageNode == null) {
initialStorageNodes = getStorageNodes();
@@ -684,29 +693,30 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
StorageNode.class, storageNode.getId()) : storageNode);
}
+ Map<Integer, Integer> resourceIdsToStorageNodeMap = new HashMap<Integer,
Integer>();
Queue<Resource> unvisitedResources = new LinkedList<Resource>();
+
+ // we are assuming here that the set of resources is disjunktive across different
storage nodes
for (StorageNode initialStorageNode : initialStorageNodes) {
if (initialStorageNode.getResource() != null) {
unvisitedResources.add(initialStorageNode.getResource());
- }
- }
-
- List<Integer> resourceIdsWithAlertDefinitions = new
ArrayList<Integer>();
- while (!unvisitedResources.isEmpty()) {
- Resource resource = unvisitedResources.poll();
- if (resource.getAlertDefinitions() != null) {
- resourceIdsWithAlertDefinitions.add(resource.getId());
- }
+ while (!unvisitedResources.isEmpty()) {
+ Resource resource = unvisitedResources.poll();
+ if (resource.getAlertDefinitions() != null) {
+ resourceIdsToStorageNodeMap.put(resource.getId(),
initialStorageNode.getId());
+ }
- Set<Resource> childResources = resource.getChildResources();
- if (childResources != null) {
- for (Resource child : childResources) {
- unvisitedResources.add(child);
+ Set<Resource> childResources = resource.getChildResources();
+ if (childResources != null) {
+ for (Resource child : childResources) {
+ unvisitedResources.add(child);
+ }
+ }
}
}
}
- return resourceIdsWithAlertDefinitions.toArray(new
Integer[resourceIdsWithAlertDefinitions.size()]);
+ return resourceIdsToStorageNodeMap;
}
@Override
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
index b689b8b..f740a27 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
@@ -128,9 +128,9 @@ public interface StorageNodeManagerLocal {
* have alert definitions. This can be used by the resource criteria queries to find
* all alerts triggered for storage nodes resources.
*
- * @return resource ids
+ * @return map with resource (with defined alert) id as a key and storage node id as
a value
*/
- Integer[] findResourcesWithAlertDefinitions();
+ Map<Integer, Integer> findResourcesWithAlertDefinitions();
/**
* Find ids for all resources and sub-resources, of the specified storage node, that