private void ProcessStats(object state) { if (dispatcher.CanDispatch()) { var currentTrace = Interlocked.Exchange(ref grainTrace, new ConcurrentDictionary <string, SiloGrainTraceEntry>()); var items = currentTrace.Values.ToArray(); foreach (var item in items) { item.Grain = TypeFormatter.Parse(item.Grain); } try { dispatcher.DispatchAsync(() => { this.dashboardGrain = this.dashboardGrain ?? grainFactory.GetGrain <IDashboardGrain>(0); return(dashboardGrain.SubmitTracing(siloAddress, items.AsImmutable())); }).Ignore(); } catch (Exception ex) { logger.LogWarning(100001, ex, "Exception thrown sending tracing to dashboard grain"); } } }
private void ProcessStats(object state) { if (dispatcher.CanDispatch()) { var currentTrace = Interlocked.Exchange(ref grainTrace, new ConcurrentDictionary <string, GrainTraceEntry>()); var items = currentTrace.Values.ToArray(); foreach (var item in items) { item.Grain = TypeFormatter.Parse(item.Grain); } try { dispatcher.DispatchAsync(async() => { var dashboardGrain = grainFactory.GetGrain <IDashboardGrain>(0); await dashboardGrain.SubmitTracing(siloAddress, items).ConfigureAwait(false); }).Wait(30000); } catch (Exception ex) { logger.LogWarning(100001, "Exception thrown sending tracing to dashboard grain", ex); } } }
public Task ReportStats(List <ICounter> statsCounters) { if (dispatcher.CanDispatch()) { var grain = runtime.GrainFactory.GetGrain <ISiloGrain>(runtime.ToSiloAddress()); var values = statsCounters.Select(x => new StatCounter { Name = x.Name, Value = x.GetValueString(), Delta = x.IsValueDelta ? x.GetDeltaString() : null }).OrderBy(x => x.Name).ToArray(); dispatcher.DispatchAsync(() => grain.ReportCounters(values)); } return(Task.CompletedTask); }
public void Flush() { if (dispatcher.CanDispatch()) { var grain = grainFactory.GetGrain <ISiloGrain>(localSiloDetails.SiloAddress.ToParsableString()); var counters = new List <StatCounter>(); foreach (var metric in metrics.ToArray()) { var v = metric.Value.Current; var d = metric.Value.Current - metric.Value.Last; counters.Add(new StatCounter { Name = metric.Key, Value = v.ToString(CultureInfo.InvariantCulture), Delta = d.ToString(CultureInfo.InvariantCulture) }); } foreach (var metric in timespanMetrics.ToArray()) { var v = metric.Value.Current; var d = metric.Value.Current - metric.Value.Last; counters.Add(new StatCounter { Name = metric.Key, Value = v.ToString("c", CultureInfo.InvariantCulture), Delta = d.ToString("c", CultureInfo.InvariantCulture) }); } if (counters.Count > 0) { var countersArray = counters.ToArray(); dispatcher.DispatchAsync(() => grain.ReportCounters(countersArray)); } } }