Skip to content

Instantly share code, notes, and snippets.

@grazer
Last active December 22, 2015 17:19

Revisions

  1. grazer revised this gist Oct 4, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion token bucket
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@ class TokenBucket(msgPerSecond:Long, bucketSize:Long) {
    val current = System.currentTimeMillis
    val delta = current-prev
    prev = current
    tokens += delta/1000 * msgPerSecond
    tokens += delta/1000.0 * msgPerSecond
    if (tokens > bucketSize)
    tokens = bucketSize
    if (tokens > 0)
  2. grazer revised this gist Sep 10, 2013. 1 changed file with 12 additions and 0 deletions.
    12 changes: 12 additions & 0 deletions token bucket
    Original file line number Diff line number Diff line change
    @@ -16,3 +16,15 @@ class TokenBucket(msgPerSecond:Long, bucketSize:Long) {
    tokens -= 1
    }
    }

    scala> var tb = new TokenBucket(10, 6)
    tb: TokenBucket = TokenBucket@5c2f4f8b

    scala> (1 to 10) foreach( i => tb.limit { println(i) })
    1
    2
    3
    4
    5
    6

  3. grazer created this gist Sep 10, 2013.
    18 changes: 18 additions & 0 deletions token bucket
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    class TokenBucket(msgPerSecond:Long, bucketSize:Long) {

    var prev = 0L
    var tokens = bucketSize

    def limit(func: => Any): Any = {
    val current = System.currentTimeMillis
    val delta = current-prev
    prev = current
    tokens += delta/1000 * msgPerSecond
    if (tokens > bucketSize)
    tokens = bucketSize
    if (tokens > 0)
    func

    tokens -= 1
    }
    }