private void ProcessStats(object state) { var currentTrace = Interlocked.Exchange(ref grainTrace, new ConcurrentDictionary <string, SiloGrainTraceEntry>()); if (currentTrace.Count > 0) { if (siloAddress == null) { siloAddress = localSiloDetails.SiloAddress.ToParsableString(); } var items = currentTrace.Values.ToArray(); foreach (var item in items) { item.Grain = TypeFormatter.Parse(item.Grain); } try { dashboardGrain = dashboardGrain ?? grainFactory.GetGrain <IDashboardGrain>(0); 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, 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"); } } }
public DashboardClient(IGrainFactory grainFactory) { this.grainFactory = grainFactory; dashboardGrain = grainFactory.GetGrain <IDashboardGrain>(0); remindersGrain = grainFactory.GetGrain <IDashboardRemindersGrain>(0); }