Skip to content

Commit

Permalink
cr fix
Browse files Browse the repository at this point in the history
  • Loading branch information
patrofimov committed Aug 26, 2024
1 parent a0b4d37 commit 68462d3
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 46 deletions.
14 changes: 3 additions & 11 deletions Vostok.ClusterClient.Core/Misc/LoggingUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,8 @@ internal static class LoggingUtils
{
public static void AppendQueryString(StringBuilder builder, Uri uri, RequestParametersLoggingSettings querySettings, RequestUrlParser requestUrlParser)
{
if (querySettings.IsEnabledForAllKeys())
{
builder.Append(uri);
return;
}

builder.Append(requestUrlParser.Path);

var writtenFirst = false;
foreach (var pair in requestUrlParser.Where(kvp => querySettings.IsEnabledForKey(kvp.Key)))
foreach (var pair in requestUrlParser.GetQueryParameters().Where(kvp => querySettings.IsEnabledForKey(kvp.Key)))
{
if (!writtenFirst)
{
Expand All @@ -36,7 +28,7 @@ public static void AppendQueryString(StringBuilder builder, Uri uri, RequestPara
}
}

public static void AppendHeaders(StringBuilder builder, Headers headers, RequestParametersLoggingSettings headersSettings, bool singleLineManner, bool appendHeader)
public static void AppendHeaders(StringBuilder builder, Headers headers, RequestParametersLoggingSettings headersSettings, bool singleLineManner, bool appendTitle)
{
var writtenFirst = false;
var addDelimiter = false;
Expand All @@ -45,7 +37,7 @@ public static void AppendHeaders(StringBuilder builder, Headers headers, Request
if (!headersSettings.IsEnabledForKey(pair.Name))
continue;

if (!writtenFirst && appendHeader)
if (!writtenFirst && appendTitle)
{
if (singleLineManner)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ namespace Vostok.Clusterclient.Core.Misc
[PublicAPI]
public class RequestParametersLoggingSettings
{
internal static readonly RequestParametersLoggingSettings DefaultEnabled = new(enabled: true);
internal static readonly RequestParametersLoggingSettings DefaultDisabled = new(enabled: false);

public RequestParametersLoggingSettings(bool enabled)
{
Enabled = enabled;
Expand Down
24 changes: 18 additions & 6 deletions Vostok.ClusterClient.Core/Model/Request.cs
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,9 @@ public override string ToString()
[PublicAPI]
public string ToString(bool includeQuery, bool includeHeaders)
{
return ToString(includeQuery, includeHeaders, singleLineManner: false);
var querySettings = includeQuery ? RequestParametersLoggingSettings.DefaultEnabled : RequestParametersLoggingSettings.DefaultDisabled;
var headersSettings = includeHeaders ? RequestParametersLoggingSettings.DefaultEnabled : RequestParametersLoggingSettings.DefaultDisabled;
return ToString(querySettings, headersSettings, singleLineManner: false);
}

/// <inheritdoc cref="ToString(bool,bool)"/>
Expand All @@ -258,20 +260,30 @@ internal string ToString([NotNull] RequestParametersLoggingSettings includeQuery
builder.Append(Method);
builder.Append(" ");

var requestUrlParser = new RequestUrlParser(Url.ToString());

if (includeQuery.Enabled)
{
LoggingUtils.AppendQueryString(builder, Url, includeQuery, requestUrlParser);
if (includeQuery.IsEnabledForAllKeys())
{
builder.Append(Url);
}
else
{
var requestUrlParser = new RequestUrlParser(Url.ToString());

builder.Append(requestUrlParser.Path);

LoggingUtils.AppendQueryString(builder, Url, includeQuery, requestUrlParser);
}
}
else
{
builder.Append(requestUrlParser.Path);
RequestUrlParsingHelpers.TryParseUrlPath(Url.ToString(), out var path, out _);
builder.Append(path);
}

if (includeHeaders.Enabled && Headers is {Count: > 0})
{
LoggingUtils.AppendHeaders(builder, Headers, includeHeaders, singleLineManner, appendHeader: true);
LoggingUtils.AppendHeaders(builder, Headers, includeHeaders, singleLineManner, appendTitle: true);
}

return builder.ToString();
Expand Down
27 changes: 5 additions & 22 deletions Vostok.ClusterClient.Core/Model/RequestUrlParser.cs
Original file line number Diff line number Diff line change
@@ -1,35 +1,21 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using JetBrains.Annotations;
using StringComparison = System.StringComparison;

namespace Vostok.Clusterclient.Core.Model;

internal readonly struct RequestUrlParser : IEnumerable<KeyValuePair<string, string>>
internal readonly struct RequestUrlParser
{
private readonly Dictionary<string, string> query = new();

public readonly string Path = null;

public RequestUrlParser([CanBeNull] string url)
{
if (url == null)
if (!RequestUrlParsingHelpers.TryParseUrlPath(url, out Path, out var question))
return;

var question = url.IndexOf("?", StringComparison.Ordinal);
if (question < 0)
{
Path = url;
return;
}

Path = url.Substring(0, question);

url = url.Substring(question + 1);

var parameters = url.Split('&');
var parameters = url!.Substring(question + 1).Split('&');
foreach (var parameter in parameters)
{
var tokens = parameter.Split('=');
Expand All @@ -49,9 +35,6 @@ public bool TryGetQueryParameter([CanBeNull] string key, out string value)
return query.TryGetValue(key, out value);
}

public IEnumerator<KeyValuePair<string, string>> GetEnumerator() =>
query.GetEnumerator();

IEnumerator IEnumerable.GetEnumerator() =>
GetEnumerator();
public IEnumerable<KeyValuePair<string, string>> GetQueryParameters() =>
query;
}
28 changes: 28 additions & 0 deletions Vostok.ClusterClient.Core/Model/RequestUrlParsingHelpers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using JetBrains.Annotations;

namespace Vostok.Clusterclient.Core.Model
{
internal static class RequestUrlParsingHelpers
{
public static bool TryParseUrlPath([CanBeNull] string url, out string path, out int questionInd)
{
path = null;
questionInd = -1;

if (url == null)
return false;

questionInd = url.IndexOf("?", StringComparison.Ordinal);
if (questionInd < 0)
{
path = url;
return true;
}

path = url.Substring(0, questionInd);

return true;
}
}
}
5 changes: 3 additions & 2 deletions Vostok.ClusterClient.Core/Model/Response.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ public override string ToString()
[PublicAPI]
public string ToString(bool includeHeaders)
{
return ToString(includeHeaders, singleLineManner: false);
var headersSettings = includeHeaders ? RequestParametersLoggingSettings.DefaultEnabled : RequestParametersLoggingSettings.DefaultDisabled;
return ToString(headersSettings, singleLineManner: false);
}

/// <inheritdoc cref="ToString(bool)"/>
Expand All @@ -196,7 +197,7 @@ internal string ToString([NotNull] RequestParametersLoggingSettings includeHeade

if (includeHeaders.Enabled && Headers.Count > 0)
{
LoggingUtils.AppendHeaders(builder, Headers, includeHeaders, singleLineManner, appendHeader: true);
LoggingUtils.AppendHeaders(builder, Headers, includeHeaders, singleLineManner, appendTitle: true);
}

return builder.ToString();
Expand Down
10 changes: 5 additions & 5 deletions Vostok.ClusterClient.Core/Modules/LoggingModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,16 @@ private void LogSuccessfulResult(IRequestContext context, ClusterResult result)
ResponseCode = result.Response.Code,
ElapsedTime = context.Budget.Elapsed.ToPrettyString(),
ElapsedTimeMs = context.Budget.Elapsed.TotalMilliseconds,
ResponseHeaders = GetResponseHeadersString(result.Response.Headers, appendHeader: true),
ResponseHeaders = GetResponseHeadersString(result.Response.Headers, appendTitle: true),
});
}

private string GetResponseHeadersString(Headers headers, bool appendHeader)
private string GetResponseHeadersString(Headers headers, bool appendTitle)
{
if (loggingOptions.LogResponseHeaders.Enabled && headers is {Count: > 0})
{
var builder = new StringBuilder();
LoggingUtils.AppendHeaders(builder, headers, loggingOptions.LogResponseHeaders, singleLineManner: true, appendHeader: appendHeader);
LoggingUtils.AppendHeaders(builder, headers, loggingOptions.LogResponseHeaders, singleLineManner: true, appendTitle);
return builder.ToString();
}

Expand All @@ -90,7 +90,7 @@ private void LogFailedResult(IRequestContext context, ClusterResult result)
TargetService = targetService ?? "somewhere",
result.Status,
ResponseCode = result.Response.Code,
ResponseHeaders = GetResponseHeadersString(result.Response.Headers, appendHeader: true),
ResponseHeaders = GetResponseHeadersString(result.Response.Headers, appendTitle: true),
ElapsedTime = context.Budget.Elapsed.ToPrettyString(),
ElapsedTimeMs = context.Budget.Elapsed.TotalMilliseconds
};
Expand Down Expand Up @@ -177,7 +177,7 @@ private object ConvertResultsToProperties(IList<ReplicaResult> replicaResults)
for (var i = 0; i < replicaResults.Count; i++)
{
var res = replicaResults[i];
var responseHeaders = GetResponseHeadersString(res.Response.Headers, appendHeader: false);
var responseHeaders = GetResponseHeadersString(res.Response.Headers, appendTitle: false);
var responseCode = (int)res.Response.Code;
var elapsedTime = res.Time.ToPrettyString();

Expand Down

0 comments on commit 68462d3

Please sign in to comment.