accounting-lib/src/main/java/org/gcube/accounting/datamodel/aggregation/scheduler/BufferAggregationScheduler....

64 lines
1.3 KiB
Java

/**
*
*/
package org.gcube.accounting.datamodel.aggregation.scheduler;
import java.util.Calendar;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
* This class implements a Simple Buffer with timeout strategy.
* It buffer a predefined number of Records before invoking a persistence.
*
*
*/
public class BufferAggregationScheduler extends AggregationScheduler {
/**
* Define the MAX number of Record to buffer.
* TODO Get from configuration
*/
protected final static int MAX_RECORDS_NUMBER = 15;
/**
* The Max amount of time elapsed form last record before after that
* the buffered record are persisted even if
* TODO Get from configuration
*/
protected final static long OLD_RECORD_MAX_TIME_ELAPSED = 1000*60*5; // 5 min
protected boolean firstOfBuffer;
protected long firstBufferedTime;
protected BufferAggregationScheduler(){
super();
this.firstOfBuffer = true;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isTimeToPersist(){
long now = Calendar.getInstance().getTimeInMillis();
if(firstOfBuffer){
firstOfBuffer = false;
firstBufferedTime = now;
}
if(records.size() >= MAX_RECORDS_NUMBER){
return true;
}
if((now - firstBufferedTime) >= OLD_RECORD_MAX_TIME_ELAPSED){
return true;
}
return false;
}
}