add cpu profiling

This commit is contained in:
Yann Hamon 2020-12-15 16:27:25 +01:00
parent a71d1eb59b
commit 11a3e8f64f
2 changed files with 16 additions and 0 deletions

View file

@ -3,7 +3,9 @@ package main
import ( import (
"context" "context"
"fmt" "fmt"
"log"
"os" "os"
"runtime/pprof"
"sync" "sync"
"github.com/yannh/kubeconform/pkg/config" "github.com/yannh/kubeconform/pkg/config"
@ -51,6 +53,18 @@ func realMain() int {
return 1 return 1
} }
if cfg.CPUProfileFile != "" {
f, err := os.Create(cfg.CPUProfileFile)
if err != nil {
log.Fatal("could not create CPU profile: ", err)
}
defer f.Close()
if err := pprof.StartCPUProfile(f); err != nil {
log.Fatal("could not start CPU profile: ", err)
}
defer pprof.StopCPUProfile()
}
// Detect whether we have data being piped through stdin // Detect whether we have data being piped through stdin
stat, _ := os.Stdin.Stat() stat, _ := os.Stdin.Stat()
isStdin := (stat.Mode() & os.ModeCharDevice) == 0 isStdin := (stat.Mode() & os.ModeCharDevice) == 0

View file

@ -9,6 +9,7 @@ import (
) )
type Config struct { type Config struct {
CPUProfileFile string
ExitOnError bool ExitOnError bool
Files []string Files []string
SchemaLocations []string SchemaLocations []string
@ -74,6 +75,7 @@ func FromFlags(progName string, args []string) (Config, string, error) {
flags.StringVar(&c.OutputFormat, "output", "text", "output format - json, tap, text") flags.StringVar(&c.OutputFormat, "output", "text", "output format - json, tap, text")
flags.BoolVar(&c.Verbose, "verbose", false, "print results for all resources") flags.BoolVar(&c.Verbose, "verbose", false, "print results for all resources")
flags.BoolVar(&c.SkipTLS, "insecure-skip-tls-verify", false, "disable verification of the server's SSL certificate. This will make your HTTPS connections insecure") flags.BoolVar(&c.SkipTLS, "insecure-skip-tls-verify", false, "disable verification of the server's SSL certificate. This will make your HTTPS connections insecure")
flags.StringVar(&c.CPUProfileFile, "cpu-prof", "", "debug - log CPU profiling to file")
flags.BoolVar(&c.Help, "h", false, "show help information") flags.BoolVar(&c.Help, "h", false, "show help information")
flags.Usage = func() { flags.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: %s [OPTION]... [FILE OR FOLDER]...\n", progName) fmt.Fprintf(os.Stderr, "Usage: %s [OPTION]... [FILE OR FOLDER]...\n", progName)