internal void AddWiEvent(WorkItemData widata, WiEventType type) { long?em = null; if (_runTestSw != null) { em = _runTestSw.ElapsedMilliseconds; } WiTestEvent e = new WiTestEvent { Type = type, Dt = DateTime.Now, ElapsedMilliseconds = em, GlobalElapsedMilliseconds = _globalSw.ElapsedMilliseconds }; widata.Events.Add(e); }
private PhaseDurationData GetPhaseDurationData(WiEventType start, WiEventType complete) { DateTime?minStartTime = null; DateTime?maxCompleteTime = null; long? minStartEm = null; long? maxCompleteEm = null; List <long> durationList = new List <long>(); foreach (WorkItemData wid in _wiDataList) { WiTestEvent se = wid.Events.FirstOrDefault(e => e.Type == start); WiTestEvent ce = wid.Events.FirstOrDefault(e => e.Type == complete); if (se != null && ce != null) { durationList.Add(ce.GlobalElapsedMilliseconds - se.GlobalElapsedMilliseconds); if (!minStartTime.HasValue || minStartTime.Value > se.Dt) { minStartTime = se.Dt; } if (!maxCompleteTime.HasValue || maxCompleteTime.Value < ce.Dt) { maxCompleteTime = ce.Dt; } if (!minStartEm.HasValue || minStartEm.Value > se.ElapsedMilliseconds.Value) { minStartEm = se.ElapsedMilliseconds; } if (!maxCompleteEm.HasValue || maxCompleteEm.Value < ce.ElapsedMilliseconds.Value) { maxCompleteEm = ce.ElapsedMilliseconds; } } } if (durationList.Count == 0) { return(null); } durationList.Sort(); long medianDuration = ((durationList.Count % 2) == 1 ? durationList[(durationList.Count - 1) / 2] : (durationList[durationList.Count / 2 - 1] + durationList[durationList.Count / 2]) / 2); decimal avgDuration = Math.Round(new decimal(durationList.Average()), 3); PhaseDurationData data = new PhaseDurationData { FirstStartTime = minStartTime.Value, LastCompleteTime = maxCompleteTime.Value, Duration = maxCompleteEm.Value - minStartEm.Value, FirstStartMs = minStartEm.Value, LastCompleteMs = maxCompleteEm.Value, MinDuration = durationList.First(), MaxDuration = durationList.Last(), MedianDuration = medianDuration, AverageDuration = avgDuration }; return(data); }