StatisticsTotalsCalculator
namespace Relativity.Transfer.Job
{
internal class StatisticsTotalsCalculator : IStatisticsTotalsCalculator
{
private readonly IJobTransferPathRepository jobTransferPathRepository;
private readonly ITransferLog log;
public StatisticsTotalsCalculator(IJobTransferPathRepository jobTransferPathRepository, ITransferLog log)
{
this.jobTransferPathRepository = jobTransferPathRepository;
this.log = log;
}
public IStatisticsTotals Calculate()
{
StatisticsTotals statisticsTotals = new StatisticsTotals();
foreach (JobTransferPath item in jobTransferPathRepository.SelectAll()) {
if (!item.Path.PathAttributes.HasFlag(TransferPathAttributes.Directory)) {
statisticsTotals.TotalRequestBytes += item.Path.Bytes;
statisticsTotals.TotalRequestFiles++;
}
statisticsTotals.TotalTransferredBytes += item.BytesTransferred;
if (item.Path.PathAttributes.HasFlag(TransferPathAttributes.Directory))
statisticsTotals.TotalRequestDirectories++;
else {
switch (item.Status) {
case TransferPathStatus.Failed:
statisticsTotals.TotalFailedFiles++;
break;
case TransferPathStatus.Fatal:
statisticsTotals.TotalFatalErrors++;
break;
case TransferPathStatus.Skipped:
statisticsTotals.TotalSkippedFiles++;
break;
case TransferPathStatus.Successful:
statisticsTotals.TotalTransferredFiles++;
break;
case TransferPathStatus.FileNotFound:
statisticsTotals.TotalFilesNotFound++;
break;
case TransferPathStatus.PermissionsError:
statisticsTotals.TotalFilePermissionErrors++;
break;
case TransferPathStatus.BadPathError:
statisticsTotals.TotalBadPathErrors++;
break;
case TransferPathStatus.FileBlocked:
statisticsTotals.TotalFilesIdentifiedAsMalware++;
break;
}
}
}
if (statisticsTotals.TotalRequestBytes < 0) {
log.LogWarning("TotalRequestBytes value is negative (TotalRequestBytes={TotalRequestBytes}) and will be changed to 0.", statisticsTotals.TotalRequestBytes);
statisticsTotals.TotalRequestBytes = 0;
}
return statisticsTotals;
}
}
}