public static void DumpSummary(OutputWriter writer, UnitOfTimeFormatter timeFormatter = null) { DumpNodeSetups(writer); DumpSingleCallsSummary(writer, timeFormatter); DumpBatchCallsSummary(writer, timeFormatter); }
private static void DumpSingleCallsSummary(OutputWriter writer, UnitOfTimeFormatter timeFormatter) { if (SingleCallResults.Count == 0 || SingleCallResults.First().Value.Details.Count == 0) { return; } List <IRpcService> services = SingleCallResults.Keys.ToList(); List <string> testedMethods = SingleCallResults.First().Value.Details.Keys.ToList(); writer?.WriteLine("Summary of batch method calls:"); TableBuilder singleCallsTable = new TableBuilder(writer) .AddColumn(new ColumnDefinition { Label = "Tested Method", Width = 1 + testedMethods.Max(methodName => methodName.Length), Alignment = ColumnAlignment.Left }) .AddColumn(new ColumnDefinition { Label = "Samples", Width = 10, Alignment = ColumnAlignment.Left }) .AddColumns(services.Select(service => new ColumnDefinition { Label = $"{service.Name} (min; max; avg)", Width = 30, Alignment = ColumnAlignment.Left }).ToArray()) .Prepare() .Start() ; foreach (string testedMethod in testedMethods) { List <string> values = new List <string> { testedMethod, //tested method SingleCallResults.Values.FirstOrDefault()?.Details[testedMethod].Count.ToString() // samples count. }; values.AddRange( from service in services let serviceResults = SingleCallResults[service].Details[testedMethod] let min = timeFormatter.Format(serviceResults.Min(r => r.Elapsed), false) let max = timeFormatter.Format(serviceResults.Max(r => r.Elapsed), false) let average = timeFormatter.Format(TimeSpan.FromTicks((long)serviceResults.Average(r => r.Elapsed.Ticks)), false) select $"{min}; {max}; {average} ({timeFormatter.GetUnitString()})" ); singleCallsTable.DrawRow(values.ToArray()); } singleCallsTable.End(); }
private static void DumpBatchCallsSummary(OutputWriter writer, UnitOfTimeFormatter timeFormatter) { if (BatchCallResults.Count == 0 || BatchCallResults.First().Value.Details.Count == 0) { return; } List <IRpcService> services = BatchCallResults.Keys.ToList(); List <string> testedMethods = BatchCallResults.First().Value.Details.Keys.ToList(); writer?.WriteLine("Summary of single method calls:"); TableBuilder table = new TableBuilder(writer) .AddColumn(new ColumnDefinition { Label = "Tested Method", Width = 1 + testedMethods.Max(methodName => methodName.Length), Alignment = ColumnAlignment.Left }) .AddColumns(services.Select(service => new ColumnDefinition { Label = $"{service.Name} (total; per-item)", Width = 30, Alignment = ColumnAlignment.Left }).ToArray()) .Prepare() .Start() ; foreach (string testedMethod in testedMethods) { List <string> values = new List <string>(); values.Add(testedMethod); values.AddRange( from service in services let serviceResults = BatchCallResults[service].Details[testedMethod] let result = serviceResults.FirstOrDefault() as TestSummary.BatchDetail let total = timeFormatter.Format(result.Elapsed) let perItem = timeFormatter.Format(result.Elapsed / result.BatchSize) select $"{total}; {perItem} ({timeFormatter.GetUnitString()})" ); table.DrawRow(values.ToArray()); } table.End(); }