<PackageReference Include="Relativity.Server.Transfer.SDK" Version="7.7.0" />

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; } } }