コード例 #1
0
        private void WritePartitionSchedulingTimeSpan(string partitionId, SchedulingTimeSpan schedulingTimeSpan)
        {
            this.WriteBeforePartitionSchedulingTimeSpan();

            this.WritePartitionSchedulingTimeSpanId(partitionId);
            this.WriteResponseTime(schedulingTimeSpan.ResponseTime);
            this.WriteRunTime(schedulingTimeSpan.RunTime);
            this.WriteWaitTime(schedulingTimeSpan.WaitTime);
            this.WriteTurnaroundTime(schedulingTimeSpan.TurnaroundTime);
            this.WriteNumberOfPreemptions(schedulingTimeSpan.NumPreemptions);

            this.WriteAfterPartitionSchedulingTimeSpan();
        }
コード例 #2
0
        private void WriteSchedulingMetrics(ClientSideMetrics clientSideMetrics)
        {
            this.WriteBeforeSchedulingMetrics();

            foreach (Tuple <string, SchedulingTimeSpan> partitionSchedulingTimeSpan in clientSideMetrics.PartitionSchedulingTimeSpans.OrderBy(x => x.Item2.ResponseTime))
            {
                string             partitionId        = partitionSchedulingTimeSpan.Item1;
                SchedulingTimeSpan schedulingTimeSpan = partitionSchedulingTimeSpan.Item2;

                this.WritePartitionSchedulingTimeSpan(partitionId, schedulingTimeSpan);
            }

            this.WriteAfterSchedulingMetrics();
        }
コード例 #3
0
 /// <summary>
 /// Gets the average run time for a list of SchedulingMetrics.
 /// </summary>
 /// <param name="schedulingTimeSpans">Metrics to get average run times from.</param>
 /// <returns>The average run time for a list of SchedulingMetrics.</returns>
 public static TimeSpan GetAverageRunTime(IEnumerable <SchedulingTimeSpan> schedulingTimeSpans)
 {
     return(SchedulingTimeSpan.GetAverageTime(schedulingTimeSpans, schedulingMetric => schedulingMetric.RunTime.Ticks));
 }
コード例 #4
0
        /// <summary>
        /// Gets a human readable plain text of the ClientSideMetrics (Please use monospace font).
        /// </summary>
        /// <param name="indentLevel">The indent / nesting level of the ClientSideMetrics.</param>
        /// <returns>A human readable plain text of the ClientSideMetrics.</returns>
        public string ToTextString(int indentLevel = 0)
        {
            if (indentLevel == int.MaxValue)
            {
                throw new ArgumentOutOfRangeException("indentLevel", "input must be less than Int32.MaxValue");
            }

            StringBuilder stringBuilder = new StringBuilder();

            checked
            {
                // Properties
                QueryMetricsUtils.AppendHeaderToStringBuilder(
                    stringBuilder,
                    QueryMetricsConstants.ClientSideQueryMetricsText,
                    indentLevel);
                QueryMetricsUtils.AppendCountToStringBuilder(
                    stringBuilder,
                    QueryMetricsConstants.RetriesText,
                    this.Retries,
                    indentLevel + 1);
                QueryMetricsUtils.AppendRUToStringBuilder(
                    stringBuilder,
                    QueryMetricsConstants.RequestChargeText,
                    this.RequestCharge,
                    indentLevel + 1);

                QueryMetricsUtils.AppendNewlineToStringBuilder(stringBuilder);

                // Building the table for fetch execution ranges
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, QueryMetricsConstants.FetchExecutionRangesText, 1);
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, PartitionExecutionTimelineTable.TopLine, 1);
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, PartitionExecutionTimelineTable.Header, 1);
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, PartitionExecutionTimelineTable.MiddleLine, 1);
                foreach (FetchExecutionRange fetchExecutionRange in this.FetchExecutionRanges.OrderBy(fetchExecutionRange => fetchExecutionRange.StartTime))
                {
                    QueryMetricsUtils.AppendHeaderToStringBuilder(
                        stringBuilder,
                        PartitionExecutionTimelineTable.GetRow(
                            fetchExecutionRange.PartitionId,
                            fetchExecutionRange.StartTime.ToUniversalTime().ToString("hh:mm:ss.ffffff"),
                            fetchExecutionRange.EndTime.ToUniversalTime().ToString("hh:mm:ss.ffffff"),
                            (fetchExecutionRange.EndTime - fetchExecutionRange.StartTime).TotalMilliseconds.ToString("0.00"),
                            fetchExecutionRange.NumberOfDocuments,
                            fetchExecutionRange.RetryCount),
                        1);
                }

                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, PartitionExecutionTimelineTable.BottomLine, 1);

                QueryMetricsUtils.AppendNewlineToStringBuilder(stringBuilder);

                // Building the table for scheduling metrics
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, QueryMetricsConstants.SchedulingMetricsText, 1);
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, SchedulingMetricsTable.TopLine, 1);
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, SchedulingMetricsTable.Header, 1);
                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, SchedulingMetricsTable.MiddleLine, 1);
                foreach (Tuple <string, SchedulingTimeSpan> partitionSchedulingTimeSpan in this.PartitionSchedulingTimeSpans.OrderBy(x => x.Item2.ResponseTime))
                {
                    string             partitionId        = partitionSchedulingTimeSpan.Item1;
                    SchedulingTimeSpan schedulingTimeSpan = partitionSchedulingTimeSpan.Item2;

                    QueryMetricsUtils.AppendHeaderToStringBuilder(
                        stringBuilder,
                        SchedulingMetricsTable.GetRow(
                            partitionId,
                            schedulingTimeSpan.ResponseTime.TotalMilliseconds.ToString("0.00"),
                            schedulingTimeSpan.RunTime.TotalMilliseconds.ToString("0.00"),
                            schedulingTimeSpan.WaitTime.TotalMilliseconds.ToString("0.00"),
                            schedulingTimeSpan.TurnaroundTime.TotalMilliseconds.ToString("0.00"),
                            schedulingTimeSpan.NumPreemptions),
                        1);
                }

                QueryMetricsUtils.AppendHeaderToStringBuilder(stringBuilder, SchedulingMetricsTable.BottomLine, 1);
            }

            return(stringBuilder.ToString());
        }