Add support for proper use of pprof
This commit is contained in:
		
							parent
							
								
									1965e68a78
								
							
						
					
					
						commit
						c3df8d2309
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -49,3 +49,4 @@ debug
 | 
				
			||||||
.DS_Store
 | 
					.DS_Store
 | 
				
			||||||
*.pprof
 | 
					*.pprof
 | 
				
			||||||
*.pdf
 | 
					*.pdf
 | 
				
			||||||
 | 
					pprof.*
 | 
				
			||||||
							
								
								
									
										32
									
								
								cmd/root.go
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								cmd/root.go
									
									
									
									
									
								
							| 
						 | 
					@ -7,6 +7,7 @@ import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	log2 "log"
 | 
						log2 "log"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						_ "net/http/pprof"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
| 
						 | 
					@ -20,7 +21,6 @@ import (
 | 
				
			||||||
	"github.com/docker/docker/client"
 | 
						"github.com/docker/docker/client"
 | 
				
			||||||
	"github.com/gammazero/workerpool"
 | 
						"github.com/gammazero/workerpool"
 | 
				
			||||||
	"github.com/mitchellh/colorstring"
 | 
						"github.com/mitchellh/colorstring"
 | 
				
			||||||
	"github.com/pkg/profile"
 | 
					 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
	"golang.org/x/crypto/acme"
 | 
						"golang.org/x/crypto/acme"
 | 
				
			||||||
	"golang.org/x/crypto/acme/autocert"
 | 
						"golang.org/x/crypto/acme/autocert"
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,8 @@ func init() {
 | 
				
			||||||
	rootCommand.PersistentFlags().BoolVar(&debug, "debug", false, "pass in order to run wings in debug mode")
 | 
						rootCommand.PersistentFlags().BoolVar(&debug, "debug", false, "pass in order to run wings in debug mode")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Flags specifically used when running the API.
 | 
						// Flags specifically used when running the API.
 | 
				
			||||||
	rootCommand.Flags().String("profiler", "", "the profiler to run for this instance")
 | 
						rootCommand.Flags().Bool("pprof", false, "if the pprof profiler should be enabled. The profiler will bind to localhost:6060 by default")
 | 
				
			||||||
 | 
						rootCommand.Flags().Int("pprof-port", 6060, "If provided with --pprof, the port it will run on")
 | 
				
			||||||
	rootCommand.Flags().Bool("auto-tls", false, "pass in order to have wings generate and manage it's own SSL certificates using Let's Encrypt")
 | 
						rootCommand.Flags().Bool("auto-tls", false, "pass in order to have wings generate and manage it's own SSL certificates using Let's Encrypt")
 | 
				
			||||||
	rootCommand.Flags().String("tls-hostname", "", "required with --auto-tls, the FQDN for the generated SSL certificate")
 | 
						rootCommand.Flags().String("tls-hostname", "", "required with --auto-tls, the FQDN for the generated SSL certificate")
 | 
				
			||||||
	rootCommand.Flags().Bool("ignore-certificate-errors", false, "ignore certificate verification errors when executing API calls")
 | 
						rootCommand.Flags().Bool("ignore-certificate-errors", false, "ignore certificate verification errors when executing API calls")
 | 
				
			||||||
| 
						 | 
					@ -86,25 +87,6 @@ func init() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func rootCmdRun(cmd *cobra.Command, _ []string) {
 | 
					func rootCmdRun(cmd *cobra.Command, _ []string) {
 | 
				
			||||||
	switch cmd.Flag("profiler").Value.String() {
 | 
					 | 
				
			||||||
	case "cpu":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.CPUProfile).Stop()
 | 
					 | 
				
			||||||
	case "mem":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.MemProfile).Stop()
 | 
					 | 
				
			||||||
	case "alloc":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.MemProfile, profile.MemProfileAllocs).Stop()
 | 
					 | 
				
			||||||
	case "heap":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.MemProfile, profile.MemProfileHeap).Stop()
 | 
					 | 
				
			||||||
	case "routines":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.GoroutineProfile).Stop()
 | 
					 | 
				
			||||||
	case "mutex":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.MutexProfile).Stop()
 | 
					 | 
				
			||||||
	case "threads":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.ThreadcreationProfile).Stop()
 | 
					 | 
				
			||||||
	case "block":
 | 
					 | 
				
			||||||
		defer profile.Start(profile.BlockProfile).Stop()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	printLogo()
 | 
						printLogo()
 | 
				
			||||||
	log.Debug("running in debug mode")
 | 
						log.Debug("running in debug mode")
 | 
				
			||||||
	log.WithField("config_file", configPath).Info("loading configuration from file")
 | 
						log.WithField("config_file", configPath).Info("loading configuration from file")
 | 
				
			||||||
| 
						 | 
					@ -325,6 +307,14 @@ func rootCmdRun(cmd *cobra.Command, _ []string) {
 | 
				
			||||||
		TLSConfig: config.DefaultTLSConfig,
 | 
							TLSConfig: config.DefaultTLSConfig,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						profile, _ := cmd.Flags().GetBool("pprof")
 | 
				
			||||||
 | 
						if profile {
 | 
				
			||||||
 | 
							profilePort, _ := cmd.Flags().GetInt("pprof-port")
 | 
				
			||||||
 | 
							go func() {
 | 
				
			||||||
 | 
								http.ListenAndServe(fmt.Sprintf("localhost:%d", profilePort), nil)
 | 
				
			||||||
 | 
							}()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Check if the server should run with TLS but using autocert.
 | 
						// Check if the server should run with TLS but using autocert.
 | 
				
			||||||
	if autotls {
 | 
						if autotls {
 | 
				
			||||||
		m := autocert.Manager{
 | 
							m := autocert.Manager{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user