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