modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java | 15 modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertConditionLog.java | 7 modules/core/domain/src/main/java/org/rhq/core/domain/alert/notification/AlertNotificationLog.java | 12 modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBeanTest.java | 37 modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertManagerTest.java | 375 ++++++++++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java | 61 - 6 files changed, 412 insertions(+), 95 deletions(-)
New commits: commit b9b46c293cc0e6553cc61f9b14fbeea872ce70c9 Author: Thomas Segismont tsegismo@redhat.com Date: Wed Apr 3 17:29:26 2013 +0200
Add itests for AlertManager
As part of this commit, AlertManager #purgeAlerts method was also deleted as well as associated JPA named queries AlertDefinitionManager was also fixed as it did not clean correctly the database after tests
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java index f0b585c..59c7d6d 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java @@ -22,11 +22,7 @@ */ package org.rhq.core.domain.alert;
-import java.io.Serializable; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; +import org.rhq.core.domain.alert.notification.AlertNotificationLog;
import javax.persistence.CascadeType; import javax.persistence.Column; @@ -43,8 +39,11 @@ import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.SequenceGenerator; import javax.persistence.Table; - -import org.rhq.core.domain.alert.notification.AlertNotificationLog; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set;
/** * @author Joseph Marques @@ -233,8 +232,6 @@ public class Alert implements Serializable { public static final String QUERY_FIND_BY_MEAS_DEF_ID_AND_RESOURCE = "Alert.findByMeasDefIdAndResource"; public static final String QUERY_GET_ALERT_COUNT_FOR_SCHEDULES = "Alert.QUERY_GET_ALERT_COUNT_FOR_SCHEDULES";
- public static final String QUERY_NATIVE_TRUNCATE_SQL = "TRUNCATE TABLE RHQ_ALERT"; - // for subsystem view public static final String QUERY_FIND_ALL_COMPOSITES = "Alert.findAllComposites"; public static final String QUERY_FIND_ALL_COMPOSITES_ADMIN = "Alert.findAllComposites_admin"; diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertConditionLog.java b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertConditionLog.java index 4680835..76aac5a 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertConditionLog.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertConditionLog.java @@ -22,8 +22,6 @@ */ package org.rhq.core.domain.alert;
-import java.io.Serializable; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -35,6 +33,7 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.SequenceGenerator; import javax.persistence.Table; +import java.io.Serializable;
/** * A log record for a triggered alert condition. @@ -121,8 +120,6 @@ public class AlertConditionLog implements Serializable { public static final String QUERY_DELETE_BY_ALERT_CTIME = "AlertConditionLog.deleteByAlertCTime"; public static final String QUERY_DELETE_UNMATCHED_BY_ALERT_DEFINITION_ID = "AlertConditionLog.deleteUnmatchedByAlertDefinitionId";
- public static final String QUERY_NATIVE_TRUNCATE_SQL = "TRUNCATE TABLE RHQ_ALERT_CONDITION_LOG"; - public static final int MAX_LOG_LENGTH = 250;
private static final long serialVersionUID = 1L; @@ -244,4 +241,4 @@ public class AlertConditionLog implements Serializable { return "org.rhq.core.domain.alert.AlertConditionLog" + "[ " + "id=" + id + ", " + "value=" + value + ", " + condition + " ]"; } -} \ No newline at end of file +} diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/notification/AlertNotificationLog.java b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/notification/AlertNotificationLog.java index cdf8824..05f6e5f 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/notification/AlertNotificationLog.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/notification/AlertNotificationLog.java @@ -22,7 +22,7 @@ */ package org.rhq.core.domain.alert.notification;
-import java.io.Serializable; +import org.rhq.core.domain.alert.Alert;
import javax.persistence.Column; import javax.persistence.Entity; @@ -42,8 +42,7 @@ import javax.persistence.Table; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlTransient; - -import org.rhq.core.domain.alert.Alert; +import java.io.Serializable;
/** * A log record for a triggered action and/or notification taken for a fired alert. @@ -68,8 +67,7 @@ import org.rhq.core.domain.alert.Alert; + " FROM AlertDefinition ad " // + " JOIN ad.alerts alert " // + " WHERE ad.resource.id IN ( :resourceIds ) ))"), - @NamedQuery(name = AlertNotificationLog.QUERY_DELETE_BY_RESOURCE_TEMPLATE, - query = "DELETE AlertNotificationLog log " + @NamedQuery(name = AlertNotificationLog.QUERY_DELETE_BY_RESOURCE_TEMPLATE, query = "DELETE AlertNotificationLog log " + " WHERE log.alert.id IN (SELECT alert.id " + " FROM AlertDefinition alertDef " + " JOIN alertDef.alerts alert " @@ -101,8 +99,6 @@ public class AlertNotificationLog implements Serializable { public static final String QUERY_DELETE_BY_RESOURCE_GROUPS = "AlertNotificationLog.deleteByResourceGroups"; public static final String QUERY_DELETE_BY_ALERT_CTIME = "AlertNotificationLog.deleteByAlertCtime";
- public static final String QUERY_NATIVE_TRUNCATE_SQL = "TRUNCATE TABLE RHQ_ALERT_NOTIF_LOG"; - @Column(name = "ID", nullable = false) @GeneratedValue(strategy = GenerationType.AUTO, generator = "RHQ_ALERT_NOTIF_LOG_ID_SEQ") @Id @@ -211,4 +207,4 @@ public class AlertNotificationLog implements Serializable { sb.append('}'); return sb.toString(); } -} \ No newline at end of file +} diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBeanTest.java index 09c3cc7..588f04b 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBeanTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBeanTest.java @@ -23,6 +23,8 @@ package org.rhq.enterprise.server.alert; import java.util.LinkedList; import java.util.List;
+import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.testng.annotations.Test;
import org.rhq.core.domain.alert.AlertDampening; @@ -51,6 +53,8 @@ import org.rhq.enterprise.server.util.SessionTestHelper; */ public class AlertDefinitionManagerBeanTest extends AbstractEJB3Test {
+ private static final Log LOG = LogFactory.getLog(AlertDefinitionManagerBeanTest.class); + private AlertDefinitionManagerLocal alertDefinitionManager;
private ResourceGroupManagerLocal resourceGroupManager; @@ -106,26 +110,33 @@ public class AlertDefinitionManagerBeanTest extends AbstractEJB3Test {
private void deleteTestData() throws Exception { if (testData != null) { - final TestData testDataToDelete = testData; + for (Integer alertDefinitionId : testData.getAlertDefinitionIds()) { + removeEntity(AlertDefinition.class, alertDefinitionId); + } + removeEntity(ResourceGroup.class, testData.getResourceGroup().getId()); + removeEntity(Resource.class, testData.getResource().getId()); + removeEntity(ResourceType.class, testData.getResourceType().getId()); + removeEntity(Subject.class, testData.getSubject().getId()); + removeEntity(Role.class, testData.getRole().getId()); testData = null; + } + } + + private void removeEntity(final Class<?> entityClass, final Object entityId) { + try { executeInTransaction(false, new TransactionCallback() { @Override public void execute() throws Exception { - for (Integer alertDefinitionId : testDataToDelete.getAlertDefinitionIds()) { - em.remove(em.find(AlertDefinition.class, alertDefinitionId)); + Object object = em.find(entityClass, entityId); + if (object instanceof Resource) { + ResourceTreeHelper.deleteResource(em, (Resource) object); + } else { + em.remove(object); } - resourceGroupManager.deleteResourceGroup(subjectManager.getOverlord(), testDataToDelete - .getResourceGroup().getId()); - ResourceTreeHelper.deleteResource(em, - em.find(Resource.class, testDataToDelete.getResource().getId())); - em.remove(em.find(ResourceType.class, testDataToDelete.getResourceType().getId())); - subjectManager.deleteSubjects(subjectManager.getOverlord(), new int[] { testDataToDelete - .getSubject().getId() }); - roleManager.deleteRoles(subjectManager.getOverlord(), new int[] { testDataToDelete.getRole() - .getId() }); - } }); + } catch (Exception e) { + LOG.error("Failed to delete object from database: " + entityClass + "[id=" + entityId + "]", e); } }
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertManagerTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertManagerTest.java new file mode 100644 index 0000000..3cd1044 --- /dev/null +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertManagerTest.java @@ -0,0 +1,375 @@ +/* + * RHQ Management Platform + * Copyright 2013, Red Hat Middleware LLC, and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * 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.server.alert.test; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.annotations.Test; + +import org.rhq.core.domain.alert.Alert; +import org.rhq.core.domain.alert.AlertDampening; +import org.rhq.core.domain.alert.AlertDefinition; +import org.rhq.core.domain.alert.AlertPriority; +import org.rhq.core.domain.alert.BooleanExpression; +import org.rhq.core.domain.auth.Subject; +import org.rhq.core.domain.authz.Permission; +import org.rhq.core.domain.authz.Role; +import org.rhq.core.domain.common.EntityContext; +import org.rhq.core.domain.criteria.AlertCriteria; +import org.rhq.core.domain.resource.Resource; +import org.rhq.core.domain.resource.ResourceType; +import org.rhq.core.domain.resource.group.ResourceGroup; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.server.alert.AlertDefinitionManagerBeanTest; +import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal; +import org.rhq.enterprise.server.alert.AlertManagerLocal; +import org.rhq.enterprise.server.auth.SubjectManagerLocal; +import org.rhq.enterprise.server.authz.RoleManagerLocal; +import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal; +import org.rhq.enterprise.server.test.AbstractEJB3Test; +import org.rhq.enterprise.server.test.TransactionCallback; +import org.rhq.enterprise.server.test.TransactionCallbackReturnable; +import org.rhq.enterprise.server.util.LookupUtil; +import org.rhq.enterprise.server.util.ResourceTreeHelper; +import org.rhq.enterprise.server.util.SessionTestHelper; + +/** + * @author Thomas Segismont + */ +public class AlertManagerTest extends AbstractEJB3Test { + + private static final Log LOG = LogFactory.getLog(AlertDefinitionManagerBeanTest.class); + + private AlertManagerLocal alertManager; + + private AlertDefinitionManagerLocal alertDefinitionManager; + + private ResourceGroupManagerLocal resourceGroupManager; + + private RoleManagerLocal roleManager; + + private SubjectManagerLocal subjectManager; + + private TestData testData; + + @Override + protected void beforeMethod() throws Exception { + alertManager = LookupUtil.getAlertManager(); + subjectManager = LookupUtil.getSubjectManager(); + resourceGroupManager = LookupUtil.getResourceGroupManager(); + roleManager = LookupUtil.getRoleManager(); + alertDefinitionManager = LookupUtil.getAlertDefinitionManager(); + createTestData(); + prepareScheduler(); + } + + private void createTestData() { + testData = executeInTransaction(false, new TransactionCallbackReturnable<TestData>() { + @Override + public TestData execute() throws Exception { + TestData newTestData = new TestData(); + Subject subject = SessionTestHelper.createNewSubject(em, "fake subject"); + newTestData.setSubject(subject); + Role role = SessionTestHelper.createNewRoleForSubject(em, subject, "fake role", Permission.values()); + newTestData.setRole(role); + ResourceType resourceType = SessionTestHelper.createNewResourceType(em); + newTestData.setResourceType(resourceType); + ResourceGroup resourceGroup = new ResourceGroup("fake group", resourceType); + resourceGroup = resourceGroupManager.createPrivateResourceGroup(subject, resourceGroup); + newTestData.setResourceGroup(resourceGroup); + roleManager.setAssignedResourceGroups(subjectManager.getOverlord(), role.getId(), + new int[] { resourceGroup.getId() }); + Resource resource = SessionTestHelper.createNewResourceForGroup(em, resourceGroup, "fake resource"); + newTestData.setResource(resource); + return newTestData; + } + }); + } + + @Override + protected void afterMethod() throws Exception { + try { + deleteTestData(); + } finally { + unprepareScheduler(); + } + } + + private void deleteTestData() throws Exception { + if (testData != null) { + removeAlerts(); + removeEntity(AlertDefinition.class, testData.getAlertDefinitionId()); + removeEntity(ResourceGroup.class, testData.getResourceGroup().getId()); + removeEntity(Resource.class, testData.getResource().getId()); + removeEntity(ResourceType.class, testData.getResourceType().getId()); + removeEntity(Subject.class, testData.getSubject().getId()); + removeEntity(Role.class, testData.getRole().getId()); + testData = null; + } + } + + private void removeAlerts() { + try { + executeInTransaction(false, new TransactionCallback() { + @Override + public void execute() throws Exception { + alertManager.deleteAlertsByContext(subjectManager.getOverlord(), EntityContext.forSubsystemView()); + } + }); + } catch (Exception e) { + LOG.error("Failed to remove alerts", e); + } + } + + private void removeEntity(final Class<?> entityClass, final Object entityId) { + try { + executeInTransaction(false, new TransactionCallback() { + @Override + public void execute() throws Exception { + Object object = em.find(entityClass, entityId); + if (object instanceof Resource) { + ResourceTreeHelper.deleteResource(em, (Resource) object); + } else { + em.remove(object); + } + } + }); + } catch (Exception e) { + LOG.error("Failed to delete object from database: " + entityClass + "[id=" + entityId + "]", e); + } + } + + @Test + public void testDeleteAlertsByResourceContext() { + executeInTransaction(new TransactionCallback() { + @Override + public void execute() throws Exception { + int resourceAlertDefinitionId = createResourceAlertDefinitionAndGetId("fake resource alertdef"); + alertManager.fireAlert(resourceAlertDefinitionId); + + PageList<Alert> foundAlerts = findAlertsByDefinitionIds(resourceAlertDefinitionId); + assertEquals(1, foundAlerts.size()); + + alertManager.deleteAlertsByContext(testData.getSubject(), + EntityContext.forResource(testData.getResource().getId())); + foundAlerts = findAlertsByDefinitionIds(); + assertEquals(0, foundAlerts.size()); + } + }); + } + + @Test + public void testDeleteAlertsByGroupContext() { + executeInTransaction(new TransactionCallback() { + @Override + public void execute() throws Exception { + int resourceAlertDefinitionId = createResourceAlertDefinitionAndGetId("fake resource alertdef"); + alertManager.fireAlert(resourceAlertDefinitionId); + + PageList<Alert> foundAlerts = findAlertsByDefinitionIds(resourceAlertDefinitionId); + assertEquals(1, foundAlerts.size()); + + alertManager.deleteAlertsByContext(testData.getSubject(), + EntityContext.forGroup(testData.getResourceGroup().getId())); + foundAlerts = findAlertsByDefinitionIds(resourceAlertDefinitionId); + assertEquals(0, foundAlerts.size()); + } + }); + } + + @Test + public void testAcknowledgeAlertsByTemplateContext() { + executeInTransaction(new TransactionCallback() { + @Override + public void execute() throws Exception { + try { + // Template definition alert id could be anything + alertManager.acknowledgeAlertsByContext(testData.getSubject(), EntityContext.forTemplate(42)); + fail("It should not be possible to acknowledge alerts by template context"); + } catch (Exception e) { + assertEquals(e.getCause().getClass(), IllegalArgumentException.class); + } + } + }); + } + + @Test + public void testAcknowledgeAlertsByResourceContext() { + executeInTransaction(new TransactionCallback() { + @Override + public void execute() throws Exception { + int resourceAlertDefinitionId = createResourceAlertDefinitionAndGetId("fake resource alertdef"); + alertManager.fireAlert(resourceAlertDefinitionId); + + long testStartTimeStamp = System.currentTimeMillis(); + int count = alertManager.acknowledgeAlertsByContext(testData.getSubject(), + EntityContext.forResource(testData.getResource().getId())); + assertEquals(1, count); + + PageList<Alert> foundAlerts = findAlertsByDefinitionIds(resourceAlertDefinitionId); + assertEquals(1, foundAlerts.size()); + Alert alert = foundAlerts.iterator().next(); + em.refresh(alert); + + assertNotNull(alert.getAcknowledgingSubject()); + assertNotNull(alert.getAcknowledgeTime()); + assertEquals(testData.getSubject().getName(), alert.getAcknowledgingSubject()); + assertTrue("Alert should just have been acknowledged", alert.getAcknowledgeTime() >= testStartTimeStamp); + } + }); + } + + @Test + public void testAcknowledgeAlertsByGroupContext() { + executeInTransaction(new TransactionCallback() { + @Override + public void execute() throws Exception { + int resourceAlertDefinitionId = createResourceAlertDefinitionAndGetId("fake resource alertdef"); + alertManager.fireAlert(resourceAlertDefinitionId); + + long testStartTimeStamp = System.currentTimeMillis(); + int count = alertManager.acknowledgeAlertsByContext(testData.getSubject(), + EntityContext.forGroup(testData.getResourceGroup().getId())); + assertEquals(1, count); + + PageList<Alert> foundAlerts = findAlertsByDefinitionIds(resourceAlertDefinitionId); + assertEquals(1, foundAlerts.size()); + Alert alert = foundAlerts.iterator().next(); + em.refresh(alert); + + assertNotNull(alert.getAcknowledgingSubject()); + assertNotNull(alert.getAcknowledgeTime()); + assertEquals(testData.getSubject().getName(), alert.getAcknowledgingSubject()); + assertTrue("Alert should just have been acknowledged", alert.getAcknowledgeTime() >= testStartTimeStamp); + } + }); + } + + @Test + public void testAcknowledgeAlertsBySubsystemContext() { + executeInTransaction(new TransactionCallback() { + @Override + public void execute() throws Exception { + int resourceAlertDefinitionId = createResourceAlertDefinitionAndGetId("fake resource alertdef"); + alertManager.fireAlert(resourceAlertDefinitionId); + + long testStartTimeStamp = System.currentTimeMillis(); + int count = alertManager.acknowledgeAlertsByContext(testData.getSubject(), + EntityContext.forSubsystemView()); + assertEquals(1, count); + + PageList<Alert> foundAlerts = findAlertsByDefinitionIds(resourceAlertDefinitionId); + assertEquals(1, foundAlerts.size()); + Alert alert = foundAlerts.iterator().next(); + em.refresh(alert); + + assertNotNull(alert.getAcknowledgingSubject()); + assertNotNull(alert.getAcknowledgeTime()); + assertEquals(testData.getSubject().getName(), alert.getAcknowledgingSubject()); + assertTrue("Alert should just have been acknowledged", alert.getAcknowledgeTime() >= testStartTimeStamp); + } + }); + } + + private PageList<Alert> findAlertsByDefinitionIds(Integer... alertDefinitionIds) { + AlertCriteria criteria = new AlertCriteria(); + criteria.addFilterAlertDefinitionIds(alertDefinitionIds); + return alertManager.findAlertsByCriteria(testData.getSubject(), criteria); + } + + private int createResourceAlertDefinitionAndGetId(String name) { + AlertDefinition alertDefinition = new AlertDefinition(); + alertDefinition.setName(name); + alertDefinition.setPriority(AlertPriority.MEDIUM); + alertDefinition.setAlertDampening(new AlertDampening(AlertDampening.Category.NONE)); + alertDefinition.setConditionExpression(BooleanExpression.ANY); + alertDefinition.setRecoveryId(0); + alertDefinition.setEnabled(true); + int alertDefinitionId = alertDefinitionManager.createAlertDefinition(testData.getSubject(), alertDefinition, + testData.getResource().getId(), true); + testData.setAlertDefinitionId(alertDefinitionId); + return alertDefinitionId; + } + + private static final class TestData { + + private Subject subject; + + private Role role; + + private ResourceType resourceType; + + private ResourceGroup resourceGroup; + + private Resource resource; + + private int alertDefinitionId; + + public Subject getSubject() { + return subject; + } + + public void setSubject(Subject subject) { + this.subject = subject; + } + + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } + + public ResourceType getResourceType() { + return resourceType; + } + + public void setResourceType(ResourceType resourceType) { + this.resourceType = resourceType; + } + + public ResourceGroup getResourceGroup() { + return resourceGroup; + } + + public void setResourceGroup(ResourceGroup resourceGroup) { + this.resourceGroup = resourceGroup; + } + + public Resource getResource() { + return resource; + } + + public void setResource(Resource resource) { + this.resource = resource; + } + + public int getAlertDefinitionId() { + return alertDefinitionId; + } + + public void setAlertDefinitionId(int alertDefinitionId) { + this.alertDefinitionId = alertDefinitionId; + } + } + +} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java index bc2f9a7..eaae22a 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java @@ -1,6 +1,6 @@ /* * RHQ Management Platform - * Copyright (C) 2005-2008 Red Hat, Inc. + * Copyright (C) 2005-2013 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify @@ -18,9 +18,6 @@ */ package org.rhq.enterprise.server.alert;
-import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -71,7 +68,6 @@ import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.server.MeasurementConverter; import org.rhq.core.util.collection.ArrayUtils; -import org.rhq.core.util.jdbc.JDBCUtil; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.alert.i18n.AlertI18NFactory; import org.rhq.enterprise.server.alert.i18n.AlertI18NResourceKeys; @@ -138,7 +134,6 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote { return alert; }
- // TODO: iterate in batches of 1000 elements at a time public int deleteAlerts(Subject user, int[] alertIds) { if (alertIds == null || alertIds.length == 0) { return 0; @@ -168,7 +163,6 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote { return updated; }
- // TODO: iterate in batches of 1000 elements at a time /** * Acknowledge alert(s) so that administrators know who is working on remedying the underlying * condition(s) that caused the alert(s) in the first place. @@ -427,59 +421,6 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote { return deletedAlerts; }
- @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - @TransactionTimeout(6 * 60 * 60) - public int purgeAlerts() { - long totalTime = 0; - - Connection conn = null; - PreparedStatement truncateConditionLogsStatement = null; - PreparedStatement truncateNotificationLogsStatement = null; - PreparedStatement truncateAlertsStatement = null; - try { - conn = rhqDs.getConnection(); - - truncateConditionLogsStatement = conn.prepareStatement(AlertConditionLog.QUERY_NATIVE_TRUNCATE_SQL); - truncateNotificationLogsStatement = conn.prepareStatement(AlertNotificationLog.QUERY_NATIVE_TRUNCATE_SQL); - truncateAlertsStatement = conn.prepareStatement(Alert.QUERY_NATIVE_TRUNCATE_SQL); - - long start = System.currentTimeMillis(); - int purgedConditions = truncateConditionLogsStatement.executeUpdate(); - long end = System.currentTimeMillis(); - log.debug("Purged [" + purgedConditions + "] alert condition logs in [" + (end - start) + "]ms"); - totalTime += (end - start); - - start = System.currentTimeMillis(); - int purgedNotifications = truncateNotificationLogsStatement.executeUpdate(); - end = System.currentTimeMillis(); - log.debug("Purged [" + purgedNotifications + "] alert notifications in [" + (end - start) + "]ms"); - totalTime += (end - start); - - start = System.currentTimeMillis(); - int purgedAlerts = truncateAlertsStatement.executeUpdate(); - end = System.currentTimeMillis(); - log.debug("Purged [" + purgedAlerts + "] alerts in [" + (end - start) + "]ms"); - totalTime += (end - start); - - MeasurementMonitor.getMBean().incrementPurgeTime(totalTime); - MeasurementMonitor.getMBean().setPurgedAlerts(purgedAlerts); - MeasurementMonitor.getMBean().setPurgedAlertConditions(purgedConditions); - MeasurementMonitor.getMBean().setPurgedAlertNotifications(purgedNotifications); - log.debug("Deleted [" + (purgedAlerts + purgedConditions + purgedNotifications) + "] " - + "alert audit records in [" + (totalTime) + "]ms"); - - return purgedAlerts; - } catch (SQLException sqle) { - log.error("Error purging alerts", sqle); - throw new RuntimeException("Error purging alerts: " + sqle.getMessage()); - } finally { - JDBCUtil.safeClose(truncateConditionLogsStatement); - JDBCUtil.safeClose(truncateNotificationLogsStatement); - JDBCUtil.safeClose(truncateAlertsStatement); - JDBCUtil.safeClose(conn); - } - } - public int getAlertCountByMeasurementDefinitionId(Integer measurementDefinitionId, long begin, long end) { Query query = PersistenceUtility.createCountQuery(entityManager, Alert.QUERY_FIND_BY_MEASUREMENT_DEFINITION_ID); query.setParameter("measurementDefinitionId", measurementDefinitionId);
rhq-commits@lists.fedorahosted.org