Added filter logic to exclude comments in MonitorClient. Added error handling in KustoClient to handle ErrorResponseExceptions. (#1226)

This commit is contained in:
Justin M
2021-08-05 09:06:21 -07:00
committed by GitHub
parent d666ed536e
commit 609194d66f
2 changed files with 30 additions and 3 deletions

View File

@@ -1,8 +1,11 @@
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Kusto.Language;
using Kusto.Language.Editor;
using Microsoft.Azure.OperationalInsights;
using Microsoft.Azure.OperationalInsights.Models;
using Microsoft.Kusto.ServiceLayer.DataSource.Monitor.Responses;
@@ -61,12 +64,36 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource.Monitor
public async Task<QueryResults> QueryAsync(string query, CancellationToken cancellationToken)
{
return await _queryClient.QueryAsync(query, cancellationToken: cancellationToken);
try
{
var minimizedQuery = MinimizeQuery(query);
return await _queryClient.QueryAsync(minimizedQuery, cancellationToken: cancellationToken);
}
catch (ErrorResponseException ex)
{
var message = $"{ex.Body.Error.Innererror.Message} {ex.Body.Error.Innererror?.Innererror?.Message}";
throw new Exception(message, ex);
}
}
public QueryResults Query(string query)
{
return _queryClient.Query(query);
try
{
var minimizedQuery = MinimizeQuery(query);
return _queryClient.Query(minimizedQuery);
}
catch (ErrorResponseException ex)
{
var message = $"{ex.Body.Error.Innererror.Message} {ex.Body.Error.Innererror?.Innererror?.Message}";
throw new Exception(message, ex);
}
}
private string MinimizeQuery(string query)
{
var script = CodeScript.From(query, GlobalState.Default);
return script.Blocks[0].Service.GetMinimalText(MinimalTextKind.RemoveLeadingWhitespaceAndComments);
}
~MonitorClient()

View File

@@ -84,7 +84,7 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource.Monitor
public override async Task<IDataReader> ExecuteQueryAsync(string query, CancellationToken cancellationToken, string databaseName = null)
{
var results = await _monitorClient.QueryAsync(query, cancellationToken);
var results = await _monitorClient.QueryAsync(query, cancellationToken);
return results.ToDataReader();
}