/// <summary> /// Processes the event, returning true if it passes the metrics filter /// and thus updates a value, or false if it doesn't pass the filter. /// </summary> /// <param name="evt"></param> /// <returns></returns> public bool ProcessEvent(MungServerEvent evt) { lock (Sync) { if (!Total.Filter(evt)) { return(false); } var at = Metric.Period.StandardizeDate(DateTime.UtcNow); var updates = new List <MetricValue>(); foreach (var filter in FilterBuilder.Filters(evt.Data, Dimensions)) { Console.WriteLine("Filter: {0}", filter); Dictionary <string, double> values = new Dictionary <string, double>(); if (!Aggregates.ContainsKey(filter)) { var agg = AggregateFactory.Default.Get(Metric);; Aggregates[filter] = agg; } var value = Aggregates[filter].Accumulate(evt); } } return(true); }
protected override Task OnReceived(IRequest request, string connectionId, string data) { var evt = new MungServerEvent(data); MungState.App.Pipeline.Process(evt); return(base.OnReceived(request, connectionId, data)); }
public bool Filter(MungServerEvent evt) { if (!string.IsNullOrEmpty(Metric.EventType) && Metric.EventType != evt.Type) { return(false); } if (string.IsNullOrEmpty(Metric.Filter)) { return(true); } return(JsonExpression.IsTrue(evt.Token, Metric.Filter)); }
protected override void ProcessEvent(MungServerEvent evt) { try { CurrentState.CheckIsCurrent(); if (CurrentState.ProcessEvent(evt)) { // Let our loop know that we need to send data to the client. _clientNeedData = true; // Let our event loop know that we need to update redis. _stateIsDirty = true; } } catch (Exception ex) { foreach (var callback in _errorCallbacks.Values) { callback(ex.Message + "\r\n" + ex.StackTrace); } } }
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); } }); } }
protected override void ProcessEvent(MungServerEvent evt) { Send(evt); }
public abstract double Accumulate(MungServerEvent evt);
public double EvaluateNumeric(MungServerEvent evt, string expression) { return(JsonExpression.EvalulateNumber(evt.Token, expression)); }
public double EvaluateNumeric(MungServerEvent evt) { return(EvaluateNumeric(evt, Expression)); }
protected override void ProcessEvent(MungServerEvent evt) { _relationizer.Write(evt.Data, evt.Type); }
public override double Accumulate(MungServerEvent evt) { Count++; Sum += EvaluateNumeric(evt); return(Terminate()); }
public override double Accumulate(MungServerEvent evt) { Count++; return(Terminate()); }