コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        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);
        }