/** * Clean up points that don't count any more (are before our * rolling window) from our current queue of points. */ private void cleanupOldPoints() { Date cutoffTime = new Date(new Date().getTime() - windowSizeMs); while (!currentPoints.isEmpty() && currentPoints.peekFirst().getEventTime().before(cutoffTime)) { currentPoints.removeFirst(); } }
/** * Get the current average. * @return The current average. */ public synchronized long getCurrentAverage() { cleanupOldPoints(); if (currentPoints.isEmpty()) { return 0; } long sum = 0; for (DataPoint current : currentPoints) { sum += current.getValue(); } return sum / currentPoints.size(); }
/** * Get the current average. * @return The current average. */ public synchronized long getCurrentAverage() { cleanupOldPoints(); if (currentPoints.isEmpty()) { return 0; } long sum = 0; for (DataPoint current : currentPoints) { sum += current.getValue(); } return sum / currentPoints.size(); }
/** * Add a new data point that just happened. * @param value The value of the data point. */ public synchronized void addPoint(long value) { currentPoints.offer(new DataPoint(new Date(), value)); cleanupOldPoints(); }
/** * Clean up points that don't count any more (are before our * rolling window) from our current queue of points. */ private void cleanupOldPoints() { Date cutoffTime = new Date(new Date().getTime() - windowSizeMs); while (!currentPoints.isEmpty() && currentPoints.peekFirst().getEventTime().before(cutoffTime)) { currentPoints.removeFirst(); } }
/** * Add a new data point that just happened. * @param value The value of the data point. */ public synchronized void addPoint(long value) { currentPoints.offer(new DataPoint(new Date(), value)); cleanupOldPoints(); }