UNPKG

1.14 kBtext/coffeescriptView Raw
1compoundAggregator = require('./compound-aggregator')
2
3class LazyBucketedAggregator
4 constructor: ->
5 @aggregatorOpts = {}
6 @aggregators = {}
7 @events = []
8 track: (name, opts) ->
9 @aggregatorOpts[name] = opts
10 console.log("Lazy Tracking '#{name}' with #{JSON.stringify(opts)}")
11 on: (name, event, callback) ->
12 if arguments.length == 2
13 event = name
14 callback = event
15 name = null
16 @events.push( name:name, event:event, callback:callback )
17 push: (bucket, time, obj) ->
18 unless @aggregators[bucket]
19 @aggregators[bucket] = compoundAggregator.create()
20 @aggregators[bucket].track(name, opts) for name, opts of @aggregatorOpts
21 for e in @events
22 @aggregators[bucket].on e.name, e.event, (newValue, oldValue) -> e.callback(bucket, newValue, oldValue)
23 @aggregators[bucket].push(time, obj)
24 value: (name, bucket) ->
25 if bucket
26 @aggregators[bucket].value(name)
27 else
28 ret = {}
29 for bucket, agg of @aggregators
30 ret[bucket] = agg.value(name)
31 ret
32 buckets: ->
33 Object.keys(@aggregators)
34
35exports.create = -> new LazyBucketedAggregator()
\No newline at end of file