62 lines
1.9 KiB
Markdown
62 lines
1.9 KiB
Markdown
|
# ratecounter
|
||
|
|
||
|
[![CircleCI](https://circleci.com/gh/paulbellamy/ratecounter.svg?style=svg)](https://circleci.com/gh/paulbellamy/ratecounter)
|
||
|
[![Go Report Card](https://goreportcard.com/badge/github.com/paulbellamy/ratecounter)](https://goreportcard.com/report/github.com/paulbellamy/ratecounter)
|
||
|
[![GoDoc](https://godoc.org/github.com/paulbellamy/ratecounter?status.svg)](https://godoc.org/github.com/paulbellamy/ratecounter)
|
||
|
[![codecov](https://codecov.io/gh/paulbellamy/ratecounter/branch/master/graph/badge.svg)](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).
|
||
|
|