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(); }
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(); }
/// <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)); }
/// <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()); }