Ejemplo n.º 1
0
        /// <summary>
        /// Read Hits from KustoResponseDataSet response.
        /// </summary>
        /// <param name="kustoResponseDataSet">KustoResponseDataSet - Kusto parsed response.</param>
        /// <param name="query">QueryData containing query information.</param>
        /// <returns>IEnumerable.<Hit> - collection of hits.</returns>
        public IEnumerable <Hit> ReadHits(KustoResponseDataSet kustoResponseDataSet, QueryData query)
        {
            Ensure.IsNotNull(kustoResponseDataSet, nameof(kustoResponseDataSet));

            if (kustoResponseDataSet[HitsTableName] != null)
            {
                using var highlighter = new LuceneHighlighter(query, Logger);
                return(HitsMapper.MapRowsToHits(kustoResponseDataSet[HitsTableName].TableData.Rows, query, highlighter));
            }

            return(Enumerable.Empty <Hit>());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Report net query execution time from Kusto response.
        /// </summary>
        /// <param name="kustoResponseDataSet">Kusto Response.</param>
        private void ReportQueryExecutionMetrics(KustoResponseDataSet kustoResponseDataSet)
        {
            var queryStatusTable = kustoResponseDataSet[WellKnownDataSet.QueryCompletionInformation];

            Ensure.IsNotNullOrEmpty(queryStatusTable, nameof(queryStatusTable));

            var queryStatusRows = queryStatusTable.First().TableData.Rows;

            if (queryStatusRows.Count <= 1)
            {
                throw new ArgumentException("QueryStatus table missing rows.", nameof(kustoResponseDataSet));
            }

            var statusDescription = queryStatusRows[1]["StatusDescription"];

            Ensure.IsNotNull(statusDescription, nameof(statusDescription));

            var parsedQueryStatus     = JObject.Parse(statusDescription.ToString());
            var netQueryExecutionTime = parsedQueryStatus["ExecutionTime"];

            Ensure.IsNotNull(netQueryExecutionTime, nameof(netQueryExecutionTime));
            var netQueryExecutionTimeValue = (float)netQueryExecutionTime;

            metricsHistograms.AdxNetQueryDurationMetric.Observe(netQueryExecutionTimeValue);
            Logger.LogDebug("[metric] backend query net (engine) duration: {netQueryExecutionTime}", TimeSpan.FromSeconds(netQueryExecutionTimeValue));

            var tableSizeSum = parsedQueryStatus.SelectTokens("dataset_statistics..table_size").Sum(x => x.ToObject <long>());

            if (tableSizeSum > 0)
            {
                metricsHistograms.AdxQueryBytesMetric.Observe(tableSizeSum);
                Logger.LogDebug("[metric] backend query bytes: {tableSizeSum}", tableSizeSum);
            }
            else
            {
                Logger.LogWarning("Backend query bytes is zero.");
            }
        }