Example #1
0
 public DashboardCounters()
 {
     Hosts                       = new SiloDetails[0];
     SimpleGrainStats            = new SimpleGrainStatisticCounter[0];
     TotalActivationCountHistory = new Queue <int>();
     TotalActiveHostCountHistory = new Queue <int>();
     foreach (var x in Enumerable.Range(1, Dashboard.HistoryLength))
     {
         this.TotalActivationCountHistory.Enqueue(0);
         this.TotalActiveHostCountHistory.Enqueue(0);
     }
 }
 public DashboardCounters()
 {
     Hosts = new SiloDetails[0];
     SimpleGrainStats = new SimpleGrainStatisticCounter[0];
     TotalActivationCountHistory = new Queue<int>();
     TotalActiveHostCountHistory = new Queue<int>();
     foreach (var x in Enumerable.Range(1, Dashboard.HistoryLength))
     {
         this.TotalActivationCountHistory.Enqueue(0);
         this.TotalActiveHostCountHistory.Enqueue(0);
     }
 }
        internal void RecalculateCounters(int activationCount, SiloDetails[] hosts,
                                          IList <SimpleGrainStatistic> simpleGrainStatistics)
        {
            counters.TotalActivationCount = activationCount;

            counters.TotalActiveHostCount        = hosts.Count(x => x.SiloStatus == SiloStatus.Active);
            counters.TotalActivationCountHistory = counters.TotalActivationCountHistory.Enqueue(activationCount).Dequeue();
            counters.TotalActiveHostCountHistory = counters.TotalActiveHostCountHistory.Enqueue(counters.TotalActiveHostCount).Dequeue();

            // TODO - whatever max elapsed time
            var elapsedTime = Math.Min((DateTime.UtcNow - startTime).TotalSeconds, 100);

            counters.Hosts = hosts;

            var aggregatedTotals = history.GroupByGrainAndSilo().ToLookup(x => (x.Grain, x.SiloAddress));

            //var aggregatedTotals = history.ToLookup(x => (x.Grain, x.SiloAddress));

            counters.SimpleGrainStats = simpleGrainStatistics.Select(x =>
            {
                var grainName   = TypeFormatter.Parse(x.GrainType);
                var siloAddress = x.SiloAddress.ToParsableString();

                var result = new SimpleGrainStatisticCounter
                {
                    ActivationCount = x.ActivationCount,
                    GrainType       = grainName,
                    SiloAddress     = siloAddress,
                    TotalSeconds    = elapsedTime
                };

                foreach (var item in aggregatedTotals[(grainName, siloAddress)])
                {
                    result.TotalAwaitTime  += item.ElapsedTime;
                    result.TotalCalls      += item.Count;
                    result.TotalExceptions += item.ExceptionCount;
                }

                return(result);
            }).ToArray();
Example #4
0
        internal void RecalculateCounters(int activationCount, SiloDetails[] hosts,
                                          IList <DetailedGrainStatistic> simpleGrainStatistics)
        {
            counters.TotalActivationCount = activationCount;

            counters.TotalActiveHostCount        = hosts.Count(x => x.SiloStatus == SiloStatus.Active);
            counters.TotalActivationCountHistory = counters.TotalActivationCountHistory.Enqueue(activationCount).Dequeue();
            counters.TotalActiveHostCountHistory = counters.TotalActiveHostCountHistory.Enqueue(counters.TotalActiveHostCount).Dequeue();

            // TODO - whatever max elapsed time
            var elapsedTime = Math.Min((DateTime.UtcNow - startTime).TotalSeconds, 100);

            foreach (var item in counters.Hosts)
            {
                foreach (var item2 in hosts)
                {
                    if (item2.SiloAddress == item.SiloAddress)
                    {
                        item2.ExtraData = item.ExtraData;
                    }
                }
            }

            counters.Hosts = hosts;

            var aggregatedTotals = history.GroupByGrainAndSilo().ToLookup(x => (x.Grain, x.SiloAddress));

            var grainstatts = simpleGrainStatistics.Select(x =>
            {
                var grainName = TypeFormatter.Parse(x.GrainType);

                if (MultiGrainAttribute.IsRecordClass(x.GrainType))
                {
                    if (x.GrainIdentity.PrimaryKeyString != null)
                    {
                        grainName += $":{x.GrainIdentity.PrimaryKeyString}";
                    }
                    else
                    {
                        grainName += $":{x.GrainIdentity.PrimaryKeyLong}";
                    }
                }

                var siloAddress = x.SiloAddress.ToParsableString();

                var result = new SimpleGrainStatisticCounter
                {
                    //ActivationCount = x.ActivationCount,
                    ActivationCount = 1,
                    GrainType       = grainName,
                    SiloAddress     = siloAddress,
                    TotalSeconds    = elapsedTime
                };

                foreach (var item in aggregatedTotals[(grainName, siloAddress)])
                {
                    result.TotalAwaitTime  += item.ElapsedTime;
                    result.TotalCalls      += item.Count;
                    result.TotalExceptions += item.ExceptionCount;
                }

                return(result);
            }).ToArray();