Ver Fonte

cmd/geth, cmd/utils: add cli flags for pprof and whisper.

Péter Szilágyi há 10 anos atrás
pai
commit
8830403acf
2 ficheiros alterados com 46 adições e 22 exclusões
  1. 8 7
      cmd/geth/main.go
  2. 38 15
      cmd/utils/flags.go

+ 8 - 7
cmd/geth/main.go

@@ -24,8 +24,6 @@ import (
 	"bufio"
 	"fmt"
 	"io/ioutil"
-	"log"
-	"net/http"
 	"os"
 	"runtime"
 	"strconv"
@@ -236,6 +234,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.RPCEnabledFlag,
 		utils.RPCListenAddrFlag,
 		utils.RPCPortFlag,
+		utils.WhisperEnabledFlag,
 		utils.VMDebugFlag,
 		utils.ProtocolVersionFlag,
 		utils.NetworkIdFlag,
@@ -246,6 +245,8 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.LogVModuleFlag,
 		utils.LogFileFlag,
 		utils.LogJSONFlag,
+		utils.PProfEnabledFlag,
+		utils.PProfPortFlag,
 	}
 
 	// missing:
@@ -260,11 +261,6 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 }
 
 func main() {
-	// Start up the default http server for pprof
-	go func() {
-		log.Println(http.ListenAndServe("localhost:6060", nil))
-	}()
-
 	fmt.Printf("Welcome to the FRONTIER\n")
 	runtime.GOMAXPROCS(runtime.NumCPU())
 	defer logger.Flush()
@@ -336,6 +332,11 @@ func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (pass
 }
 
 func startEth(ctx *cli.Context, eth *eth.Ethereum) {
+	// Start profiling, if requested
+	if ctx.GlobalBool(utils.PProfEnabledFlag.Name) {
+		utils.StartPProf(ctx)
+	}
+	// Start Ethereum itself
 	utils.StartEthereum(eth)
 	am := eth.AccountManager()
 

+ 38 - 15
cmd/utils/flags.go

@@ -2,6 +2,9 @@ package utils
 
 import (
 	"crypto/ecdsa"
+	"fmt"
+	"log"
+	"net/http"
 	"os"
 	"path"
 	"runtime"
@@ -136,10 +139,33 @@ var (
 		Usage: "Send json structured log output to a file or '-' for standard output (default: no json output)",
 		Value: "",
 	}
+	LogToStdErrFlag = cli.BoolFlag{
+		Name:  "logtostderr",
+		Usage: "Logs are written to standard error instead of to files.",
+	}
+	LogVModuleFlag = cli.GenericFlag{
+		Name:  "vmodule",
+		Usage: "The syntax of the argument is a comma-separated list of pattern=N, where pattern is a literal file name (minus the \".go\" suffix) or \"glob\" pattern and N is a V level.",
+		Value: glog.GetVModule(),
+	}
 	VMDebugFlag = cli.BoolFlag{
 		Name:  "vmdebug",
 		Usage: "Virtual Machine debug output",
 	}
+	BacktraceAtFlag = cli.GenericFlag{
+		Name:  "backtrace_at",
+		Usage: "When set to a file and line number holding a logging statement a stack trace will be written to the Info log",
+		Value: glog.GetTraceLocation(),
+	}
+	PProfEnabledFlag = cli.BoolFlag{
+		Name:  "pprof",
+		Usage: "Whether the profiling server is enabled",
+	}
+	PProfPortFlag = cli.IntFlag{
+		Name:  "pprofport",
+		Usage: "Port on which the profiler should listen",
+		Value: 6060,
+	}
 
 	// RPC settings
 	RPCEnabledFlag = cli.BoolFlag{
@@ -190,25 +216,15 @@ var (
 		Usage: "Port mapping mechanism (any|none|upnp|pmp|extip:<IP>)",
 		Value: "any",
 	}
+	WhisperEnabledFlag = cli.BoolFlag{
+		Name:  "shh",
+		Usage: "Whether the whisper sub-protocol is enabled",
+	}
 	JSpathFlag = cli.StringFlag{
 		Name:  "jspath",
 		Usage: "JS library path to be used with console and js subcommands",
 		Value: ".",
 	}
-	BacktraceAtFlag = cli.GenericFlag{
-		Name:  "backtrace_at",
-		Usage: "When set to a file and line number holding a logging statement a stack trace will be written to the Info log",
-		Value: glog.GetTraceLocation(),
-	}
-	LogToStdErrFlag = cli.BoolFlag{
-		Name:  "logtostderr",
-		Usage: "Logs are written to standard error instead of to files.",
-	}
-	LogVModuleFlag = cli.GenericFlag{
-		Name:  "vmodule",
-		Usage: "The syntax of the argument is a comma-separated list of pattern=N, where pattern is a literal file name (minus the \".go\" suffix) or \"glob\" pattern and N is a V level.",
-		Value: glog.GetVModule(),
-	}
 )
 
 func GetNAT(ctx *cli.Context) nat.Interface {
@@ -269,7 +285,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
 		Port:               ctx.GlobalString(ListenPortFlag.Name),
 		NAT:                GetNAT(ctx),
 		NodeKey:            GetNodeKey(ctx),
-		Shh:                true,
+		Shh:                ctx.GlobalBool(WhisperEnabledFlag.Name),
 		Dial:               true,
 		BootNodes:          ctx.GlobalString(BootnodesFlag.Name),
 	}
@@ -319,3 +335,10 @@ func StartRPC(eth *eth.Ethereum, ctx *cli.Context) {
 	xeth := xeth.New(eth, nil)
 	_ = rpc.Start(xeth, config)
 }
+
+func StartPProf(ctx *cli.Context) {
+	address := fmt.Sprintf("localhost:%d", ctx.GlobalInt(PProfPortFlag.Name))
+	go func() {
+		log.Println(http.ListenAndServe(address, nil))
+	}()
+}