private FactTaskData CalculateFactTaskData(IEnumerable <StateLog> stateLogs) { var factTaskData = new FactTaskData(); var enumerator = stateLogs.GetEnumerator(); if (enumerator.MoveNext()) { StateLog current = enumerator.Current, first = current, prev = null; while (current != null) { var next = enumerator.MoveNext() ? enumerator.Current : null; int timeSpanInSeconds; if (next != null) { timeSpanInSeconds = (int)(next.DateTime - current.DateTime).TotalSeconds; } else { timeSpanInSeconds = (int)(DateTime.Now - current.DateTime).TotalSeconds; factTaskData.Exception = current.Exception; } switch (current.State) { case TaskState.Calculating: factTaskData.CalculatingTime += timeSpanInSeconds; factTaskData.CalculationRuns++; if (factTaskData.CalculationRuns == 1) { factTaskData.StartTime = current.DateTime; factTaskData.InitialWaitingTime = (int)(current.DateTime - first.DateTime).TotalSeconds; } if (prev != null && prev.State != TaskState.Transferring) { factTaskData.Retries++; } break; case TaskState.Waiting: factTaskData.WaitingTime += timeSpanInSeconds; break; case TaskState.Transferring: factTaskData.TransferTime += timeSpanInSeconds; break; case TaskState.Finished: case TaskState.Failed: case TaskState.Aborted: factTaskData.EndTime = current.DateTime; break; } prev = current; current = next; } } return(factTaskData); }
private FactTaskData CalculateFactTaskData(IEnumerable<StateLog> stateLogs) { var factTaskData = new FactTaskData(); var enumerator = stateLogs.GetEnumerator(); if (enumerator.MoveNext()) { StateLog current = enumerator.Current, first = current, prev = null; while (current != null) { var next = enumerator.MoveNext() ? enumerator.Current : null; int timeSpanInSeconds; if (next != null) { timeSpanInSeconds = (int)(next.DateTime - current.DateTime).TotalSeconds; } else { timeSpanInSeconds = (int)(DateTime.Now - current.DateTime).TotalSeconds; factTaskData.Exception = current.Exception; } switch (current.State) { case TaskState.Calculating: factTaskData.CalculatingTime += timeSpanInSeconds; factTaskData.CalculationRuns++; if (factTaskData.CalculationRuns == 1) { factTaskData.StartTime = current.DateTime; factTaskData.InitialWaitingTime = (int)(current.DateTime - first.DateTime).TotalSeconds; } if (prev != null && prev.State != TaskState.Transferring) { factTaskData.Retries++; } break; case TaskState.Waiting: factTaskData.WaitingTime += timeSpanInSeconds; break; case TaskState.Transferring: factTaskData.TransferTime += timeSpanInSeconds; break; case TaskState.Finished: case TaskState.Failed: case TaskState.Aborted: factTaskData.EndTime = current.DateTime; break; } prev = current; current = next; } } return factTaskData; }