modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java | 21 ++++-- modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java | 24 ++++--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java | 8 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceBossGWTService.java | 5 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 6 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java | 11 --- modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 3 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceBossBean.java | 19 ++--- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 34 ++++++++++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java | 10 ++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java | 30 +++++--- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java | 8 ++ 14 files changed, 130 insertions(+), 54 deletions(-)
New commits: commit 330fc2f698e7001fd3347c1284bc2ad33d92557e Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Jan 21 16:38:28 2011 -0500
Don't generate errors when trying to switch to an invalid subtab, this can happen due to our attempt at sticky tabbing. If it's not there just go to the default subtab silently.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java index 0ad75df..2242211 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java @@ -216,7 +216,8 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo // Do *not* select the tab and trigger the tab selected event until the subtab has been selected first. subtab = (subtabName != null) ? tab.getSubTabByName(subtabName) : tab.getDefaultSubTab(); if (subtab == null || tab.getLayout().isSubTabDisabled(subtab)) { - CoreGUI.getErrorHandler().handleError(MSG.view_tabs_invalidSubTab(subtabName)); + // due to our attempt to perform sticky tabbing we may request an invalid subtab when + // switching resources. Just silently go to the default tab/subtab. subtab = tab.getLayout().getDefaultSubTab(); } tab.getLayout().selectSubTab(subtab);
commit 6807fb472cdb8d7f611423327ad505e79089b779 Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Jan 21 16:21:50 2011 -0500
Fix uninventory messages that say "delete". this confuses users.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java index ff8d83c..51f5a28 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java @@ -166,19 +166,19 @@ public class ResourceSearchView extends Table { availabilityField);
addTableAction(extendLocatorId("Uninventory"), MSG.common_button_uninventory(), MSG - .view_inventory_resources_deleteConfirm(), new AbstractTableAction(TableActionEnablement.ANY) { + .view_inventory_resources_uninventoryConfirm(), new AbstractTableAction(TableActionEnablement.ANY) { public void executeAction(ListGridRecord[] selection, Object actionValue) { int[] resourceIds = TableUtility.getIds(selection); ResourceGWTServiceAsync resourceManager = GWTServiceLookup.getResourceService();
resourceManager.uninventoryResources(resourceIds, new AsyncCallback<List<Integer>>() { public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError(MSG.view_inventory_resources_deleteFailed(), caught); + CoreGUI.getErrorHandler().handleError(MSG.view_inventory_resources_uninventoryFailed(), caught); }
public void onSuccess(List<Integer> result) { CoreGUI.getMessageCenter().notify( - new Message(MSG.view_inventory_resources_deleteSuccessful(), Severity.Info)); + new Message(MSG.view_inventory_resources_uninventorySuccessful(), Severity.Info));
ResourceSearchView.this.refresh(); } diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties index 424cf7b..b8b4d13 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties @@ -1305,6 +1305,9 @@ view_inventory_resource_loadFailed = Resource with id [{0}] does not exist or is view_inventory_resources_deleteConfirm = Are you sure you want to delete the selected resources? view_inventory_resources_deleteSuccessful = You have successfully deleted the selected resources view_inventory_resources_deleteFailed = Failed to delete the selected resources +view_inventory_resources_uninventoryConfirm = Are you sure you want to uninventory the selected resources? +view_inventory_resources_uninventorySuccessful = You have successfully uninventoried the selected resources +view_inventory_resources_uninventoryFailed = Failed to uninventory the selected resources view_inventory_resources_loadFailed = Failed to load resource composite data view_inventory_resources_title = Member Resources view_inventory_resources_title_children = Child Resources
commit a3afdeaa8bc543f6c7b81945b36377f96b02df2e Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Jan 21 16:12:42 2011 -0500
Speed up InventorySummary by reducing the number of resource/group queries/dbRoundTrips from 5 to 2. - remove some now unused queries and methods
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java index dff6d58..dd14c13 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java @@ -307,6 +307,17 @@ import org.rhq.core.domain.util.Summary; + " FROM Resource res " // + " WHERE res.resourceType.category = :category " // + " AND (:inventoryStatus = res.inventoryStatus OR :inventoryStatus is null) "), + @NamedQuery(name = Resource.QUERY_FIND_RESOURCE_SUMMARY_BY_INVENTORY_STATUS, query = "" // + + "SELECT res.resourceType.category, count(*) " // + + " FROM Resource res " // + + " WHERE res.id IN (SELECT rr.id FROM Resource rr JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s WHERE s = :subject)" + + " AND (:inventoryStatus = res.inventoryStatus OR :inventoryStatus is null) " // + + " GROUP BY res.resourceType.category "), + @NamedQuery(name = Resource.QUERY_FIND_RESOURCE_SUMMARY_BY_INVENTORY_STATUS_ADMIN, query = "" // + + "SELECT res.resourceType.category, count(*) " // + + " FROM Resource res " // + + " WHERE (:inventoryStatus = res.inventoryStatus OR :inventoryStatus is null) " // + + " GROUP BY res.resourceType.category "),
// Returns all platforms that is either of a given inventory status itself or // one of its top level servers have one of the inventory statuses (for auto-discovery queue). @@ -347,12 +358,9 @@ import org.rhq.core.domain.util.Summary; + " WHERE res.resourceType = :type " // + " AND res.id IN (SELECT rr.id FROM Resource rr JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s WHERE s = :subject)" + " AND res.id IN ( :ids ) "), - @NamedQuery(name = Resource.QUERY_FIND_IDS_BY_TYPE_IDS, query = - "SELECT r.id " - + "FROM Resource r " + @NamedQuery(name = Resource.QUERY_FIND_IDS_BY_TYPE_IDS, query = "SELECT r.id " + "FROM Resource r " + "WHERE r.resourceType.id IN (:resourceTypeIds)"), - @NamedQuery(name = Resource.QUERY_FIND_COUNT_BY_TYPES, query = - "SELECT COUNT(r) FROM Resource r WHERE r.resourceType.id IN (:resourceTypeIds)"), + @NamedQuery(name = Resource.QUERY_FIND_COUNT_BY_TYPES, query = "SELECT COUNT(r) FROM Resource r WHERE r.resourceType.id IN (:resourceTypeIds)"), @NamedQuery(name = Resource.QUERY_FIND_BY_TYPE_AND_IDS_ADMIN, query = "" // + "SELECT res " // + " FROM Resource res " // @@ -788,6 +796,9 @@ public class Resource implements Comparable<Resource>, Serializable { public static final String QUERY_FIND_BY_CATEGORY_AND_INVENTORY_STATUS = "Resource.findByCategoryAndInventoryStatus"; public static final String QUERY_FIND_BY_CATEGORY_AND_INVENTORY_STATUS_ADMIN = "Resource.findByCategoryAndInventoryStatus_admin";
+ public static final String QUERY_FIND_RESOURCE_SUMMARY_BY_INVENTORY_STATUS = "Resource.findResourceSummaryByInventoryStatus"; + public static final String QUERY_FIND_RESOURCE_SUMMARY_BY_INVENTORY_STATUS_ADMIN = "Resource.findResourceSummaryByInventoryStatus_admin"; + public static final String QUERY_FIND_QUEUED_PLATFORMS_BY_INVENTORY_STATUS = "Resource.findQueuedPlatformsByInventoryStatus";
public static final String QUERY_FIND_BY_TYPE = "Resource.findByType"; diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java index 810c8df..0a34e0c 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java @@ -103,12 +103,18 @@ import org.rhq.core.domain.tagging.Tag; + " AND (type.plugin = :pluginName OR :pluginName is null) " + " AND (type.category = :category OR :category is null) ) ) "),
- @NamedQuery(name = ResourceGroup.QUERY_FIND_ALL_BY_CATEGORY_COUNT, query = "SELECT COUNT(DISTINCT rg) " - + " FROM ResourceGroup AS rg JOIN rg.roles r JOIN r.subjects s " + " WHERE s = :subject " - + " AND rg.visible = true " + " AND rg.groupCategory = :category "), - - @NamedQuery(name = ResourceGroup.QUERY_FIND_ALL_BY_CATEGORY_COUNT_admin, query = "SELECT COUNT(rg) " - + " FROM ResourceGroup AS rg " + " WHERE rg.groupCategory = :category " + " AND rg.visible = true "), + @NamedQuery(name = ResourceGroup.QUERY_FIND_RESOURCE_GROUP_SUMMARY, query = "" // + + "SELECT rg.groupCategory, COUNT(DISTINCT rg) " // + + " FROM ResourceGroup AS rg JOIN rg.roles r JOIN r.subjects s " // + + " WHERE s = :subject " // + + " AND rg.visible = true " // + + " GROUP BY rg.groupCategory "), + + @NamedQuery(name = ResourceGroup.QUERY_FIND_RESOURCE_GROUP_SUMMARY_admin, query = "" // + + "SELECT rg.groupCategory, COUNT(rg) " // + + " FROM ResourceGroup AS rg " // + + " WHERE rg.visible = true " // + + " GROUP BY rg.groupCategory "),
@NamedQuery(name = ResourceGroup.QUERY_FIND_BY_NAME, query = "SELECT rg FROM ResourceGroup AS rg WHERE LOWER(rg.name) = LOWER(:name)"), @NamedQuery(name = ResourceGroup.QUERY_FIND_BY_CLUSTER_KEY, query = "SELECT rg FROM ResourceGroup AS rg WHERE rg.clusterKey = :clusterKey"), @@ -192,8 +198,8 @@ public class ResourceGroup extends Group { private static final long serialVersionUID = 1L;
//------- Names of Named Queries ------- - public static final String QUERY_FIND_ALL_BY_CATEGORY_COUNT = "ResourceGroup.findAllByCategory_Count"; - public static final String QUERY_FIND_ALL_BY_CATEGORY_COUNT_admin = "ResourceGroup.findAllByCategory_Count_admin"; + public static final String QUERY_FIND_RESOURCE_GROUP_SUMMARY = "ResourceGroup.findResourceGroupSummary"; + public static final String QUERY_FIND_RESOURCE_GROUP_SUMMARY_admin = "ResourceGroup.findResourceGroupSummary_admin";
public static final String QUERY_FIND_BY_NAME = "ResourceGroup.findByName"; public static final String QUERY_FIND_BY_CLUSTER_KEY = "ResourceGroup.findByClusterKey"; @@ -552,7 +558,7 @@ public class ResourceGroup extends Group { this.roles.add(role); }
- public void removeRole(Role role) { + public void removeRole(Role role) { this.roles.remove(role); }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java index f308609..70fbc3e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java @@ -76,7 +76,7 @@ public class InventorySummaryPortlet extends LocatableVLayout implements AutoRef form.destroy(); }
- resourceBossService.getInventorySummaryForLoggedInUser(new AsyncCallback<InventorySummary>() { + resourceBossService.getInventorySummary(new AsyncCallback<InventorySummary>() { public void onFailure(Throwable throwable) { CoreGUI.getErrorHandler().handleError(MSG.view_portlet_inventory_error1(), throwable); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceBossGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceBossGWTService.java index 30531ad..afa44cb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceBossGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceBossGWTService.java @@ -25,7 +25,6 @@ package org.rhq.enterprise.gui.coregui.client.gwt;
import com.google.gwt.user.client.rpc.RemoteService;
-import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.resource.InventorySummary;
/** @@ -33,8 +32,6 @@ import org.rhq.core.domain.resource.InventorySummary; */ public interface ResourceBossGWTService extends RemoteService {
- InventorySummary getInventorySummaryForLoggedInUser() throws RuntimeException; - - InventorySummary getInventorySummary(Subject user) throws RuntimeException; + InventorySummary getInventorySummary() throws RuntimeException;
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java index 046443d..34019fe 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java @@ -23,7 +23,6 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.resource.InventorySummary; import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.ResourceBossGWTService; @@ -39,14 +38,10 @@ public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implement
private ResourceBossLocal resourceBoss = LookupUtil.getResourceBoss();
- public InventorySummary getInventorySummaryForLoggedInUser() { - Subject subject = getSessionSubject(); - return getInventorySummary(subject); - } - - public InventorySummary getInventorySummary(Subject user) throws RuntimeException { + public InventorySummary getInventorySummary() { try { - return resourceBoss.getInventorySummary(user); + // note: this does not need to be sent through SerialUtility.prepare as it has no entities + return resourceBoss.getInventorySummary(getSessionSubject()); } catch (Throwable t) { throw new RuntimeException(ThrowableUtil.getAllMessages(t)); } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceBossBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceBossBean.java index ce7449f..a8480b6 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceBossBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceBossBean.java @@ -24,8 +24,6 @@ import javax.ejb.Stateless; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.domain.resource.InventorySummary; -import org.rhq.core.domain.resource.ResourceCategory; -import org.rhq.core.domain.resource.group.GroupCategory; import org.rhq.enterprise.server.measurement.MeasurementScheduleManagerLocal; import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal; import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionManagerLocal; @@ -52,14 +50,15 @@ public class ResourceBossBean implements ResourceBossLocal {
public InventorySummary getInventorySummary(Subject user) { InventorySummary summary = new InventorySummary(); - summary.setPlatformCount(resourceManager.getResourceCountByCategory(user, ResourceCategory.PLATFORM, - InventoryStatus.COMMITTED)); - summary.setServerCount(resourceManager.getResourceCountByCategory(user, ResourceCategory.SERVER, - InventoryStatus.COMMITTED)); - summary.setServiceCount(resourceManager.getResourceCountByCategory(user, ResourceCategory.SERVICE, - InventoryStatus.COMMITTED)); - summary.setCompatibleGroupCount(groupManager.getResourceGroupCountByCategory(user, GroupCategory.COMPATIBLE)); - summary.setMixedGroupCount(groupManager.getResourceGroupCountByCategory(user, GroupCategory.MIXED)); + + int[] categoryCounts = resourceManager.getResourceCountSummary(user, InventoryStatus.COMMITTED); + summary.setPlatformCount(categoryCounts[0]); + summary.setServerCount(categoryCounts[1]); + summary.setServiceCount(categoryCounts[2]); + + categoryCounts = groupManager.getResourceGroupCountSummary(user); + summary.setMixedGroupCount(categoryCounts[0]); + summary.setCompatibleGroupCount(categoryCounts[1]);
summary.setGroupDefinitionCount(groupDefinitionManager.getGroupDefinitionCount(user));
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java index 5f62fa9..e9d3b30 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java @@ -1091,6 +1091,38 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage return new PageList<Resource>(results, (int) count, pageControl); }
+ @SuppressWarnings("unchecked") + public int[] getResourceCountSummary(Subject user, InventoryStatus status) { + Query query; + if (authorizationManager.isInventoryManager(user)) { + query = entityManager.createNamedQuery(Resource.QUERY_FIND_RESOURCE_SUMMARY_BY_INVENTORY_STATUS_ADMIN); + } else { + query = entityManager.createNamedQuery(Resource.QUERY_FIND_RESOURCE_SUMMARY_BY_INVENTORY_STATUS); + query.setParameter("subject", user); + } + + query.setParameter("inventoryStatus", status); + + int[] counts = new int[3]; + List<Object[]> resultList = query.getResultList(); + + for (Object[] row : resultList) { + switch ((ResourceCategory) row[0]) { + case PLATFORM: + counts[0] = ((Long) row[1]).intValue(); + break; + case SERVER: + counts[1] = ((Long) row[1]).intValue(); + break; + case SERVICE: + counts[2] = ((Long) row[1]).intValue(); + break; + } + } + + return counts; + } + public int getResourceCountByCategory(Subject user, ResourceCategory category, InventoryStatus status) { Query queryCount; if (authorizationManager.isInventoryManager(user)) { @@ -1211,6 +1243,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage return result; }
+ @SuppressWarnings("unchecked") public List<AutoGroupComposite> findResourcesAutoGroups(Subject subject, int[] resourceIds) { List<AutoGroupComposite> results = new ArrayList<AutoGroupComposite>(); List<Integer> ids = ArrayUtils.wrapInList(resourceIds); @@ -2009,6 +2042,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage String resourceKey = (String) prefetched[i++];
Integer parentId = (Integer) prefetched[i++]; + @SuppressWarnings("unused") String parentName = (String) prefetched[i++];
AvailabilityType availType = (AvailabilityType) prefetched[i++]; diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java index 38d68b6..88a82e0 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java @@ -218,7 +218,15 @@ public interface ResourceManagerLocal { String pluginName, Resource parentResource, String searchString, boolean attachParentResource, PageControl pageControl);
- // TODO GH: This would be more useful if it used a groupby to return a map of categories to their size + /** + * Get a summary of counts, by category, of the user's viewable resources having the provided inventory status. + * + * @param user + * @param status + * @return A 3 element int array with counts for platform, service, service as a[0], a[1], a[2], respectively. + */ + int[] getResourceCountSummary(Subject user, InventoryStatus status); + int getResourceCountByCategory(Subject user, ResourceCategory category, InventoryStatus status);
int getResourceCountByTypeAndIds(Subject user, ResourceType type, int[] resourceIds); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java index a6c26e2..f4eb0b5 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java @@ -386,21 +386,31 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso group.getAlertDefinitions().size(); }
- public int getResourceGroupCountByCategory(Subject subject, GroupCategory category) { - Query queryCount; - - if (authorizationManager.isInventoryManager(subject)) { - queryCount = entityManager.createNamedQuery(ResourceGroup.QUERY_FIND_ALL_BY_CATEGORY_COUNT_admin); + @SuppressWarnings("unchecked") + public int[] getResourceGroupCountSummary(Subject user) { + Query query; + if (authorizationManager.isInventoryManager(user)) { + query = entityManager.createNamedQuery(ResourceGroup.QUERY_FIND_RESOURCE_GROUP_SUMMARY_admin); } else { - queryCount = entityManager.createNamedQuery(ResourceGroup.QUERY_FIND_ALL_BY_CATEGORY_COUNT); - queryCount.setParameter("subject", subject); + query = entityManager.createNamedQuery(ResourceGroup.QUERY_FIND_RESOURCE_GROUP_SUMMARY); + query.setParameter("subject", user); }
- queryCount.setParameter("category", category); + int[] counts = new int[2]; + List<Object[]> resultList = query.getResultList();
- long count = (Long) queryCount.getSingleResult(); + for (Object[] row : resultList) { + switch ((GroupCategory) row[0]) { + case MIXED: + counts[0] = ((Long) row[1]).intValue(); + break; + case COMPATIBLE: + counts[1] = ((Long) row[1]).intValue(); + break; + } + }
- return (int) count; + return counts; }
@RequiredPermission(Permission.MANAGE_INVENTORY) diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java index a0481b1..19cf42b 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java @@ -67,7 +67,13 @@ public interface ResourceGroupManagerLocal { ResourceGroup getResourceGroupById(Subject user, int id, GroupCategory category) throws ResourceGroupNotFoundException;
- int getResourceGroupCountByCategory(Subject subject, GroupCategory category); + /** + * Get a summary of counts, by category, of the user's assigned, visible groups. + * + * @param user + * @return A 2 element int array with counts for mixed, compatible as a[0], a[1] respectively. + */ + int[] getResourceGroupCountSummary(Subject user);
void enableRecursivityForGroup(Subject subject, int groupId) throws ResourceGroupNotFoundException, ResourceGroupUpdateException;
commit bbadd202d97f72963f89684d08be5b8c4dbe5bd7 Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Jan 21 14:23:57 2011 -0500
Prevent a down agent from ruining the entire load of PlatformSummaryPortlet. (when a Live data fetch fails).
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java index 2a3f023..95dd1df 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java @@ -138,7 +138,13 @@ public class PlatformSummaryPortlet extends LocatableListGrid implements Portlet measurementService.findLiveData(resource.getId(), pmd.getDefinitionIds(), new AsyncCallback<Set<MeasurementData>>() { public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError(MSG.view_portlet_platform_type_error_1(), caught); + // this can happen if the agent is down, don't crash out of the entire portlet + record.setAttribute("cpu", MSG.common_val_na()); + record.setAttribute("memory", MSG.common_val_na()); + + setSortField(1); + refreshFields(); + markForRedraw(); }
public void onSuccess(Set<MeasurementData> result) {
rhq-commits@lists.fedorahosted.org