package org.dcache.services.info.gathers.srm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import diskCacheV111.services.space.message.GetLinkGroupsMessage;
import dmg.cells.nucleus.CellPath;
import org.dcache.services.info.gathers.MessageSender;
import org.dcache.services.info.gathers.SkelPeriodicActivity;
/**
* Class to send off requests for detailed information.
* <p>
* Ideally, this would request information about a single, specific LinkGroup (or perhaps a
* few linkgroups) in the Message. However, that functionality hasn't been implemented yet.
* <p>
* Until it has, we query all information at the same time. Since this might be a heavy-weight
* operation (due to serialiastion), we try not to do it too often.
* @author Paul Millar <paul.millar@desy.de>
*/
public class LinkgroupDetailsDga extends SkelPeriodicActivity
{
private static final Logger LOGGER = LoggerFactory.getLogger(LinkgroupDetailsDga.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 LinkGroups.
* @param interval how often the list of linkgroups should be updated, in seconds.
*/
public LinkgroupDetailsDga(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 linkgroup details request message");
_sender.sendMessage(_metricLifetime, _spacemanager, new GetLinkGroupsMessage());
}
@Override
public String toString()
{
return this.getClass().getSimpleName();
}
}