1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
# ratecounter
[](https://circleci.com/gh/paulbellamy/ratecounter)
[](https://goreportcard.com/report/github.com/paulbellamy/ratecounter)
[](https://godoc.org/github.com/paulbellamy/ratecounter)
[](https://codecov.io/gh/paulbellamy/ratecounter)
A Thread-Safe RateCounter implementation in Golang
## Usage
```
import "github.com/paulbellamy/ratecounter"
```
Package ratecounter provides a thread-safe rate-counter, for tracking
counts in an interval
Useful for implementing counters and stats of 'requests-per-second' (for
example):
```go
// We're recording marks-per-1second
counter := ratecounter.NewRateCounter(1 * time.Second)
// Record an event happening
counter.Incr(1)
// get the current requests-per-second
counter.Rate()
```
To record an average over a longer period, you can:
```go
// Record requests-per-minute
counter := ratecounter.NewRateCounter(60 * time.Second)
// Calculate the average requests-per-second for the last minute
counter.Rate() / 60
```
Also you can track average value of some metric in an interval.
Useful for implementing counters and stats of 'average-execution-time' (for
example):
```go
// We're recording average execution time of some heavy operation in the last minute.
counter := ratecounter.NewAvgRateCounter(60 * time.Second)
// Start timer.
startTime := time.Now()
// Execute heavy operation.
heavyOperation()
// Record elapsed time.
counter.Incr(time.Since(startTime).Nanoseconds())
// Get the current average execution time.
counter.Rate()
```
## Documentation
Check latest documentation on [go doc](https://godoc.org/github.com/paulbellamy/ratecounter).
|