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