This stupidly named Go package contains a single struct that is used to implement counters on a sliding time window.
import (
"fmt""github.com/prep/average"
)
funcmain() {
// Create a SlidingWindow that has a window of 15 minutes, with a// granulity of 1 minute.sw:=average.MustNew(15*time.Minute, time.Minute)
defersw.Stop()
// Do some work.sw.Add(15)
// Do some more work.sw.Add(22)
// Do even more work.sw.Add(22)
fmt.Printf("Average of last 1m: %f\n", sw.Average(time.Minute)
fmt.Printf("Average of last 5m: %f\n", sw.Average(5*time.Minute)
fmt.Printf("Average of last 15m: %f\n\n", sw.Average(15*time.Minute)
total, numSamples :=sw.Total(15*time.Minute)
fmt.Printf("Counter has a total of %d over %d samples", total, numSamples)
}This software is created for MessageBird B.V. and distributed under the BSD-style license found in the LICENSE file.