package com.kspichale.storm_demo.counter;
import org.joda.time.DateTime;
public class RollingCounter {
final long intervalMillis = 10 * 60 * 1000;
final int SIZE = 18;
final int[] counters = new int[SIZE];
int pos = 0;
long startTime;
public RollingCounter() {
super();
startTime = DateTime.now().getMillis();
}
public void increment(final DateTime currentCall) {
long minus = currentCall.getMillis() - startTime;
long steps = (minus / intervalMillis) % SIZE;
for (int i = 0; i < steps; i++) {
counters[pos] = 0;
pos = (pos + 1) % SIZE;
}
counters[pos]++;
}
public long getSum() {
long sum = 0;
for (int i : counters) {
sum += i;
}
return sum;
}
}