bottleneck
Version:
Distributed task scheduler and rate limiter
34 lines (32 loc) • 1.17 kB
text/coffeescript
parser = require "./parser"
Events = require "./Events"
class Group
defaults: { timeout: 1000 * 60 * 5 }
constructor: (={}, groupOptions={}) ->
parser.load groupOptions, , @
= new Events @
= {}
= require "./Bottleneck"
()
key: (key="") => [key] ? do =>
limiter = [key] = new Object.assign , { id: "group-key-#{key}", _groupTimeout: }
.trigger "created", [limiter, key]
limiter
deleteKey: (key="") =>
[key]?.disconnect()
delete [key]
limiters: =>
for k,v of then { key: k, limiter: v }
keys: => Object.keys
_startAutoCleanup: =>
clearInterval
( = setInterval =>
time = Date.now()
for k,v of
try if await v._store.__groupCheck__(time) then k
catch e then v.Events.trigger "error", [e]
, ( / 2)).unref?()
updateSettings: (options={}) =>
parser.overwrite options, , @
() if options.timeout?
module.exports = Group