public async Task ReadLogAsync(DomainId appId, DateTime fromDate, DateTime toDate, Stream stream, CancellationToken ct = default) { Guard.NotNull(appId); var writer = new StreamWriter(stream, Encoding.UTF8, 4096, true); try { await using (var csv = new CsvWriter(writer, CsvConfiguration)) { csv.WriteField(FieldTimestamp); csv.WriteField(FieldRequestPath); csv.WriteField(FieldRequestMethod); csv.WriteField(FieldRequestElapsedMs); csv.WriteField(FieldCosts); csv.WriteField(FieldAuthClientId); csv.WriteField(FieldAuthUserId); csv.WriteField(FieldBytes); csv.WriteField(FieldCacheHits); csv.WriteField(FieldCacheServer); csv.WriteField(FieldCacheStatus); csv.WriteField(FieldCacheTTL); csv.WriteField(FieldStatusCode); await csv.NextRecordAsync(); await foreach (var request in requestLogStore.QueryAllAsync(appId.ToString(), fromDate, toDate, ct)) { csv.WriteField(request.Timestamp.ToString()); csv.WriteField(GetString(request, FieldRequestPath)); csv.WriteField(GetString(request, FieldRequestMethod)); csv.WriteField(GetDouble(request, FieldRequestElapsedMs)); csv.WriteField(GetDouble(request, FieldCosts)); csv.WriteField(GetString(request, FieldAuthClientId)); csv.WriteField(GetString(request, FieldAuthUserId)); csv.WriteField(GetLong(request, FieldBytes)); csv.WriteField(GetLong(request, FieldCacheHits)); csv.WriteField(GetString(request, FieldCacheServer)); csv.WriteField(GetString(request, FieldCacheStatus)); csv.WriteField(GetLong(request, FieldCacheTTL)); csv.WriteField(GetLong(request, FieldStatusCode)); await csv.NextRecordAsync(); } } } finally { await writer.FlushAsync(); } }
public async Task ReadLogAsync(Guid appId, DateTime fromDate, DateTime toDate, Stream stream, CancellationToken ct = default) { Guard.NotNull(appId, nameof(appId)); var writer = new StreamWriter(stream, Encoding.UTF8, 4096, true); try { using (var csv = new CsvWriter(writer, csvConfiguration, true)) { csv.WriteField(FieldTimestamp); csv.WriteField(FieldRequestPath); csv.WriteField(FieldRequestMethod); csv.WriteField(FieldRequestElapsedMs); csv.WriteField(FieldCosts); csv.WriteField(FieldAuthClientId); csv.WriteField(FieldAuthUserId); await csv.NextRecordAsync(); await requestLogStore.QueryAllAsync(async request => { csv.WriteField(request.Timestamp.ToString()); csv.WriteField(GetString(request, FieldRequestPath)); csv.WriteField(GetString(request, FieldRequestMethod)); csv.WriteField(GetDouble(request, FieldRequestElapsedMs)); csv.WriteField(GetDouble(request, FieldCosts)); csv.WriteField(GetString(request, FieldAuthClientId)); csv.WriteField(GetString(request, FieldAuthUserId)); await csv.NextRecordAsync(); }, appId.ToString(), fromDate, toDate, ct); } } finally { await writer.FlushAsync(); } }
public async Task Should_create_some_stream() { var dateFrom = DateTime.UtcNow.Date.AddDays(-30); var dateTo = DateTime.UtcNow.Date; var appId = DomainId.NewGuid(); A.CallTo(() => requestLogStore.QueryAllAsync(A <Func <Request, Task> > ._, appId.ToString(), dateFrom, dateTo, default)) .Invokes(x => { var callback = x.GetArgument <Func <Request, Task> >(0) !; callback(CreateRecord()); callback(CreateRecord()); callback(CreateRecord()); callback(CreateRecord()); }); var stream = new MemoryStream(); await sut.ReadLogAsync(appId, dateFrom, dateTo, stream); stream.Position = 0; var lines = 0; using (var reader = new StreamReader(stream)) { while (await reader.ReadLineAsync() != null) { lines++; } } Assert.Equal(5, lines); }