Skip to content

elcamino/ratecounter

 
 

Repository files navigation

ratecounter

CircleCI Go Report Card GoDoc codecov

A Thread-Safe RateCounter implementation in Golang

Usage

import "github.com/elcamino/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):

// We're recording marks-per-1second
ctx, cancel := context.WithCancel(context.Background())
counter := ratecounter.NewRateCounter(ctx, 1 * time.Second)
// Record an event happening
counter.Incr(1)
// get the current requests-per-second
counter.Rate()
// the counter continues to run until its context is cancelled
cancel()

To record an average over a longer period, you can:

// Record requests-per-minute
ctx, cancel := context.WithCancel(context.Background())
counter := ratecounter.NewRateCounter(ctx, 60 * time.Second)
// Calculate the average requests-per-second for the last minute
counter.Rate() / 60
cancel()

Also you can track average value of some metric in an interval.

Useful for implementing counters and stats of 'average-execution-time' (for example):

// We're recording average execution time of some heavy operation in the last minute.
ctx, cancel := context.WithCancel(context.Background())
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()
cancel()

Documentation

Check latest documentation on go doc.

About

A Thread-Safe RateCounter implementation in Golang

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%