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();
public void Test_GroupByGrainAndSilo_TraceHistory() { traceHistory.GroupByGrainAndSilo().ToLookup(x => (x.Grain, x.SiloAddress)); }
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();