in contrib/cmd/runkperf/commands/bench/utils.go [63:97]
func renderBenchmarkReportInterceptor(handler subcmdActionFunc) subcmdActionFunc {
return func(cliCtx *cli.Context) (*internaltypes.BenchmarkReport, error) {
report, err := handler(cliCtx)
if err != nil {
return nil, err
}
outF := os.Stdout
if targetFile := cliCtx.GlobalString("result"); targetFile != "" {
targetFileDir := filepath.Dir(targetFile)
_, err = os.Stat(targetFileDir)
if err != nil && os.IsNotExist(err) {
err = os.MkdirAll(targetFileDir, 0750)
}
if err != nil {
return nil, fmt.Errorf("failed to ensure output's dir %s: %w", targetFileDir, err)
}
outF, err = os.Create(targetFile)
if err != nil {
return nil, err
}
defer outF.Close()
}
encoder := json.NewEncoder(outF)
encoder.SetIndent("", " ")
if err := encoder.Encode(report); err != nil {
return nil, fmt.Errorf("failed to encode json: %w", err)
}
return report, nil
}
}