public class SlidingTimeWindowMetrics extends java.lang.Object implements Metrics
Metrics implementation is backed by a sliding time window that aggregates only the
calls made in the last N seconds.
The sliding time window is implemented with a circular array of N partial aggregations
(buckets). If the time window size is 10 seconds, the circular array has always 10 partial
aggregations (buckets). Every bucket aggregates the outcome of all calls which happen in a
certain epoch second. (Partial aggregation) The head bucket of the circular array stores the call
outcomes of the current epoch second. The other partial aggregations store the call outcomes of
the previous N-1 epoch seconds.
The sliding window does not store call outcomes (tuples) individually, but incrementally updates partial aggregations (bucket) and a total aggregation. The total total aggregation is updated incrementally when a new call outcome is recorded. When the oldest bucket is evicted, the partial total aggregation of that bucket is subtracted from the total aggregation. (Subtract-on-Evict)
The time to retrieve a Snapshot is constant 0(1), since the Snapshot is pre-aggregated and is
independent of the time window size. The space requirement (memory consumption) of this
implementation should be nearly constant O(n), since the call outcomes (tuples) are not stored
individually. Only N partial aggregations and 1 total total aggregation are created.
Metrics.Outcome| Constructor and Description |
|---|
SlidingTimeWindowMetrics(int timeWindowSizeInSeconds)
Creates a new
SlidingTimeWindowMetrics with the given time window size. |
SlidingTimeWindowMetrics(int timeWindowSizeInSeconds,
java.time.Clock clock)
Creates a new
SlidingTimeWindowMetrics with the given clock and window of time. |
| Modifier and Type | Method and Description |
|---|---|
Snapshot |
getSnapshot()
Returns a snapshot.
|
Snapshot |
record(long duration,
java.util.concurrent.TimeUnit durationUnit,
Metrics.Outcome outcome)
Records a call.
|
public SlidingTimeWindowMetrics(int timeWindowSizeInSeconds)
SlidingTimeWindowMetrics with the given time window size.timeWindowSizeInSeconds - the window time size in secondspublic SlidingTimeWindowMetrics(int timeWindowSizeInSeconds,
java.time.Clock clock)
SlidingTimeWindowMetrics with the given clock and window of time.timeWindowSizeInSeconds - the window time size in secondsclock - the Clock to usepublic Snapshot record(long duration, java.util.concurrent.TimeUnit durationUnit, Metrics.Outcome outcome)
Metricspublic Snapshot getSnapshot()
MetricsgetSnapshot in interface Metrics