1 | compoundAggregator = require('./compound-aggregator')
|
2 |
|
3 | class 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 |
|
35 | exports.create = -> new LazyBucketedAggregator() |
\ | No newline at end of file |