/*
* RHQ Management Platform
* Copyright (C) 2005-2008 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.server.alert.engine;
/**
* @author Joseph Marques
*/
import javax.ejb.Local;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventSource;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.measurement.MeasurementData;
import org.rhq.core.domain.measurement.calltime.CallTimeData;
import org.rhq.core.domain.operation.OperationHistory;
import org.rhq.enterprise.server.alert.engine.model.AvailabilityDurationComposite;
import org.rhq.enterprise.server.plugin.pc.drift.DriftChangeSetSummary;
/**
* This is the SLSB interface for interacting with the clustered cache that stores and computes whether AlertDefinition
* conditions have become true for which Resources in the system. It consequently calls the condition listener MDB,
* which stores the fired conditions to the backing store. A separate process later comes along and decides - depending
* on the recovery property, enablement actions, and enablement filtering options that were set on the AlertDefinition
* this condition was triggered against - whether an alert should fire or not.
*/
@Local
public interface AlertConditionCacheManagerLocal {
/**
* A MeasurementReport is full of MeasurementData objects. Each of these could potentially match against one of the
* cache's conditions. So, each must be checked against it, to see whether it fires against any of the conditions.
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(MeasurementData... measurementData);
/**
* A MeasurementReport is full of CallTimeData objects. Each of these could potentially match against one of the
* cache's conditions. So, each must be checked against it, to see whether it fires against any of the conditions.
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(CallTimeData... callTimeData);
/**
* Operation history occurs in two distinct phases. The first is when the operation is first triggered. An
* OperationHistory element gets persisted whose status is INPROGRESS. The request is sent down to some agent that
* carries out the requested work. Each agent will send a response back out-of-band and update the operation
* accordingly. This method needs to be called in BOTH circumstances. Since the current implementation of the alerts
* subsystem allows you to generate an alert based on ANY of the valid states an operation can be in, we must check
* the conditions when the OperationHistory is in the only INPROGRESS state as well as any of the various
* 'resultant' states.
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(OperationHistory operationHistory);
/**
* Since Availability is no longer a measurement, it must be checked differently. As a side note, since Availability
* is RLE users can ONLY be notified when the Availability changes. If the Availability for a resource doesn't
* change between two consecutive reports, this method can be safely called, but it will not trigger an event.
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(Availability... availability);
/**
* Availability duration checking is unlike Availability. Since Availability is RLE it does not give us
* the ability to perform avail duration, this mechnism does.
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(AvailabilityDurationComposite... availabilityDurationComposites);
/**
* An EventReport is full of Event objects. Each of these could potentially match against one of the cache's
* conditions. So, each must be checked against it, to see whether it fires against any of the conditions.
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(EventSource source, Event... events);
/**
* ResourceConfiguration changes can be made through the UI or on the managed resource. Whenever a new
* ResourceConfigurationUpdate is created, it should be passed to this method
*
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(ResourceConfigurationUpdate update);
/**
* Drift changes that an agent reported.
*
* @param driftChangeSetSummary data on the change set that is to be checked
* @return the number of conditions that were true against this argument
*/
AlertConditionCacheStats checkConditions(DriftChangeSetSummary driftChangeSetSummary);
void reloadCachesForAgent(int agentId);
void reloadGlobalCache();
void reloadAllCaches();
}