예제 #1
0
        protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo)
        {
            QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.UtilizedIndexes, indentLevel: 1);

            foreach (IndexUtilizationData indexUtilizationData in indexUtilizationInfo.UtilizedIndexes)
            {
                WriteIndexUtilizationData(indexUtilizationData);
            }

            QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.PotentialIndexes, indentLevel: 1);

            foreach (IndexUtilizationData indexUtilizationData in indexUtilizationInfo.PotentialIndexes)
            {
                WriteIndexUtilizationData(indexUtilizationData);
            }

            void WriteIndexUtilizationData(IndexUtilizationData indexUtilizationData)
            {
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.FilterExpression}: {indexUtilizationData.FilterExpression}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexExpression}: {indexUtilizationData.IndexDocumentExpression}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.FilterExpressionPrecision}: {indexUtilizationData.FilterExpressionPrecision}", indentLevel: 2);
                //QueryMetricsTextWriter.AppendHeaderToStringBuilder(stringBuilder, $"{QueryMetricsTextWriter.IndexPlanFullFidelity}: {indexUtilizationData.IndexPlanFullFidelity}", indentLevel: 2); //currently not exposed to the users
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, IndexUtilizationSeparator, indentLevel: 2);
            }
        }
예제 #2
0
 public Accumulator Accumulate(IndexUtilizationInfo indexUtilizationInfo)
 {
     return(new Accumulator(
                utilizedSingleIndexes: (this.UtilizedSingleIndexes ?? Enumerable.Empty <SingleIndexUtilizationEntity>()).Concat(indexUtilizationInfo.UtilizedSingleIndexes),
                potentialSingleIndexes: (this.PotentialSingleIndexes ?? Enumerable.Empty <SingleIndexUtilizationEntity>()).Concat(indexUtilizationInfo.PotentialSingleIndexes),
                utilizedCompositeIndexes: (this.UtilizedCompositeIndexes ?? Enumerable.Empty <CompositeIndexUtilizationEntity>()).Concat(indexUtilizationInfo.UtilizedCompositeIndexes),
                potentialCompositeIndexes: (this.PotentialCompositeIndexes ?? Enumerable.Empty <CompositeIndexUtilizationEntity>()).Concat(indexUtilizationInfo.PotentialCompositeIndexes)));
 }
예제 #3
0
 public QueryMetrics(
     BackendMetrics backendMetrics,
     IndexUtilizationInfo indexUtilizationInfo,
     ClientSideMetrics clientSideMetrics)
 {
     this.BackendMetrics       = backendMetrics ?? throw new ArgumentNullException(nameof(backendMetrics));
     this.IndexUtilizationInfo = indexUtilizationInfo ?? throw new ArgumentNullException(nameof(indexUtilizationInfo));
     this.ClientSideMetrics    = clientSideMetrics ?? throw new ArgumentNullException(nameof(clientSideMetrics));
 }
예제 #4
0
        public void WriteIndexMetrics(IndexUtilizationInfo indexUtilizationInfo)
        {
            // IndexUtilizationInfo
            this.WriteBeforeIndexUtilizationInfo();

            this.WriteIndexUtilizationInfo(indexUtilizationInfo);

            this.WriteAfterIndexUtilizationInfo();
        }
예제 #5
0
 public QueryMetrics(
     string deliminatedString,
     IndexUtilizationInfo indexUtilizationInfo,
     ClientSideMetrics clientSideMetrics)
     : this(!String.IsNullOrWhiteSpace(deliminatedString) &&
            BackendMetricsParser.TryParse(deliminatedString, out BackendMetrics backendMetrics)
         ? backendMetrics
         : BackendMetrics.Empty, indexUtilizationInfo, clientSideMetrics)
 {
 }
예제 #6
0
        protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo)
        {
            QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.UtilizedSingleIndexes, indentLevel: 1);

            foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedSingleIndexes)
            {
                WriteSingleIndexUtilizationEntity(indexUtilizationEntity);
            }

            QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.PotentialSingleIndexes, indentLevel: 1);

            foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialSingleIndexes)
            {
                WriteSingleIndexUtilizationEntity(indexUtilizationEntity);
            }

            QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.UtilizedCompositeIndexes, indentLevel: 1);

            foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedCompositeIndexes)
            {
                WriteCompositeIndexUtilizationEntity(indexUtilizationEntity);
            }

            QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, QueryMetricsTextWriter.PotentialCompositeIndexes, indentLevel: 1);

            foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialCompositeIndexes)
            {
                WriteCompositeIndexUtilizationEntity(indexUtilizationEntity);
            }

            void WriteSingleIndexUtilizationEntity(SingleIndexUtilizationEntity indexUtilizationEntity)
            {
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.FilterExpression}: {indexUtilizationEntity.FilterExpression}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexExpression}: {indexUtilizationEntity.IndexDocumentExpression}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexImpactScore}: {indexUtilizationEntity.IndexImpactScore}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, IndexUtilizationSeparator, indentLevel: 2);
            }

            void WriteCompositeIndexUtilizationEntity(CompositeIndexUtilizationEntity indexUtilizationEntity)
            {
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexExpression}: {String.Join(", ", indexUtilizationEntity.IndexDocumentExpressions)}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, $"{QueryMetricsTextWriter.IndexImpactScore}: {indexUtilizationEntity.IndexImpactScore}", indentLevel: 2);
                QueryMetricsTextWriter.AppendHeaderToStringBuilder(this.stringBuilder, IndexUtilizationSeparator, indentLevel: 2);
            }
        }
예제 #7
0
        protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo)
        {
            StringBuilder strBuilder = new StringBuilder();

            foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedSingleIndexes)
            {
                WriteSingleIndexUtilizationEntity(strBuilder, indexUtilizationEntity);
            }

            this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.UtilizedSingleIndexes, $"[{strBuilder}]");

            strBuilder.Clear();

            foreach (SingleIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialSingleIndexes)
            {
                WriteSingleIndexUtilizationEntity(strBuilder, indexUtilizationEntity);
            }

            this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.PotentialSingleIndexes, $"[{strBuilder}]");

            strBuilder.Clear();

            foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.UtilizedCompositeIndexes)
            {
                WriteCompositeIndexUtilizationEntity(strBuilder, indexUtilizationEntity);
            }

            this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.UtilizedCompositeIndexes, $"[{strBuilder}]");

            strBuilder.Clear();

            foreach (CompositeIndexUtilizationEntity indexUtilizationEntity in indexUtilizationInfo.PotentialCompositeIndexes)
            {
                WriteCompositeIndexUtilizationEntity(strBuilder, indexUtilizationEntity);
            }

            this.AppendKeyValuePair(QueryMetricsDelimitedStringWriter.PotentialCompositeIndexes, $"[{strBuilder}]");
        /// <summary>
        /// Creates a new IndexUtilizationInfo from the backend delimited string.
        /// </summary>
        /// <param name="delimitedString">The backend delimited string to deserialize from.</param>
        /// <param name="result">The parsed index utilization info</param>
        /// <returns>A new IndexUtilizationInfo from the backend delimited string.</returns>
        internal static bool TryCreateFromDelimitedString(string delimitedString, out IndexUtilizationInfo result)
        {
            if (delimitedString == null)
            {
                result = IndexUtilizationInfo.Empty;
                return(true);
            }
            try
            {
                string indexString = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(delimitedString));

                result = JsonConvert.DeserializeObject <IndexUtilizationInfo>(indexString);
                if (result == null)
                {
                    result = IndexUtilizationInfo.Empty;
                }
                return(true);
            }
            catch
            {
                result = IndexUtilizationInfo.Empty;
                return(false);
            }
        }
 public Accumulator Accumulate(IndexUtilizationInfo indexUtilizationInfo)
 {
     return(new Accumulator(
                utilizedIndexes: (this.UtilizedIndexes ?? Enumerable.Empty <IndexUtilizationData>()).Concat(indexUtilizationInfo.UtilizedIndexes),
                potentialIndexes: (this.PotentialIndexes ?? Enumerable.Empty <IndexUtilizationData>()).Concat(indexUtilizationInfo.PotentialIndexes)));
 }
 protected abstract void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo);
 protected override void WriteIndexUtilizationInfo(IndexUtilizationInfo indexUtilizationInfo)
 {
     // Do nothing
 }