TransferReportBuilder
class TransferReportBuilder
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Relativity.Transfer
{
internal class TransferReportBuilder
{
private class TransferIssueComparer : IEqualityComparer<ITransferIssue>
{
public bool Equals(ITransferIssue x, ITransferIssue y)
{
if (x == null && y == null)
return true;
if (x == null || y == null)
return false;
int? code = x.Code;
int? code2 = y.Code;
if (!((code.GetValueOrDefault() == code2.GetValueOrDefault()) & (code.HasValue == code2.HasValue)))
return false;
return string.CompareOrdinal(x.Message, y.Message) == 0;
}
public int GetHashCode(ITransferIssue x)
{
return ((x.Code ?? x.Code.GetHashCode()) * 397) ^ ((x.Message == null) ? 1 : x.Message.GetHashCode());
}
}
private const int _LAST_TRANSFER_ISSUES_TO_BE_REPORTED = 5;
public static string GetLatestTransferIssues(ITransferResult result, int leftPaddingSize = 1)
{
int num = (result.Issues.Count < 5) ? result.Issues.Count : 5;
string arg = new string(' ', leftPaddingSize);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 1; i <= num; i++) {
ITransferIssue transferIssue = result.Issues[result.Issues.Count - i];
stringBuilder.AppendLine($"{arg}""{transferIssue.Code}""{transferIssue.Message}");
}
return stringBuilder.ToString();
}
public static string GetUniqueTransferIssues(ITransferResult result, int leftPaddingSize = 1)
{
HashSet<ITransferIssue> hashSet = new HashSet<ITransferIssue>(new TransferIssueComparer());
foreach (ITransferIssue issue in result.Issues) {
if (!hashSet.Contains(issue))
hashSet.Add(issue);
}
string arg = new string(' ', leftPaddingSize);
StringBuilder stringBuilder = new StringBuilder();
foreach (ITransferIssue item in hashSet) {
stringBuilder.AppendLine($"{arg}""{item.Code}""{item.Message}");
}
return stringBuilder.ToString();
}
public static string GetTransferReportMessage(ITransferResult result)
{
object transferStatistics2;
if (result.Statistics.Count <= 0) {
ITransferStatistics transferStatistics = new TransferStatistics(result.Request);
transferStatistics2 = transferStatistics;
} else
transferStatistics2 = result.Statistics.Last();
ITransferStatistics transferStatistics3 = (ITransferStatistics)transferStatistics2;
StringBuilder stringBuilder = new StringBuilder("Transfer Report\n");
stringBuilder.AppendLine(" - Request data: ");
stringBuilder.AppendLine($"""{result.Request.JobId}");
stringBuilder.AppendLine($"""{result.Request.Direction}");
stringBuilder.AppendLine($"""{result.Request.BatchNumber}""{result.Request.TotalBatchCount}");
stringBuilder.AppendLine(" - Transfer result: ");
stringBuilder.AppendLine($"""{result.Status}");
stringBuilder.AppendLine($"""{transferStatistics3.JobErrorCode}");
stringBuilder.AppendLine(" - Job Error Message: " + transferStatistics3.JobErrorMessage);
if (result.Issues.Count > 0) {
stringBuilder.AppendLine(" - Latest issues: ");
stringBuilder.AppendLine(GetLatestTransferIssues(result, 10));
stringBuilder.AppendLine(" - Unique issues: ");
stringBuilder.AppendLine(GetUniqueTransferIssues(result, 10));
}
stringBuilder.AppendLine(" - Total Bytes (Requested/Transferred/Diff): " + ConvertToLargestByteSymbol(transferStatistics3.TotalRequestBytes) + "/" + ConvertToLargestByteSymbol(result.TotalTransferredBytes) + "/" + ConvertToLargestByteSymbol(transferStatistics3.TotalRequestBytes - result.TotalTransferredBytes));
stringBuilder.AppendLine(" - Total Files (Requested/Transferred/Diff): " + $"{transferStatistics3.TotalRequestFiles}""{result.TotalTransferredFiles}""{transferStatistics3.TotalRequestFiles - result.TotalTransferredFiles}");
stringBuilder.AppendLine($"""{result.TotalBadPathErrors}");
stringBuilder.AppendLine($"""{result.TotalFilePermissionErrors}");
stringBuilder.AppendLine($"""{result.TotalFilesNotFound}");
stringBuilder.AppendLine($"""{result.StartTime}");
stringBuilder.AppendLine($"""{result.EndTime}");
stringBuilder.AppendLine($"""{result.Elapsed}");
stringBuilder.AppendLine($"""{result.Elapsed.TotalSeconds}");
stringBuilder.AppendLine($"""{result.MinDataRateMbps}");
stringBuilder.AppendLine($"""{result.TargetDataRateMbps}");
stringBuilder.AppendLine($"""{result.RetryCount}");
stringBuilder.AppendLine($"""{transferStatistics3.TransferRateMbps}");
stringBuilder.AppendLine($"""{result.TransferRateMbps}");
stringBuilder.AppendLine(" - Client: " + result.Configuration.Client.ToString());
stringBuilder.AppendLine($"""{result.Request.ClientRequestId}");
stringBuilder.AppendLine(" - Configuration: ");
stringBuilder.AppendLine($"""{result.Configuration.BadPathErrorsRetry}");
stringBuilder.AppendLine($"""{result.Configuration.FileNotFoundErrorsRetry}");
stringBuilder.AppendLine(" - ConfigurationFileTransferHint: " + result.Configuration.FileTransferHint.ToString());
stringBuilder.AppendLine($"""{result.Configuration.MinDataRateMbps}");
stringBuilder.AppendLine($"""{result.Configuration.MaxJobParallelism}");
stringBuilder.AppendLine($"""{result.Configuration.MaxJobRetryAttempts}");
stringBuilder.AppendLine($"""{result.Configuration.OverwriteFiles}");
stringBuilder.AppendLine($"""{result.Configuration.PermissionErrorsRetry}");
stringBuilder.AppendLine($"""{result.Configuration.PreserveDates}");
stringBuilder.AppendLine($"""{GlobalSettings.Instance.SkipTooLongPaths}");
stringBuilder.AppendLine($"""{result.Configuration.TargetDataRateMbps}");
stringBuilder.AppendLine($"""{result.Configuration.TransferEmptyDirectories}");
stringBuilder.AppendLine(" - Environment: ");
stringBuilder.AppendLine(" - OperatingSystem: " + Environment.OSVersion.ToString());
stringBuilder.AppendLine(" - OperatingSystemVersion: " + Environment.OSVersion.Version.ToString());
stringBuilder.AppendLine($"""{Environment.Is64BitOperatingSystem}");
stringBuilder.AppendLine($"""{Environment.Is64BitProcess}");
stringBuilder.AppendLine($"""{Environment.ProcessorCount}");
return stringBuilder.ToString();
}
internal static string ConvertToLargestByteSymbol(long bytes)
{
ByteSize byteSize = new ByteSize((double)bytes);
string str = byteSize.LargestWholeNumberValue.ToString("N0");
string str2 = byteSize.LargestWholeNumberSymbol.ToUpper();
return str + " " + str2;
}
}
}