package org.dcache.services.info.gathers;
import java.util.Date;
/**
* Implements a skeleton Schedulable Class that is triggered periodically.
*
* @author Paul Millar <paul.millar@desy.de>
*/
public class SkelPeriodicActivity implements Schedulable
{
/** This activity's period, in seconds */
private long _period;
private Date _nextTrigger;
/**
* Create a new periodic activity, with a random initial offset.
* @param period how often the trigger() should happen, in seconds.
*/
public SkelPeriodicActivity(long period)
{
_period = period;
_nextTrigger = new Date((long)(System.currentTimeMillis() + Math.random() * _period * 1000));
}
@Override
public Date shouldNextBeTriggered()
{
return new Date(_nextTrigger.getTime());
}
@Override
public void trigger()
{
_nextTrigger.setTime(System.currentTimeMillis() + _period * 1000);
}
/**
* Return the recommended metric lifetime. We assume a message might be lost and
* 50% jitter how long the reply message will be received.
* @return the metric period, in seconds.
*/
protected long metricLifetime()
{
return (long) (_period * 2.5);
}
}