func renderBenchmarkReportInterceptor()

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
	}
}