예제 #1
0
        public ChangedStateContext(IResourceMetadata info, IResourceTrackedState lastState, AsyncLazy <T> payload)
        {
            EnsureArg.IsNotNull(info);
            EnsureArg.IsNotNull(payload);

            Info      = info;
            Payload   = payload;
            LastState = lastState;
        }
예제 #2
0
        public Task <Test_File> GetResource(Test_FileMetadataDto metadata, IResourceTrackedState lastState, CancellationToken ctk = default)
        {
            return(Task.Run(() =>
            {
                var downloadedFile = new Test_File(metadata)
                {
                    DownloadedAt = SystemClock.Instance.GetCurrentInstant(),
                };

                _logger.Info($"File {downloadedFile.Metadata.FileName} downloaded successfully");

                return downloadedFile;
            }));
        }
예제 #3
0
            public async Task <FtpFile <TPayload> > GetResource(FtpMetadata metadata, IResourceTrackedState lastState, CancellationToken ctk = default)
            {
                var contents = await Policy
                               .Handle <Exception>()
                               .RetryAsync(3)
                               .ExecuteAsync(async ct =>
                {
                    using (var cts1 = new CancellationTokenSource(_config.DownloadTimeout))
                        using (var cts2 = CancellationTokenSource.CreateLinkedTokenSource(cts1.Token, ct))
                        {
                            return(await _ftpClient.DownloadFileAsync(metadata.Entry.FullPath, ctk: cts2.Token));
                        }
                }, ctk);

                var checksum = _computeChecksum(contents);

                if (lastState?.CheckSum == checksum)
                {
                    return(null);
                }

                var file = new FtpFile <TPayload>(metadata)
                {
                    CheckSum    = checksum,
                    RetrievedAt = SystemClock.Instance.GetCurrentInstant(),
                    ParsedData  = _parser.Parse(metadata, contents)
                };

                return(file);
            }
예제 #4
0
 protected abstract Task <T> _retrievePayload(IResourceMetadata info, IResourceTrackedState lastState, CancellationToken ctk = default);
예제 #5
0
 protected override Task <TResource> _retrievePayload(IResourceMetadata info, IResourceTrackedState lastState, CancellationToken ctk = default)
 {
     return(_container.GetInstance <IResourceProvider <TMetadata, TResource, TQueryFilter> >().GetResource(info as TMetadata, lastState, ctk));
 }
        public async Task <SkyScanner_File> GetResource(SkyScanner_FileMetadataDto metadata, IResourceTrackedState lastState, CancellationToken ctk = default)
        {
            var rawData = await retrier.Execute(async() =>
            {
                return(await _getRawData(metadata));
            });

            if (rawData == null)
            {
                return(null);
            }

            var checkSum = _getCheckSumMD5(rawData);

            if (lastState?.CheckSum == checkSum)
            {
                return(null);
            }

            var parsedFile = _parser.Parse(metadata, rawData);

            parsedFile.CheckSum     = checkSum;
            parsedFile.DownloadedAt = SystemClock.Instance.GetCurrentInstant();
            return(parsedFile);
        }