Example #1
0
        protected override void ProcessEvent(MungServerEvent evt)
        {
            var json = evt.Token.ToString();

            if (PassesFilter(json))
            {
                var updates = new List <JavascriptMetricUpdate>();
                foreach (var filter in FilterBuilder.Filters(evt.Data, _dimensions))
                {
                    Console.WriteLine("Filter: {0}", filter);
                    Dictionary <string, double> values = new Dictionary <string, double>();
                    foreach (var period in ReportingPeriods)
                    {
                        var key = PeriodMetric.BaseKey(Name, period, filter);
                        if (!_aggregators.ContainsKey(key))
                        {
                            var agg = new PeriodMetric(Name, _javascript, filter, period);
                            _aggregators[key] = agg;
                        }

                        _aggregators[key].ProcessEvent(json);
                    }
                    updates.Add(new JavascriptMetricUpdate()
                    {
                        Periods = values,
                        Filter  = filter
                    });
                }

                // Do all the callbacks in the background
                Task.Run(() => {
                    foreach (var callback in _updateCallbacks.Values)
                    {
                        callback(updates);
                    }
                });
            }
        }
Example #2
0
        protected override void ProcessEvent(MungServerEvent evt)
        {
            var json = evt.Token.ToString();
            if (PassesFilter(json)) {
                var updates = new List<JavascriptMetricUpdate>();
                foreach (var filter in FilterBuilder.Filters(evt.Data, _dimensions)) {
                    Console.WriteLine("Filter: {0}", filter);
                    Dictionary<string, double> values = new Dictionary<string, double>();
                    foreach (var period in ReportingPeriods) {

                        var key = PeriodMetric.BaseKey(Name, period, filter);
                        if (!_aggregators.ContainsKey(key)) {
                            var agg = new PeriodMetric(Name, _javascript, filter, period);
                            _aggregators[key] = agg;
                        }

                        _aggregators[key].ProcessEvent(json);

                    }
                    updates.Add(new JavascriptMetricUpdate() {
                        Periods = values,
                        Filter = filter
                    });

                }

                // Do all the callbacks in the background
                Task.Run(() => {
                    foreach (var callback in _updateCallbacks.Values) {
                        callback(updates);
                    }
                });

            }
        }