Пример #1
0
        public async Task <PayloadFile> Download(string payload, string name)
        {
            Guard.Against.NullOrWhiteSpace(payload, nameof(payload));
            Guard.Against.NullOrWhiteSpace(name, nameof(name));

            if (!PayloadId.TryParse(payload, out PayloadId payloadId))
            {
                throw new ArgumentException($"Invalid Payload ID received: {payload}");
            }

            return(await Policy <PayloadFile>
                   .Handle <Exception>()
                   .WaitAndRetryAsync(3, (r) => TimeSpan.FromSeconds(r * 1.5f), (data, retryCount, context) =>
            {
                _logger.Log(LogLevel.Error, "Failed to download file {0} from Payloads Service {1}: {2}", name, payload, data.Exception);
            })
                   .ExecuteAsync(async() =>
            {
                PayloadFile file = new PayloadFile();
                using (var ms = new MemoryStream())
                {
                    var details = await _payloadsClient.DownloadFrom(payloadId, name, ms);
                    file.Data = ms.ToArray();
                    file.Name = details.Name;
                }

                _logger.Log(LogLevel.Information, "File {0} successfully downloaded from {1}.", name, payloadId);
                return file;
            }).ConfigureAwait(false));
        }
Пример #2
0
        private async Task DownloadFromPayloadsService(OutputJob job)
        {
            int failureCount = 0;

            foreach (var url in job.Uris)
            {
                PayloadFile file = null;
                try
                {
                    file = await _payloadsApi.Download(job.PayloadId, url);
                }
                catch (System.Exception ex)
                {
                    job.Logger.LogWarning("Failed to download file {0} from payload {1}: {2}", url, job.PayloadId, ex);
                    job.FailedFiles.Add(url);
                    failureCount++;
                    continue;
                }

                try
                {
                    var dicom = DicomFile.Open(new MemoryStream(file.Data));
                    job.PendingDicomFiles.Enqueue(dicom);
                }
                catch (System.Exception ex)
                {
                    job.Logger.LogWarning("Failed to load DICOM data {0} from payload {1}: {2}", url, job.PayloadId, ex);
                    job.FailedFiles.Add(url);
                    failureCount++;
                }
            }

            if (failureCount > 1)
            {
                job.Logger.LogWarning("{0}/{1} files failed to load.", failureCount, job.Uris.Count());
            }
        }