Ejemplo n.º 1
0
        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);
        }