internal void Process(CombinedWorkerThreadResult wtResult) { Seconds = wtResult.Seconds; var items = wtResult.Seconds.Select(r => r.Value).DefaultIfEmpty(new Second(0)).ToList(); Count = items.Sum(s => s.Count); RequestsPerSecond = Count / (Elapsed.TotalMilliseconds / 1000); BytesPrSecond = items.Sum(s => s.Bytes) / (Elapsed.TotalMilliseconds / 1000); foreach (var statusCode in items.SelectMany(s => s.StatusCodes)) { if (StatusCodes.ContainsKey(statusCode.Key)) { StatusCodes[statusCode.Key] += statusCode.Value; } else { StatusCodes.Add(statusCode.Key, statusCode.Value); } } foreach (var exception in items.SelectMany(s => s.Exceptions)) { if (Exceptions.ContainsKey(exception.Key)) { Exceptions[exception.Key] += exception.Value; } else { Exceptions.Add(exception.Key, exception.Value); } } Errors = StatusCodes.Where(s => s.Key >= 400).Sum(s => s.Value) + Exceptions.Sum(e => e.Value); var responseTimes = GetResponseTimes(wtResult.ResponseTimes); if (!responseTimes.Any()) { return; } Median = responseTimes.GetMedian(); StdDev = responseTimes.GetStdDev(); Min = responseTimes.First(); Max = responseTimes.Last(); Histogram = GenerateHistogram(responseTimes); }