Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Counter storage system for a concrete time window

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .rvmrc.example
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 Gemfile
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 time_window_drop_collector.gemspec
README.md

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
Something went wrong with that request. Please try again.