Skip to content

Commit

Permalink
Merge pull request #510 from radixdlt/refactor-tags-for-metrics-inter…
Browse files Browse the repository at this point in the history
…ceptor

refactor tags for metrics interceptor.
  • Loading branch information
PawelPawelec-RDX authored Sep 27, 2023
2 parents 206fea5 + 8cf6166 commit 850d927
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ namespace RadixDlt.NetworkGateway.PostgresIntegration.Interceptors;

internal class ForceDistinctInterceptor : DbCommandInterceptor
{
/// <summary>Query marked used to trigger interceptor.</summary>
/// <summary>Query marker used to trigger interceptor.</summary>
/// <remarks>Value has no meaning at all, it should be understood as opaque query marker.</remarks>
public const string Apply = nameof(ForceDistinctInterceptor) + ":3c49f785-0598-462a-ba88-bcdbed969709-f66acff3-fd40-4fbd-8eb9-151aefcc5711";
public const string Apply = nameof(ForceDistinctInterceptor) + ":MelTww0Ylh4NEfxO0huHwXzbSmy1ymcQtbq0mRuy9zLFjIY6wP8dO1AVziGvI2if";

public override InterceptionResult<DbDataReader> ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Microsoft.Extensions.Options;
using RadixDlt.NetworkGateway.Abstractions.Configuration;
using RadixDlt.NetworkGateway.GatewayApi.Services;
using RadixDlt.NetworkGateway.PostgresIntegration.Metrics;
using System;
using System.Data.Common;
using System.Threading;
Expand All @@ -14,6 +13,13 @@ namespace RadixDlt.NetworkGateway.PostgresIntegration.Interceptors;

internal class MetricsInterceptor : DbCommandInterceptor
{
public const string QueryNameStartTag = $"{nameof(MetricsInterceptor)}:{QueryNameTag}<";
public const string QueryNameEndTag = $">{nameof(MetricsInterceptor)}:{QueryNameTag}";

/// <summary>EF tag used to provide query name for further metrics usage.</summary>
/// <remarks>Value has no meaning at all, it should be understood as opaque query marker.</remarks>
private const string QueryNameTag = "uSWntehehitXgROv7bzwhy2w8olWjn45ig1einU8sAHM75NbdkLUTn6xuChuzPBu";

private readonly IOptionsMonitor<SlowQueryLoggingOptions> _slowQueriesLoggingOptions;
private readonly ILogger<MetricsInterceptor> _logger;
private readonly ISqlQueryObserver _sqlQueryObserver;
Expand Down Expand Up @@ -66,17 +72,18 @@ private string GetQueryName(DbCommand dbCommand)
{
const string UnknownQueryName = "UNKNOWN";

var queryNameStartTag = $"{SqlQueryMetricsHelper.QueryNameTag}<";
var startOfTag = dbCommand.CommandText.IndexOf(queryNameStartTag, StringComparison.InvariantCultureIgnoreCase);
var endOfTag = dbCommand.CommandText.IndexOf(">;", StringComparison.InvariantCultureIgnoreCase);
var startOfTag = dbCommand.CommandText.IndexOf(QueryNameStartTag, StringComparison.InvariantCultureIgnoreCase);

var searchForEndTagFrom = startOfTag + QueryNameStartTag.Length;
var endOfTag = dbCommand.CommandText.IndexOf(QueryNameEndTag, searchForEndTagFrom, StringComparison.InvariantCultureIgnoreCase);

if (startOfTag < 0 || endOfTag < 0)
{
_logger.LogDebug("Missing query name for: {commandText}", dbCommand.CommandText);
return UnknownQueryName;
}

var from = startOfTag + queryNameStartTag.Length;
var from = startOfTag + QueryNameStartTag.Length;
var queryName = dbCommand.CommandText[from..endOfTag];

if (string.IsNullOrEmpty(queryName))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
using System;
using System.IO;
using RadixDlt.NetworkGateway.PostgresIntegration.Interceptors;
using System;
using System.Linq;

namespace RadixDlt.NetworkGateway.PostgresIntegration.Metrics;

public static class SqlQueryMetricsHelper
{
public const string QueryNameTag = "gcmKFRVsi3IDgKuTQT2z";

public static string GetQueryNameValue(
string operationName,
string methodName)
Expand Down Expand Up @@ -36,7 +34,7 @@ public static string GetQueryNameValue(
public static string GenerateQueryNameTag(string operationName, string methodName)
{
var queryName = GetQueryNameValue(operationName, methodName);
return $"{QueryNameTag}<{queryName}>;";
return $"{MetricsInterceptor.QueryNameStartTag}{queryName}{MetricsInterceptor.QueryNameEndTag}";
}

private static bool IsValidTagPart(string value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using RadixDlt.NetworkGateway.Abstractions.Configuration;
using RadixDlt.NetworkGateway.GatewayApi.Configuration;
using RadixDlt.NetworkGateway.GatewayApi.Services;
using RadixDlt.NetworkGateway.PostgresIntegration.Metrics;
using System.Collections.Generic;
Expand Down

0 comments on commit 850d927

Please sign in to comment.