public void WriteQueryMetrics(QueryMetrics queryMetrics)
        {
            this.WriteBeforeQueryMetrics();

            // Top Level Properties
            this.WriteRetrievedDocumentCount(queryMetrics.RetrievedDocumentCount);
            this.WriteRetrievedDocumentSize(queryMetrics.RetrievedDocumentSize);
            this.WriteOutputDocumentCount(queryMetrics.OutputDocumentCount);
            this.WriteOutputDocumentSize(queryMetrics.OutputDocumentSize);
            this.WriteIndexHitRatio(queryMetrics.IndexHitRatio);
            this.WriteTotalQueryExecutionTime(queryMetrics.TotalQueryExecutionTime);

            // QueryPreparationTimes
            this.WriteQueryPreparationTimes(queryMetrics.QueryPreparationTimes);

            this.WriteIndexLookupTime(queryMetrics.IndexLookupTime);
            this.WriteDocumentLoadTime(queryMetrics.DocumentLoadTime);
            this.WriteVMExecutionTime(queryMetrics.VMExecutionTime);

            // RuntimesExecutionTimes
            this.WriteRuntimesExecutionTimes(queryMetrics.RuntimeExecutionTimes);

            this.WriteDocumentWriteTime(queryMetrics.DocumentWriteTime);

            // ClientSideMetrics
            this.WriteClientSideMetrics(queryMetrics.ClientSideMetrics);

            this.WriteAfterQueryMetrics();
        }
        /// <summary>
        /// Adds all QueryMetrics in a list along with the current instance.
        /// </summary>
        /// <param name="queryMetricsList">The list to sum up.</param>
        /// <returns>A new QueryMetrics instance that is the sum of the current instance and the list.</returns>
        internal QueryMetrics Add(params QueryMetrics[] queryMetricsList)
        {
            List <QueryMetrics> combinedQueryMetricsList = new List <QueryMetrics>(queryMetricsList.Length + 1);

            combinedQueryMetricsList.Add(this);
            combinedQueryMetricsList.AddRange(queryMetricsList);
            return(QueryMetrics.CreateFromIEnumerable(combinedQueryMetricsList));
        }
 internal static QueryMetrics CreateWithSchedulingMetrics(
     QueryMetrics queryMetrics,
     List <Tuple <string, SchedulingTimeSpan> > partitionSchedulingTimeSpans)
 {
     return(new QueryMetrics(
                queryMetrics.RetrievedDocumentCount,
                queryMetrics.RetrievedDocumentSize,
                queryMetrics.OutputDocumentCount,
                queryMetrics.OutputDocumentSize,
                queryMetrics.IndexHitDocumentCount,
                queryMetrics.TotalQueryExecutionTime,
                queryMetrics.QueryPreparationTimes,
                queryMetrics.IndexLookupTime,
                queryMetrics.DocumentLoadTime,
                queryMetrics.VMExecutionTime,
                queryMetrics.RuntimeExecutionTimes,
                queryMetrics.DocumentWriteTime,
                new ClientSideMetrics(
                    queryMetrics.ClientSideMetrics.Retries,
                    queryMetrics.ClientSideMetrics.RequestCharge,
                    queryMetrics.ClientSideMetrics.FetchExecutionRanges,
                    partitionSchedulingTimeSpans)));
 }
 /// <summary>
 /// Creates a new QueryMetrics from the backend delimited string.
 /// </summary>
 /// <param name="delimitedString">The backend delimited string to deserialize from.</param>
 /// <returns>A new QueryMetrics from the backend delimited string.</returns>
 internal static QueryMetrics CreateFromDelimitedString(string delimitedString)
 {
     return(QueryMetrics.CreateFromDelimitedStringAndClientSideMetrics(delimitedString, new ClientSideMetrics(0, 0, new List <FetchExecutionRange>(), new List <Tuple <string, SchedulingTimeSpan> >())));
 }