package org.dcache.services.info.gathers.srm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import diskCacheV111.services.space.message.GetSpaceTokensMessage; import dmg.cells.nucleus.CellPath; import org.dcache.services.info.gathers.MessageSender; import org.dcache.services.info.gathers.SkelPeriodicActivity; /** * A class to fire off requests for detailed information about SRM Spaces. * <p> * Ideally, this would be based on SkelListBasedActivity, but the underlying Message * currently doesn't support requesting only a subset of all SRM Spaces. So * we must pull all Space information in one go. * * @author Paul Millar <paul.millar@desy.de> */ public class SrmSpaceDetailsDga extends SkelPeriodicActivity { private static final Logger LOGGER = LoggerFactory.getLogger(SrmSpaceDetailsDga.class); /** Assume that a message might be lost and allow for 50% jitter */ private static final double SAFETY_FACTOR = 2.5; private final CellPath _spacemanager; private final MessageSender _sender; /** The period between successive requests for data, in seconds */ final long _metricLifetime; /** * Create new DGA for maintaining a list of all SRM Spaces. * @param interval how often the list of spaces should be updated, in seconds. */ public SrmSpaceDetailsDga(CellPath spacemanager, MessageSender sender, int interval) { super(interval); _sender = sender; _metricLifetime = Math.round(interval * SAFETY_FACTOR); _spacemanager = spacemanager; } /** * When triggered, send a message. */ @Override public void trigger() { super.trigger(); LOGGER.trace("Sending space token details request message"); _sender.sendMessage(_metricLifetime, _spacemanager, new GetSpaceTokensMessage()); } @Override public String toString() { return this.getClass().getSimpleName(); } }