in cmd/kperf/commands/runner/runner.go [192:229]
func printResponseStats(f *os.File, rawDataFlagIncluded bool, stats *request.Result) error {
output := types.RunnerMetricReport{
Total: stats.Total,
ErrorStats: metrics.BuildErrorStatsGroupByType(stats.Errors),
Duration: stats.Duration.String(),
TotalReceivedBytes: stats.TotalReceivedBytes,
PercentileLatenciesByURL: map[string][][2]float64{},
}
total := 0
for _, latencies := range stats.LatenciesByURL {
total += len(latencies)
}
latencies := make([]float64, 0, total)
for _, l := range stats.LatenciesByURL {
latencies = append(latencies, l...)
}
output.PercentileLatencies = metrics.BuildPercentileLatencies(latencies)
for u, l := range stats.LatenciesByURL {
output.PercentileLatenciesByURL[u] = metrics.BuildPercentileLatencies(l)
}
if rawDataFlagIncluded {
output.LatenciesByURL = stats.LatenciesByURL
output.Errors = stats.Errors
}
encoder := json.NewEncoder(f)
encoder.SetIndent("", " ")
err := encoder.Encode(output)
if err != nil {
return fmt.Errorf("failed to encode json: %w", err)
}
return nil
}