Skip to content

Commit 98ce57d

Browse files
committed
fix: logging HTTP header from streaming request
1 parent ab30bba commit 98ce57d

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

Client.Core/Internal/AbstractQueryClient.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ private async Task Query(Func<Func<HttpResponseMessage, RestResponse>, RestReque
114114
var query = queryFn.Invoke(response =>
115115
{
116116
var result = GetStreamFromResponse(response, cancellationToken);
117-
result = AfterIntercept((int)response.StatusCode, () => response.Headers.ToHeaderParameters(),
117+
result = AfterIntercept((int)response.StatusCode,
118+
() => response.Headers.ToHeaderParameters(response.Content.Headers),
118119
result);
119120

120121
RaiseForInfluxError(response, result);
@@ -157,7 +158,8 @@ private void QuerySync(Func<Func<HttpResponseMessage, RestResponse>, RestRequest
157158
var query = queryFn.Invoke(response =>
158159
{
159160
var result = GetStreamFromResponse(response, cancellationToken);
160-
result = AfterIntercept((int)response.StatusCode, () => response.Headers.ToHeaderParameters(),
161+
result = AfterIntercept((int)response.StatusCode,
162+
() => response.Headers.ToHeaderParameters(response.Content.Headers),
161163
result);
162164

163165
RaiseForInfluxError(response, result);
@@ -196,7 +198,8 @@ protected async IAsyncEnumerable<T> QueryEnumerable<T>(
196198
var query = queryFn.Invoke(response =>
197199
{
198200
stream = GetStreamFromResponse(response, cancellationToken);
199-
stream = AfterIntercept((int)response.StatusCode, () => response.Headers.ToHeaderParameters(), stream);
201+
stream = AfterIntercept((int)response.StatusCode,
202+
() => response.Headers.ToHeaderParameters(response.Content.Headers), stream);
200203

201204
RaiseForInfluxError(response, stream);
202205

Client.Core/Internal/RestSharpExtensions.cs

+9-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,17 @@ namespace InfluxDB.Client.Core.Internal
1010
{
1111
internal static class RestSharpExtensions
1212
{
13-
internal static IEnumerable<HeaderParameter> ToHeaderParameters(this HttpHeaders httpHeaders)
13+
/// <summary>
14+
/// Transform `HttpHeaders` to `HeaderParameter` type.
15+
/// </summary>
16+
/// <param name="httpHeaders"></param>
17+
/// <param name="httpContentHeaders">Additionally content Headers</param>
18+
/// <returns>IEnumerable&lt;HeaderParameter&gt;</returns>
19+
internal static IEnumerable<HeaderParameter> ToHeaderParameters(this HttpHeaders httpHeaders,
20+
HttpContentHeaders? httpContentHeaders = null)
1421
{
1522
return httpHeaders
23+
.Concat(httpContentHeaders ?? Enumerable.Empty<KeyValuePair<string, IEnumerable<string>>>())
1624
.SelectMany(x => x.Value.Select(y => (x.Key, y)))
1725
.Select(x => new HeaderParameter(x.Key, x.y));
1826
}

Client.Test/QueryApiTest.cs

+18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics;
4+
using System.IO;
45
using System.Linq;
56
using System.Threading.Tasks;
67
using InfluxDB.Client.Api.Domain;
@@ -127,6 +128,23 @@ public void RequiredOrgQueryAsync()
127128
ae.Message);
128129
}
129130

131+
[Test]
132+
public async Task LoggedContentType()
133+
{
134+
var writer = new StringWriter();
135+
Trace.Listeners.Add(new TextWriterTraceListener(writer));
136+
137+
_influxDbClient.SetLogLevel(LogLevel.Headers);
138+
139+
MockServer
140+
.Given(Request.Create().WithPath("/api/v2/query").UsingPost())
141+
.RespondWith(CreateResponse(Data));
142+
143+
await _queryApi.QueryAsync("from(...");
144+
145+
StringAssert.Contains("Content-Type=text/csv; charset=utf-8", writer.ToString());
146+
}
147+
130148
private class SyncPoco
131149
{
132150
[Column(IsMeasurement = true)] public string Measurement { get; set; }

0 commit comments

Comments
 (0)