func printResponseStats()

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
}