/* * 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.resource; import java.util.List; import javax.ejb.Local; import javax.persistence.EntityManager; import javax.persistence.PostPersist; import org.rhq.core.clientapi.server.discovery.InventoryReport; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.measurement.ResourceAvailability; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.enterprise.server.discovery.DiscoveryBossBean; /** * A manager that provides methods for manipulating and querying the cached current availability for resources. * * @author Joseph Marques */ @Local public interface ResourceAvailabilityManagerLocal { /** * The first time an agent is started and its platform and top-level servers are discovered, * the {@link DiscoveryBossBean#mergeInventoryReport(InventoryReport)} will use the * {@link EntityManager} to persist the resource. A {@link PostPersist} hook exists on the * {@link Resource} entity to create a corresponding default {@link ResourceAvailability} * entity. However, when a platform or top-level server is removed from inventory, the agent * might rediscover the resource so quickly that {@link InventoryReport} merges the resource * instead of persisting new ones, bypassing the {@link PostPersist} hook. As a result, this * method should be called when resources are imported from the auto-discovery portlet (the * {@link InventoryStatus} is changed from NEW to COMMITTED, which will add the necessary * default {@link ResourceAvailability} objects to those resources missing them. * * @param resourceIds a list of resource ids which should have default {@link ResourceAvailability} * objects created for them, only if the corresponding data doesn't already exist. */ void insertNeededAvailabilityForImportedResources(List<Integer> resourceIds); /** * Returns the latest availability type for the given resource. * This tells you the currently known state of a resource - whether * it is UP or DOWN. * * @param whoami the user asking for the data * @param resourceId the id of the resource * @return the latest availability type for the given resource, <code>null</code> if not known */ AvailabilityType getLatestAvailabilityType(Subject whoami, int resourceId); /** * Returns the latest availability for the given Resource * * @param resourceId the id of the resource * @return the latest availability for the given Resource */ ResourceAvailability getLatestAvailability(int resourceId); /** * Update latest availabilities for all resources managed by the given agent to the given availability type. * NOTE: This does not include the top-level platform resource for the agent. * * @param agentId the id of the agent * @param availabilityType the type that all of the agent's resources will have * * @param isPlatform if true, updates only the agent's top level platform, if false only the children */ void updateAgentResourcesLatestAvailability(int agentId, AvailabilityType availabilityType, boolean isPlatform); }