Skip to content
This repository has been archived by the owner on Sep 18, 2024. It is now read-only.

Counter storage system for a concrete time window

Notifications You must be signed in to change notification settings

LatanaTech/TimeWindowDropCollector

 
 

Repository files navigation

Time Window Drop Collector

System to keep record of an amount for a concrete duration.

With Time Window Drop Collector you can define a maximun time you want to keep the record.

You can also keep record for different keys.

How to use

Install

gem install time_window_drop_collector

Config

twdc =
  TimeWindowDropCollector.new do
    client <client>, <client_opts>     # underneeth client
    window <seconds>                   # in seconds
    slices <num of slices>             # one slice every minute
  end

These are the default values

twdc =
  TimeWindowDropCollector.new do
    client :memcache, "localhost:11211"     # underneeth client
    window 600                              # in seconds
    slices 10                               # one slice every minute
  end

Client

Can be:

  • :memcache
  • :redis
  • :rails
  • :mock

Use

twdc.drop( "id1" )
twdc.drop( "id1" )
twdc.drop( "id2" )
ts = twdc.drop( "id1", 4 )

twdc.count( "id1" )  # => 6
twdc.count( "id2" )  # => 1

twdc.pick( ts, "id1", 2)
twdc.count( "id1" )  # => 4

# after 10 minutes
twdc.count( "id1" )  # => 0

Cache clients wrappers

Now we have implementation for 3 diferent underneeth cache clients.

Memcache

It uses the Dalli Client for memcache.

twdc =
  TimeWindowDropCollector.new do
    client :memcache, "localhost:11211"
  end

Rails cache

It uses the Rails.cache accesible

twdc =
  TimeWindowDropCollector.new do
    client :rails_cache
  end

Redis

twdc =
  TimeWindowDropCollector.new do
    client :redis, { :host => "host", :port => "port" }
  end

Log

You can set the ENV_VAR TWDC_DEBUG and debug log will put to the stdout.

About

Counter storage system for a concrete time window

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%