package org.rhq.enterprise.gui.inventory.resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.rhq.core.domain.alert.Alert;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.content.InstalledPackageHistory;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.event.EventSeverity;
import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite;
import org.rhq.core.domain.operation.composite.ResourceOperationLastCompletedComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.alert.AlertManagerLocal;
import org.rhq.enterprise.server.alert.engine.internal.Tuple;
import org.rhq.enterprise.server.util.LookupUtil;
public class ResourceOverviewUIBean {
private List<Alert> recentAlerts;
private List<ResourceOperationLastCompletedComposite> recentOperations;
private List<ResourceConfigurationUpdate> recentConfigChanges;
private List<Tuple<EventSeverity, Integer>> recentEventCounts;
private List<InstalledPackageHistory> recentPackageHistory;
private List<MeasurementOOBComposite> recentOObs;
private Subject subject;
private int resourceId;
public ResourceOverviewUIBean() {
subject = EnterpriseFacesContextUtility.getSubject();
resourceId = FacesContextUtility.getRequiredRequestParameter("id", Integer.class);
}
private List<Alert> getAlerts(Subject subject, int resourceId, int count) {
PageControl lastFive = new PageControl(0, count);
lastFive.initDefaultOrderingField("ctime", PageOrdering.DESC);
AlertCriteria criteria = new AlertCriteria();
criteria.addFilterResourceIds(resourceId);
criteria.setPageControl(lastFive);
AlertManagerLocal alertManager = LookupUtil.getAlertManager();
List<Alert> results = alertManager.findAlertsByCriteria(subject, criteria);
return results;
}
private List<ResourceOperationLastCompletedComposite> getOperations(Subject subject, int resourceId, int count) {
PageControl lastFive = new PageControl(0, count);
lastFive.initDefaultOrderingField("ro.createdTime", PageOrdering.DESC);
return LookupUtil.getOperationManager().findRecentlyCompletedResourceOperations(subject, resourceId, lastFive);
}
private List<ResourceConfigurationUpdate> getConfigUpdates(Subject subject, int resourceId, int count) {
PageControl lastFive = new PageControl(0, count);
lastFive.initDefaultOrderingField("cu.createdTime", PageOrdering.DESC);
return LookupUtil.getConfigurationManager().findResourceConfigurationUpdates(subject, resourceId, null, null,
true, lastFive);
}
private List<Tuple<EventSeverity, Integer>> getEventCounts(Subject subject, int resourceId) {
PageControl unlimited = PageControl.getUnlimitedInstance();
unlimited.initDefaultOrderingField("ev.timestamp", PageOrdering.DESC);
long now = System.currentTimeMillis();
long nowMinus24Hours = now - (24 * 60 * 60 * 1000);
Map<EventSeverity, Integer> eventCounts = LookupUtil.getEventManager().getEventCountsBySeverity(subject,
resourceId, nowMinus24Hours, now);
List<Tuple<EventSeverity, Integer>> results = new ArrayList<Tuple<EventSeverity, Integer>>();
for (EventSeverity severity : eventCounts.keySet()) {
int count = eventCounts.get(severity);
if (count > 0) {
results.add(new Tuple<EventSeverity, Integer>(severity, count));
}
}
return results;
}
private List<InstalledPackageHistory> getPackageHistory(Subject subject, int resourceId, int count) {
PageControl lastFive = new PageControl(0, count);
lastFive.initDefaultOrderingField("iph.timestamp", PageOrdering.DESC);
return LookupUtil.getContentUIManager().getInstalledPackageHistoryForResource(resourceId, lastFive);
}
private List<MeasurementOOBComposite> getRecentOObs(Subject subject, int resourceId, int n) {
return LookupUtil.getOOBManager().getHighestNOOBsForResource(subject, resourceId, n);
}
public List<Alert> getRecentAlerts() {
if (recentAlerts == null) {
recentAlerts = getAlerts(subject, resourceId, 5);
}
return recentAlerts;
}
public List<ResourceOperationLastCompletedComposite> getRecentOperations() {
if (recentOperations == null) {
recentOperations = getOperations(subject, resourceId, 5);
}
return recentOperations;
}
public List<ResourceConfigurationUpdate> getRecentConfigChanges() {
if (recentConfigChanges == null) {
recentConfigChanges = getConfigUpdates(subject, resourceId, 5);
}
return recentConfigChanges;
}
public List<Tuple<EventSeverity, Integer>> getRecentEventCounts() {
if (recentEventCounts == null) {
recentEventCounts = getEventCounts(subject, resourceId);
}
return recentEventCounts;
}
public List<InstalledPackageHistory> getRecentPackageHistory() {
if (recentPackageHistory == null) {
recentPackageHistory = getPackageHistory(subject, resourceId, 5);
}
return recentPackageHistory;
}
public List<MeasurementOOBComposite> getRecentOOBs() {
if (recentOObs == null)
recentOObs = getRecentOObs(subject, resourceId, 5);
return recentOObs;
}
}