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

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