Example #1
0
        private void RefreshDataForPeriod(AwsProfile profile, string period, IAwsClient client, DateTime currentTime)
        {
            string s3Url = MonthlyCsvUrl.Create(profile.DetailedBillingS3Bucket, profile.Account, period);

            var lastModified = new DateTime();

            if (profile.BillingMetadata.ContainsKey(period))
            {
                lastModified = profile.BillingMetadata[period].LastModified;
            }

            DateTime newLastModified;
            Stream   file = client.StorageService.GetFileIfChangedSince(s3Url, lastModified, out newLastModified);

            if (file == null)
            {
                return;
            }

            using (file)
            {
                using (Stream zipStream = OpenFirstZipEntry(file))
                {
                    using (var streamReader = new StreamReader(zipStream, Encoding.UTF8, detectEncodingFromByteOrderMarks: true, bufferSize: 32768, leaveOpen: true))
                    {
                        using (var parser = new LineItemCsvParser(streamReader))
                        {
                            _billingManager.LoadLineItems(parser.GetLineItems(), period);
                        }
                    }
                }
            }

            BillingMetadata metadata;

            if (!profile.BillingMetadata.ContainsKey(period))
            {
                metadata = new BillingMetadata();
                profile.BillingMetadata.Add(period, metadata);
            }
            else
            {
                metadata = profile.BillingMetadata[period];
            }
            metadata.LastModified = newLastModified;
            metadata.LastLoaded   = currentTime;
        }