modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ImageManager.java
| 50
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
| 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java
| 618 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
| 99 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
| 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
| 9
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
| 13
7 files changed, 810 insertions(+), 2 deletions(-)
New commits:
commit c68e0e42d9b2bdb075372e87e1b62f5e1fbcc000
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Mon Dec 20 21:04:46 2010 -0500
initial commit of resource/activity. There are several jsf pieces that are
non-trivial to replace.
Will keep both iframe and gwt versions until more functionality can be moved.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ImageManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ImageManager.java
index 576af53..7b79f88 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ImageManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ImageManager.java
@@ -2,6 +2,7 @@ package org.rhq.enterprise.gui.coregui.client;
import org.rhq.core.domain.alert.AlertPriority;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
+import org.rhq.core.domain.event.EventSeverity;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.operation.OperationRequestStatus;
@@ -364,4 +365,53 @@ public class ImageManager {
public static String getLockedIcon() {
return "global/Locked_16.png";
}
+
+ /**
+ * Returns the configuration update status icon. If status is null, returns
+ * the plain, unbadged, configuration icon.
+ */
+ public static String getConfigurationUpdateResultsIcon(ConfigurationUpdateStatus
status) {
+ String icon = "";
+ if (status != null) {
+ switch (status) {
+ case INPROGRESS:
+ icon = "_inprogress";
+ break;
+ case SUCCESS:
+ icon = "_ok";
+ break;
+ case FAILURE:
+ icon = "_failed";
+ break;
+ }
+ }
+
+ return "subsystems/configure/Configure" + icon + "_16.png";
+
+ }
+
+ public static String getEventSeverityIcon(EventSeverity severity) {
+ String icon = "";
+ if (severity != null) {
+ switch (severity) {
+ case DEBUG:
+ icon = "_debug";
+ break;
+ case INFO:
+ icon = "_info";
+ break;
+ case WARN:
+ icon = "_warning";
+ break;
+ case ERROR:
+ icon = "_info";
+ break;
+ case FATAL:
+ icon = "_fatal";
+ break;
+ }
+ }
+
+ return "subsystems/event/Events" + icon + "_16.png";
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index ffc4ca5..0c61ed0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -63,6 +63,7 @@ import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitorin
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.history.ResourceOperationHistoryListView;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.schedule.ResourceOperationScheduleListView;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.ActivityView;
+import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.ActivityView2;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
@@ -92,6 +93,7 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
private TwoLevelTab contentTab;
private SubTab summaryActivity;
+ private SubTab summaryActivity2;
private SubTab summaryTimeline;
private SubTab monitorGraphs;
private SubTab monitorTables;
@@ -129,9 +131,12 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
.view_tabs_common_summary()),
ImageManager.getResourceIcon(ResourceCategory.SERVICE, Boolean.TRUE));
summaryActivity = new SubTab(summaryTab.extendLocatorId("Activity"),
new ViewName("Activity", MSG
.view_tabs_common_activity()), null);
+ summaryActivity2 = new SubTab(summaryTab.extendLocatorId("Activity2"),
new ViewName("Activity2", MSG
+ .view_tabs_common_activity() + 2), null);
summaryTimeline = new SubTab(summaryTab.extendLocatorId("Timeline"),
new ViewName("Timeline", MSG
.view_tabs_common_timeline()), null);
- summaryTab.registerSubTabs(summaryActivity, summaryTimeline);
+ // summaryTab.registerSubTabs(summaryActivity, summaryTimeline);
+ summaryTab.registerSubTabs(summaryActivity, summaryActivity2, summaryTimeline);
tabs.add(summaryTab);
inventoryTab = new
TwoLevelTab(getTabSet().extendLocatorId("Inventory"), new
ViewName("Inventory", MSG
@@ -255,6 +260,8 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
private void updateSummaryTabContent(Resource resource) {
updateSubTab(this.summaryTab, this.summaryActivity, new
ActivityView(this.summaryActivity
.extendLocatorId("View"), this.resourceComposite), true, true);
+ updateSubTab(this.summaryTab, this.summaryActivity2, new
ActivityView2(this.summaryActivity2
+ .extendLocatorId("View"), this.resourceComposite), true, true);
updateSubTab(this.summaryTab, this.summaryTimeline, new
FullHTMLPane(this.summaryTimeline
.extendLocatorId("View"),
"/rhq/resource/summary/timeline-plain.xhtml?id=" + resource.getId()), true,
true);
@@ -347,7 +354,7 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.operationsTab, this.operationsHistory, new
ResourceOperationHistoryListView(operationsTab
.extendLocatorId("HistoryView"), this.resourceComposite), true,
true);
- updateSubTab(this.operationsTab, this.operationsSchedule,new
ResourceOperationScheduleListView(
+ updateSubTab(this.operationsTab, this.operationsSchedule, new
ResourceOperationScheduleListView(
operationsTab.extendLocatorId("SchedulesView"),
this.resourceComposite), true, true);
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java
new file mode 100644
index 0000000..8907f16
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java
@@ -0,0 +1,618 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary;
+
+import java.util.Date;
+import java.util.List;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.HTMLFlow;
+import com.smartgwt.client.widgets.Img;
+import com.smartgwt.client.widgets.form.fields.FormItemIcon;
+import com.smartgwt.client.widgets.form.fields.LinkItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+
+import org.rhq.core.domain.alert.Alert;
+import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
+import org.rhq.core.domain.criteria.AlertCriteria;
+import org.rhq.core.domain.criteria.EventCriteria;
+import org.rhq.core.domain.criteria.InstalledPackageCriteria;
+import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
+import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite;
+import org.rhq.core.domain.operation.composite.ResourceOperationLastCompletedComposite;
+import org.rhq.core.domain.resource.composite.DisambiguationReport;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.ImageManager;
+import org.rhq.enterprise.gui.coregui.client.RefreshableView;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecorator;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.Locatable;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * The content pane of the Resource Summary>Activity tab.
+ *
+ * @author Simeon Pinder
+ */
+public class ActivityView2 extends LocatableHLayout implements RefreshableView {
+ private LocatableVLayout leftPane;
+ private LocatableVLayout rightPane;
+ private LocatableCanvas recentMeasurementsContent = new
LocatableCanvas(extendLocatorId("RecentMetricsContent"));
+ private LocatableCanvas recentAlertsContent = new
LocatableCanvas(extendLocatorId("RecentAlertsContent"));
+ private LocatableCanvas recentOobContent = new
LocatableCanvas(extendLocatorId("RecentOobsContent"));
+ private LocatableCanvas recentConfigurationContent = new
LocatableCanvas(extendLocatorId("RecentConfigContent"));
+ private LocatableCanvas recentOperationsContent = new
LocatableCanvas(extendLocatorId("RecentOperationsContent"));
+ private LocatableCanvas recentEventsContent = new
LocatableCanvas(extendLocatorId("RecentEventsContent"));
+ private LocatableCanvas recentPkgHistoryContent = new
LocatableCanvas(extendLocatorId("RecentPkgHistoryContent"));
+ private String RECENT_MEASUREMENTS = MSG.common_title_recent_measurements();
+ private String RECENT_MEASUREMENTS_NONE =
MSG.view_resource_inventory_activity_no_recent_metrics();
+ private String RECENT_ALERTS = MSG.common_title_recent_alerts();
+ private String RECENT_ALERTS_NONE =
MSG.view_resource_inventory_activity_no_recent_alerts();
+ private String RECENT_OOB = MSG.common_title_recent_oob_metrics();
+ private String RECENT_OOB_NONE =
MSG.view_resource_inventory_activity_no_recent_oob();
+ private String RECENT_CONFIGURATIONS =
MSG.common_title_recent_configuration_updates();
+ private String RECENT_CONFIGURATIONS_NONE =
MSG.view_resource_inventory_activity_no_recent_config_history();
+ private String RECENT_OPERATIONS = MSG.common_title_recent_operations();
+ private String RECENT_OPERATIONS_NONE =
MSG.view_resource_inventory_activity_no_recent_operations();
+ private String RECENT_EVENTS = MSG.common_title_recent_event_counts();
+ private String RECENT_EVENTS_NONE =
MSG.view_resource_inventory_activity_no_recent_events();
+ private String RECENT_PKG_HISTORY = MSG.common_title_recent_pkg_history();
+ private String RECENT_PKG_HISTORY_NONE =
MSG.view_resource_inventory_activity_no_recent_pkg_history();
+
+ private ResourceComposite resourceComposite;
+
+ public ActivityView2(String locatorId, ResourceComposite resourceComposite) {
+ super(locatorId);
+ this.resourceComposite = resourceComposite;
+ initializeUi();
+ }
+
+ private void initializeUi() {
+ setPadding(5);
+ setMembersMargin(5);
+ //dividers definition
+ HTMLFlow divider1 = new HTMLFlow("<hr/>");
+ HTMLFlow divider2 = new HTMLFlow("<hr/>");
+ HTMLFlow divider3 = new HTMLFlow("<hr/>");
+ HTMLFlow divider4 = new HTMLFlow("<hr/>");
+ HTMLFlow divider5 = new HTMLFlow("<hr/>");
+ divider1.setWidth("50%");
+ divider2.setWidth("50%");
+ divider3.setWidth("50%");
+ divider4.setWidth("50%");
+ divider5.setWidth("50%");
+
+ //leftPane
+ leftPane = new LocatableVLayout(extendLocatorId("Left"));
+ leftPane.setWidth("50%");
+ leftPane.setPadding(5);
+ leftPane.setMembersMargin(5);
+ leftPane.setAutoHeight();
+ //recentMetrics.xhtml
+ LocatableHLayout recentMetricsTitle = new TitleWithIcon(leftPane,
"RecentMetrics",
+ "subsystems/monitor/Monitor_24.png", RECENT_MEASUREMENTS);
+ leftPane.addMember(recentMetricsTitle);
+ leftPane.addMember(recentMeasurementsContent);
+ recentMeasurementsContent.setHeight(20);
+ recentMeasurementsContent.setContents(RECENT_MEASUREMENTS_NONE);
+ leftPane.addMember(divider1);
+ //recentAlerts.xhtml
+ LocatableHLayout recentAlertsTitle = new TitleWithIcon(leftPane,
"RecentAlerts",
+ "subsystems/alert/Flag_blue_24.png", RECENT_ALERTS);
+ leftPane.addMember(recentAlertsTitle);
+ leftPane.addMember(recentAlertsContent);
+ recentAlertsContent.setHeight(20);
+ // recentAlertsContent.setContents(RECENT_ALERTS_NONE);
+ leftPane.addMember(divider2);
+ //recentOOBs.xhtml
+ LocatableHLayout recentOobsTitle = new TitleWithIcon(leftPane,
"RecentOobs",
+ "subsystems/monitor/Monitor_failed_24.png", RECENT_OOB);
+ leftPane.addMember(recentOobsTitle);
+ leftPane.addMember(recentOobContent);
+ recentOobContent.setHeight(20);
+ recentOobContent.setContents(RECENT_OOB_NONE);
+
+ //rightPane
+ rightPane = new LocatableVLayout(extendLocatorId("Right"));
+ rightPane.setWidth("50%");
+ rightPane.setPadding(5);
+ rightPane.setMembersMargin(5);
+ rightPane.setAutoHeight();
+ //recentConfigUpdates.xhtml
+ LocatableHLayout recentConfigUpdatesTitle = new TitleWithIcon(leftPane,
"RecentConfigUpdates",
+ "subsystems/configure/Configure_24.png", RECENT_CONFIGURATIONS);
+ rightPane.addMember(recentConfigUpdatesTitle);
+ rightPane.addMember(recentConfigurationContent);
+ recentConfigurationContent.setHeight(20);
+ // recentConfigurationContent.setContents(RECENT_CONFIGURATIONS_NONE);
+ rightPane.addMember(divider3);
+ //recentOperations.xhtml
+ LocatableHLayout recentOperationsTitle = new TitleWithIcon(leftPane,
"RecentOperations",
+ "subsystems/control/Operation_24.png", RECENT_OPERATIONS);
+ rightPane.addMember(recentOperationsTitle);
+ rightPane.addMember(recentOperationsContent);
+ recentOperationsContent.setHeight(20);
+ // recentOperationsContent.setContents(RECENT_OPERATIONS_NONE);
+ rightPane.addMember(divider4);
+ //recentEventCounts.xhtml
+ LocatableHLayout recentEventsTitle = new TitleWithIcon(leftPane,
"RecentEvent",
+ "subsystems/event/Events_24.png", RECENT_EVENTS);
+ rightPane.addMember(recentEventsTitle);
+ rightPane.addMember(recentEventsContent);
+ recentEventsContent.setHeight(20);
+ recentEventsContent.setContents(RECENT_EVENTS_NONE);
+ rightPane.addMember(divider5);
+ //recentPackageHistory.xhtml
+ LocatableHLayout recentPkgHistoryTitle = new TitleWithIcon(leftPane,
"RecentPkgHistory",
+ "subsystems/content/Content_24.png", RECENT_PKG_HISTORY);
+ rightPane.addMember(recentPkgHistoryTitle);
+ rightPane.addMember(recentPkgHistoryContent);
+ recentPkgHistoryContent.setHeight(20);
+ recentPkgHistoryContent.setContents(RECENT_PKG_HISTORY_NONE);
+ loadData();
+ }
+
+ private void loadData() {
+ getRecentAlerts();
+ getRecentOperations();
+ getRecentConfigurationUpdates();
+ getRecentEventUpdates();
+ getRecentOobs();
+ getRecentPkgHistory();
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ addMember(leftPane);
+ addMember(rightPane);
+ refresh();
+ }
+
+ @Override
+ public void refresh() {
+ // int resourceId = this.resourceComposite.getResource().getId();
+ //
this.iFrame.setContentsURL("/rhq/resource/summary/overview-plain.xhtml?id=" +
resourceId);
+ loadData();
+ markForRedraw();
+ }
+
+ class TitleWithIcon extends LocatableHLayout {
+ public TitleWithIcon(String locatorId) {
+ super(locatorId);
+ }
+
+ public TitleWithIcon(Locatable parentContainer, String locatorIdentifier, String
imageUrl, String title) {
+ super(parentContainer.extendLocatorId(locatorIdentifier));
+ Img titleImage = new Img(imageUrl, 24, 24);
+ HTMLFlow titleElement = new HTMLFlow();
+ titleElement.setWidth("*");
+ titleElement.setContents(title);
+ titleElement.setStyleName("HeaderLabel");
+ addMember(titleImage);
+ addMember(titleElement);
+ setMembersMargin(10);
+ }
+ }
+
+ private void getRecentAlerts() {
+ final int resourceId = this.resourceComposite.getResource().getId();
+ AlertCriteria criteria = new AlertCriteria();
+ criteria.addFilterResourceIds(resourceId);
+ PageControl pageControl = new PageControl(0, 5);
+ criteria.setPageControl(pageControl);
+ GWTServiceLookup.getAlertService().findAlertsByCriteria(criteria, new
AsyncCallback<PageList<Alert>>() {
+ @Override
+ public void onSuccess(PageList<Alert> result) {
+ LocatableVLayout column = new
LocatableVLayout(recentAlertsContent.extendLocatorId("Content"));
+ column.setHeight(10);
+ if (!result.isEmpty()) {
+ for (Alert alert : result) {
+ LocatableDynamicForm row = new
LocatableDynamicForm(recentAlertsContent
+ .extendLocatorId("ContentForm"));
+ row.setNumCols(3);
+
+ StaticTextItem iconItem = new StaticTextItem();
+ FormItemIcon img = new FormItemIcon();
+
img.setSrc(ImageManager.getAlertIcon(alert.getAlertDefinition().getPriority()));
+ img.setWidth(16);
+ img.setHeight(16);
+ iconItem.setIcons(img);
+ iconItem.setShowTitle(false);
+
+ LinkItem link = new LinkItem();
+ link.setLinkTitle(alert.getAlertDefinition().getName());
+ link.setTitle(alert.getAlertDefinition().getName());
+ link.setValue(ReportDecorator.GWT_RESOURCE_URL + resourceId +
"/Alerts/Definitions/"
+ + alert.getAlertDefinition().getId());
+ link.setTarget("_self");
+ link.setShowTitle(false);
+
+ StaticTextItem time = new StaticTextItem();
+ time.setDefaultValue(new
Date(alert.getAlertDefinition().getCtime()).toString());
+ time.setShowTitle(false);
+ time.setShowPickerIcon(false);
+ time.setWrap(false);
+ row.setItems(iconItem, link, time);
+
+ column.addMember(row);
+ }
+ } else {
+ column.setContents(RECENT_ALERTS_NONE);
+ }
+ recentAlertsContent.setContents("");
+ for (Canvas child : recentAlertsContent.getChildren()) {
+ child.destroy();
+ }
+ recentAlertsContent.addChild(column);
+ recentAlertsContent.markForRedraw();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.debug("Error retrieving recent alerts for resource [" +
resourceId + "]:" + caught.getMessage());
+ }
+ });
+ }
+
+ private void getRecentOperations() {
+ final int resourceId = this.resourceComposite.getResource().getId();
+ GWTServiceLookup.getOperationService().findRecentCompletedOperations(5,
+ new
AsyncCallback<List<DisambiguationReport<ResourceOperationLastCompletedComposite>>>()
{
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.debug("Error retrieving recent operations for resource
[" + resourceId + "]:"
+ + caught.getMessage());
+ }
+
+ @Override
+ public void
onSuccess(List<DisambiguationReport<ResourceOperationLastCompletedComposite>>
result) {
+ LocatableVLayout column = new
LocatableVLayout(recentOperationsContent.extendLocatorId("Content"));
+ column.setHeight(10);
+ if (!result.isEmpty()) {
+ for
(DisambiguationReport<ResourceOperationLastCompletedComposite> report : result) {
+ LocatableDynamicForm row = new
LocatableDynamicForm(recentOperationsContent
+ .extendLocatorId("ContentForm"));
+ row.setNumCols(3);
+
+ StaticTextItem iconItem = new StaticTextItem();
+ FormItemIcon img = new FormItemIcon();
+
img.setSrc(ImageManager.getOperationResultsIcon(report.getOriginal().getOperationStatus()));
+ img.setWidth(16);
+ img.setHeight(16);
+ iconItem.setIcons(img);
+ iconItem.setShowTitle(false);
+
+ LinkItem link = new LinkItem();
+ link.setLinkTitle(report.getOriginal().getOperationName());
+ link.setTitle(report.getOriginal().getOperationName());
+ link.setValue(ReportDecorator.GWT_RESOURCE_URL + resourceId +
"/Operations/History/"
+ + report.getOriginal().getOperationHistoryId());
+ link.setTarget("_self");
+ link.setShowTitle(false);
+
+ StaticTextItem time = new StaticTextItem();
+ time.setDefaultValue(new
Date(report.getOriginal().getOperationStartTime()).toString());
+ time.setShowTitle(false);
+ time.setShowPickerIcon(false);
+ time.setWrap(false);
+ row.setItems(iconItem, link, time);
+
+ column.addMember(row);
+ }
+ } else {
+ column.setContents(RECENT_OPERATIONS_NONE);
+ }
+ for (Canvas child : recentOperationsContent.getChildren()) {
+ child.destroy();
+ }
+ recentOperationsContent.addChild(column);
+ recentOperationsContent.markForRedraw();
+ }
+ });
+ }
+
+ private void getRecentConfigurationUpdates() {
+ final int resourceId = this.resourceComposite.getResource().getId();
+ ResourceConfigurationUpdateCriteria criteria = new
ResourceConfigurationUpdateCriteria();
+ criteria.addFilterResourceIds(resourceId);
+ PageControl pageControl = new PageControl(0, 5);
+ criteria.setPageControl(pageControl);
+
GWTServiceLookup.getConfigurationService().findResourceConfigurationUpdatesByCriteria(criteria,
+ new AsyncCallback<PageList<ResourceConfigurationUpdate>>() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.debug("Error retrieving recent configuration updates for
resource [" + resourceId + "]:"
+ + caught.getMessage());
+ }
+
+ @Override
+ public void onSuccess(PageList<ResourceConfigurationUpdate> result)
{
+ LocatableVLayout column = new
LocatableVLayout(recentOperationsContent.extendLocatorId("Content"));
+ column.setHeight(10);
+ if (!result.isEmpty()) {
+ for (ResourceConfigurationUpdate update : result) {
+ LocatableDynamicForm row = new
LocatableDynamicForm(recentConfigurationContent
+ .extendLocatorId("ContentForm"));
+ row.setNumCols(3);
+
+ StaticTextItem iconItem = new StaticTextItem();
+ FormItemIcon img = new FormItemIcon();
+
img.setSrc(ImageManager.getConfigurationUpdateResultsIcon(update.getStatus()));
+ img.setWidth(16);
+ img.setHeight(16);
+ iconItem.setIcons(img);
+ iconItem.setShowTitle(false);
+
+ LinkItem link = new LinkItem();
+
link.setLinkTitle(MSG.view_resource_inventory_activity_changed_by()
+ + update.getSubjectName());
+
link.setTitle(MSG.view_resource_inventory_activity_changed_by() +
update.getSubjectName());
+ link.setValue(ReportDecorator.GWT_RESOURCE_URL + resourceId +
"/Configuration/History/"
+ + update.getId());
+ link.setTarget("_self");
+ link.setShowTitle(false);
+
+ StaticTextItem time = new StaticTextItem();
+ time.setDefaultValue(new
Date(update.getCreatedTime()).toString());
+ time.setShowTitle(false);
+ time.setShowPickerIcon(false);
+ time.setWrap(false);
+ row.setItems(iconItem, link, time);
+
+ column.addMember(row);
+ }
+ } else {
+ LocatableDynamicForm row = new
LocatableDynamicForm(recentConfigurationContent
+ .extendLocatorId("ContentForm"));
+ row.setNumCols(3);
+ StaticTextItem none = new StaticTextItem();
+ none.setShowTitle(false);
+ none.setDefaultValue(RECENT_CONFIGURATIONS_NONE);
+ none.setWrap(false);
+ row.setItems(none);
+ column.addMember(row);
+ }
+ //cleanup
+ for (Canvas child : recentConfigurationContent.getChildren()) {
+ child.destroy();
+ }
+ recentConfigurationContent.addChild(column);
+ recentConfigurationContent.markForRedraw();
+ }
+ });
+ }
+
+ private void getRecentEventUpdates() {
+ final int resourceId = this.resourceComposite.getResource().getId();
+ EventCriteria criteria = new EventCriteria();
+ // criteria.addFilterResourceIds(resourceId);
+ long now = System.currentTimeMillis();
+ long nowMinus24Hours = now - (24 * 60 * 60 * 1000);
+
+ criteria.addFilterResourceId(resourceId);
+ PageControl pageControl = PageControl.getUnlimitedInstance();
+ criteria.setPageControl(pageControl);
+ //Error retrieving recent event counts for resource [" + resourceId +
"]:"
+ // GWTServiceLookup.getEventService().getEventCountsBySeverity(resourceId,
nowMinus24Hours, now,
+ // new AsyncCallback<Map<EventSeverity, Integer>>() {
+ // @Override
+ // public void onFailure(Throwable caught) {
+ // Log.debug("Error retrieving recent event counts for
resource [" + resourceId + "]:"
+ // + caught.getMessage());
+ // }
+ //
+ // @Override
+ // public void onSuccess(Map<EventSeverity, Integer> result)
{
+ // LocatableVLayout column = new
LocatableVLayout(recentOperationsContent.extendLocatorId("Content"));
+ // column.setHeight(10);
+ // if (!result.isEmpty()) {
+ // for (Entry<EventSeverity, Integer> entry :
result.entrySet()) {
+ // EventSeverity severity = entry.getKey();
+ // LocatableDynamicForm row = new
LocatableDynamicForm(recentOperationsContent
+ // .extendLocatorId("ContentForm"));
+ // row.setNumCols(2);
+ //
+ // StaticTextItem iconItem = new StaticTextItem();
+ // FormItemIcon img = new FormItemIcon();
+ //
img.setSrc(ImageManager.getEventSeverityIcon(severity));
+ // // img.set
+ // img.setWidth(16);
+ // img.setHeight(16);
+ // iconItem.setIcons(img);
+ // iconItem.setShowTitle(false);
+ //
+ // StaticTextItem time = new StaticTextItem();
+ // time.setDefaultValue(entry.getValue());
+ // time.setShowTitle(false);
+ // time.setShowPickerIcon(false);
+ // time.setWrap(false);
+ // row.setItems(iconItem, time);
+ //
+ // column.addMember(row);
+ // }
+ // } else {
+ // LocatableDynamicForm row = new
LocatableDynamicForm(recentEventsContent
+ // .extendLocatorId("ContentForm"));
+ // row.setNumCols(3);
+ // StaticTextItem none = new StaticTextItem();
+ // none.setShowTitle(false);
+ // none.setDefaultValue(RECENT_EVENTS_NONE);
+ // none.setWrap(false);
+ // row.setItems(none);
+ // column.addMember(row);
+ // }
+ // //cleanup
+ // for (Canvas child : recentEventsContent.getChildren()) {
+ // child.destroy();
+ // }
+ // recentEventsContent.addChild(column);
+ // recentEventsContent.markForRedraw();
+ // }
+ // });
+ }
+
+ private void getRecentOobs() {
+ final int resourceId = this.resourceComposite.getResource().getId();
+ AlertCriteria criteria = new AlertCriteria();
+ criteria.addFilterResourceIds(resourceId);
+ PageControl pageControl = new PageControl(0, 5);
+ criteria.setPageControl(pageControl);
+
GWTServiceLookup.getMeasurementDataService().getHighestNOOBsForResource(resourceId, 5,
+ new AsyncCallback<PageList<MeasurementOOBComposite>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.debug("Error retrieving recent out of bound metrics for
resource [" + resourceId + "]:"
+ + caught.getMessage());
+ }
+
+ @Override
+ public void onSuccess(PageList<MeasurementOOBComposite> result) {
+ LocatableVLayout column = new
LocatableVLayout(recentAlertsContent.extendLocatorId("Content"));
+ column.setHeight(10);
+ if (!result.isEmpty()) {
+ for (MeasurementOOBComposite oob : result) {
+ LocatableDynamicForm row = new
LocatableDynamicForm(recentOobContent
+ .extendLocatorId("ContentForm"));
+ row.setNumCols(3);
+
+ // StaticTextItem iconItem = new
StaticTextItem();
+ // FormItemIcon img = new
FormItemIcon();
+ //
img.setSrc(ImageManager.getAlertIcon(alert.getAlertDefinition().getPriority()));
+ // img.setWidth(16);
+ // img.setHeight(16);
+ // iconItem.setIcons(img);
+ // iconItem.setShowTitle(false);
+ //
+ // LinkItem link = new
LinkItem();
+ //
link.setLinkTitle(alert.getAlertDefinition().getName());
+ //
link.setTitle(alert.getAlertDefinition().getName());
+ //
link.setValue(ReportDecorator.GWT_RESOURCE_URL + resourceId +
"/Alerts/Definitions/"
+ // +
alert.getAlertDefinition().getId());
+ //
link.setTarget("_self");
+ // link.setShowTitle(false);
+ //
+ // StaticTextItem time = new
StaticTextItem();
+ // time.setDefaultValue(new
Date(alert.getAlertDefinition().getCtime()).toString());
+ // time.setShowTitle(false);
+ // time.setShowPickerIcon(false);
+ // time.setWrap(false);
+ // row.setItems(iconItem, link,
time);
+ //
+ // column.addMember(row);
+ }
+ } else {
+ column.setContents(RECENT_OOB_NONE);
+ }
+ recentOobContent.setContents("");
+ for (Canvas child : recentOobContent.getChildren()) {
+ child.destroy();
+ }
+ recentOobContent.addChild(column);
+ recentOobContent.markForRedraw();
+
+ }
+ });
+ }
+
+ private void getRecentPkgHistory() {
+ final int resourceId = this.resourceComposite.getResource().getId();
+ InstalledPackageCriteria criteria = new InstalledPackageCriteria();
+ criteria.addFilterResourceId(resourceId);
+ // criteria.
+ PageControl pageControl = new PageControl(0, 5);
+ criteria.setPageControl(pageControl);
+
+ //
GWTServiceLookup.getContentService().getInstalledPackageHistoryForResource(resourceId, 5,
+ // new AsyncCallback<PageList<InstalledPackageHistory>>()
{
+ // @Override
+ // public void onFailure(Throwable caught) {
+ // Log.debug("Error retrieving installed package history
for resource [" + resourceId + "]:"
+ // + caught.getMessage());
+ // }
+ //
+ // @Override
+ // public void onSuccess(PageList<InstalledPackageHistory>
result) {
+ // LocatableVLayout column = new
LocatableVLayout(recentPkgHistoryContent.extendLocatorId("Content"));
+ // column.setHeight(10);
+ // if (!result.isEmpty()) {
+ // for (InstalledPackageHistory history : result) {
+ // LocatableDynamicForm row = new
LocatableDynamicForm(recentPkgHistoryContent
+ // .extendLocatorId("ContentForm"));
+ // row.setNumCols(3);
+ //
+ // StaticTextItem iconItem = new StaticTextItem();
+ // FormItemIcon img = new FormItemIcon();
+ //
img.setSrc("subsystems/content/Content_16.png");
+ // img.setWidth(16);
+ // img.setHeight(16);
+ // iconItem.setIcons(img);
+ // iconItem.setShowTitle(false);
+ //
+ // LinkItem link = new LinkItem();
+ //
link.setLinkTitle(history.getPackageVersion().getDisplayName());
+ //
link.setTitle(history.getPackageVersion().getDisplayName());
+ // //
link.setValue(ReportDecorator.GWT_RESOURCE_URL + resourceId +
"/Configuration/History/"
+ // // + update.getId());
+ //
//link.setValue(rhq/resource/content/audit-trail-item.xhtml?id=10005&selectedHistoryId=10002
+ //
link.setValue("rhq/resource/content/audit-trail-item.xhtml?id=" + resourceId
+ // + "&selectedHistoryId=" +
history.getId());
+ // link.setTarget("_self");
+ // link.setShowTitle(false);
+ //
+ // StaticTextItem time = new StaticTextItem();
+ // time.setDefaultValue(new
Date(history.getTimestamp()).toString());
+ // time.setShowTitle(false);
+ // time.setShowPickerIcon(false);
+ // time.setWrap(false);
+ // row.setItems(iconItem, link, time);
+ //
+ // column.addMember(row);
+ // }
+ // } else {
+ // LocatableDynamicForm row = new
LocatableDynamicForm(recentPkgHistoryContent
+ // .extendLocatorId("ContentForm"));
+ // row.setNumCols(3);
+ // StaticTextItem none = new StaticTextItem();
+ // none.setShowTitle(false);
+ // none.setDefaultValue(RECENT_PKG_HISTORY_NONE);
+ // none.setWrap(false);
+ // row.setItems(none);
+ // column.addMember(row);
+ // }
+ // //cleanup
+ // for (Canvas child : recentPkgHistoryContent.getChildren())
{
+ // child.destroy();
+ // }
+ // recentPkgHistoryContent.addChild(column);
+ // recentPkgHistoryContent.markForRedraw();
+ // }
+ // });
+ }
+}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
new file mode 100644
index 0000000..36dee5e
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
@@ -0,0 +1,99 @@
+package org.rhq.enterprise.gui.coregui.client.util;
+
+//import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.i18n.client.TimeZone;
+import com.google.gwt.i18n.client.TimeZoneInfo;
+
+/** An RPC gwt serializable implemenation of the jsf RelativeDurationConverter
+ * utility.
+ *
+ * Convert the passed value in to a relative date compared to now.
+ * If the passed value is -1, the output will be empty (as a value of 0
+ * returns the number of days since the epoch)
+ * @author Joseph Marques
+ * @author Simeon Pinder
+ */
+public class GwtRelativeDurationConverter {
+ private static final long MILLIS_IN_SECOND = 1000L;
+ private static final long MILLIS_IN_MINUTE = 60 * MILLIS_IN_SECOND;
+ private static final long MILLIS_IN_HOUR = 60 * MILLIS_IN_MINUTE;
+ private static final long NEVER = -1;
+
+ private static final long MILLIS_IN_DAY = 24 * MILLIS_IN_HOUR;
+ // private static final SimpleDateFormat dayFormatter = new
SimpleDateFormat("D");
+ // private static final SimpleDateFormat formatter = new
SimpleDateFormat("hh:mm aaa z");
+ private static final DateTimeFormat dayFormatter =
DateTimeFormat.getFormat("D");
+ private static final DateTimeFormat formatter = DateTimeFormat.getFormat("hh:mm
aaa z");
+
+ public static TimeZone tz = null;
+
+ public static String format(long eventMillis) {
+ int dayOfYearToday = Integer.parseInt(dayFormatter.format(new
Date(System.currentTimeMillis())));
+ int dayOfYearEvent = Integer.parseInt(dayFormatter.format(new
Date(eventMillis)));
+ String result = null;
+ if (dayOfYearEvent == dayOfYearToday) {
+ // <time>
+ result = formatter.format(new Date(eventMillis));
+ } else if (dayOfYearEvent == dayOfYearToday - 1) {
+ // "yesterday" <time>
+ result = "Yesterday, " + formatter.format(new Date(eventMillis));
+ } else {
+ // <time> "ago"
+ result = getRelativeTimeAgo(eventMillis) + " ago";
+ }
+ return result;
+ }
+
+ private static TimeZone getTimeZone() {
+ if (tz == null) {
+ // return TimeZone.getDefault();
+ return
TimeZone.createTimeZone(TimeZoneInfo.buildTimeZoneData(String.valueOf(System.currentTimeMillis())));
+ } else {
+ return tz;
+ }
+ }
+
+ private static String getRelativeTimeAgo(long millis) {
+ StringBuilder buf = new StringBuilder();
+ long timeAgo = System.currentTimeMillis() - millis;
+
+ int count = 0;
+ int days = (int) (timeAgo / MILLIS_IN_DAY);
+ timeAgo %= MILLIS_IN_DAY;
+ if (days > 0) {
+ count++;
+ buf.append(days).append(" day");
+ if (days != 1)
+ buf.append("s");
+ }
+
+ int hours = (int) (timeAgo / MILLIS_IN_HOUR);
+ timeAgo %= MILLIS_IN_HOUR;
+ if (hours > 0) {
+ count++;
+ if (buf.length() > 0)
+ buf.append(", ");
+ buf.append(hours).append(" hour");
+ if (hours != 1)
+ buf.append("s");
+ }
+
+ if (count < 2) {
+ int mins = (int) (timeAgo / MILLIS_IN_MINUTE);
+ timeAgo %= MILLIS_IN_MINUTE;
+ if (mins > 0) {
+ if (buf.length() > 0)
+ buf.append(", ");
+ buf.append(mins).append(" minute");
+ if (mins != 1)
+ buf.append("s");
+ }
+ }
+
+ return buf.toString();
+ }
+
+}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
index bd6da37..cc9c288 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
@@ -33,6 +33,7 @@ import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ContentGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.content.ContentManagerLocal;
+import org.rhq.enterprise.server.content.ContentUIManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -43,6 +44,7 @@ public class ContentGWTServiceImpl extends AbstractGWTServiceImpl
implements Con
private static final long serialVersionUID = 1L;
private ContentManagerLocal contentManager = LookupUtil.getContentManager();
+ private ContentUIManagerLocal contentUiManager = LookupUtil.getContentUIManager();
public void deletePackageVersion(int packageVersionId) {
try {
@@ -61,6 +63,16 @@ public class ContentGWTServiceImpl extends AbstractGWTServiceImpl
implements Con
}
}
+ // public PageList<InstalledPackageHistory>
getInstalledPackageHistoryForResource(int resourceId, int count) {
+ // try {
+ // PageControl pc = new PageControl(0, count);
+ // return
SerialUtility.prepare(contentUiManager.getInstalledPackageHistoryForResource(resourceId,
pc),
+ // "ContentService.getInstalledPackageHistoryForResource");
+ // } catch (Exception e) {
+ // throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ // }
+ // }
+
public List<Architecture> getArchitectures() {
try {
return
SerialUtility.prepare(contentManager.findArchitectures(getSessionSubject()),
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
index 3dbae8e..6369c90 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
@@ -75,6 +75,15 @@ public class EventGWTServiceImpl extends AbstractGWTServiceImpl
implements Event
}
}
+ // public Map<EventSeverity, Integer> getEventCountsBySeverity(int
resourceId, long startDate, long endDate) {
+ // try {
+ // return
SerialUtility.prepare(eventManager.getEventCountsBySeverity(getSessionSubject(),
resourceId,
+ // startDate, endDate),
"EventService.getEventCountsBySeverity");
+ // } catch (Exception e) {
+ // throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ // }
+ // }
+
public PageList<Event> findEventsByCriteria(EventCriteria criteria) {
try {
return
SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria),
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 2c45fbb..8f06b15 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
@@ -133,7 +133,12 @@ common_title_port = Port
common_title_providers = Providers
common_title_recently_added = Recently Added Resources
common_title_recent_alerts = Recent Alerts
+common_title_recent_configuration_updates=Recent Configuration Updates
+common_title_recent_event_counts=Recent Event Counts
+common_title_recent_measurements=Recent Measurements
+common_title_recent_oob_metrics=Recent Out of Bound metrics
common_title_recent_operations = Recent Operations
+common_title_recent_pkg_history=Recent Package History
common_title_remove_column = Remove Column
common_title_repositories = Repositories
common_title_resource = Resource
@@ -1286,6 +1291,14 @@ view_inventory_resources_loadFailed = Failed to load resource
composite data
view_inventory_resources_title = Member Resources
view_inventory_resources_title_children = Child Resources
view_inventory_resources_title_members = Member Resources
+view_resource_inventory_activity_changed_by=Changed by
+view_resource_inventory_activity_no_recent_alerts=No recent alerts
+view_resource_inventory_activity_no_recent_config_history=No configuration change
history
+view_resource_inventory_activity_no_recent_events =No events in the last 24 hours
+view_resource_inventory_activity_no_recent_metrics=This resource has no recent metrics
+view_resource_inventory_activity_no_recent_oob=No OOB conditions found
+view_resource_inventory_activity_no_recent_operations=No recent operation history
+view_resource_inventory_activity_no_recent_pkg_history=No recent package history
view_resource_monitor_availability_loadFailed = Failed to load availability history
view_resource_monitor_graphs_noneAvailable = No graphs available
view_resource_monitor_graphs_loadFailed = Failed to load graph data