示例#1
0
        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");
                }
            }
        }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        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));
                }
            }
        }