public void GivenSameHour_ThenSingleResultAllTheWayToHours()
        {
            // Actual

            var blobs = new List <CloudBlockBlob>
            {
                new CloudBlockBlob(new Uri("https://domain.blob.core.windows.net/container/prefix/2018/06/20/04/e872fe-35920.applicationLog.csv")),
                new CloudBlockBlob(new Uri("https://domain.blob.core.windows.net/container/prefix/2018/06/20/05/e872fe-35921.applicationLog.csv")),
                new CloudBlockBlob(new Uri("https://domain.blob.core.windows.net/container/prefix/2018/06/20/05/e872fe-35922.applicationLog.csv")),
                new CloudBlockBlob(new Uri("https://domain.blob.core.windows.net/container/prefix/2018/06/20/05/e872fe-35923.applicationLog.csv")),
                new CloudBlockBlob(new Uri("https://domain.blob.core.windows.net/container/prefix/2018/06/20/06/e872fe-35924.applicationLog.csv")),
                new CloudBlockBlob(new Uri("https://domain.blob.core.windows.net/container/prefix/2018/06/20/07/e872fe-35925.applicationLog.csv"))
            };

            var from = new DateTime(2018, 6, 20, 5, 4, 3, DateTimeKind.Utc);
            var to   = new DateTime(2018, 6, 20, 6, 6, 5, DateTimeKind.Utc);

            // Act

            var actualBlobs = PrefixService.Filter(blobs, from, to, "prefix/");

            // Assert

            var expectedNames = new List <string>
            {
                "prefix/2018/06/20/05/e872fe-35921.applicationLog.csv",
                "prefix/2018/06/20/05/e872fe-35922.applicationLog.csv",
                "prefix/2018/06/20/05/e872fe-35923.applicationLog.csv",
                "prefix/2018/06/20/06/e872fe-35924.applicationLog.csv"
            };

            actualBlobs.Select(q => q.Name).Should().BeEquivalentTo(expectedNames);
        }
示例#2
0
        private async Task OnExecuteAsync()
        {
            var outputFilePath = Path.GetFullPath(OutputFilePath);

            var getRangeResult = RangeParser.TryGetRange(Last, From, To, out var range);

            if (!string.IsNullOrEmpty(getRangeResult?.ErrorMessage))
            {
                ConsoleHelper.WriteError(getRangeResult.ErrorMessage);
                return;
            }

            var sas = Prompt.GetPassword("Shared Access Signature:", ConsoleColor.White, ConsoleColor.DarkBlue);

            Console.CancelKeyPress += ConsoleOnCancelKeyPress;

            try
            {
                if (Prefix.Last() != '/')
                {
                    Prefix += "/";
                }

                ConsoleHelper.WriteDebug($"Querying storage account '{StorageAccountHelper.GetStorageAccountName(sas)}' from {range}");

                var from = range.From;
                var to   = range.To ?? DateTime.UtcNow;

                var datePrefixes = PrefixService.BuildBlobPrefixes(from, to, Prefix);

                var repository = new Repository(sas, Container);

                var blobs = new List <CloudBlockBlob>();

                foreach (var datePrefix in datePrefixes)
                {
                    blobs.AddRange(await repository.ListLogBlobsAsync(datePrefix, CancellationToken.None));
                }

                var tempDirectory = Path.Combine(Path.GetTempPath(), "wad-to-csv",
                                                 Path.GetRandomFileName().Replace(".", string.Empty));
                Directory.CreateDirectory(tempDirectory);

                var filtered = PrefixService.Filter(blobs, from, to, Prefix);

                await repository.DownloadLogBlobsAsync(filtered, tempDirectory, CancellationToken.None);

                CsvWriter.Write(from, to, tempDirectory, outputFilePath);

                Console.WriteLine();
                ConsoleHelper.WriteDebug("Done");
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Exception: {0}", e.GetType());
                Console.WriteLine("Message: {0}", e.Message);
                Console.WriteLine("StackTrace:");
                Console.WriteLine(e.StackTrace);
            }
            finally
            {
                Console.ResetColor();
            }
        }