cli.go 1.29 KB
Newer Older
1 2 3 4 5 6 7
package pprof

import (
	"errors"
	"math"

	opservice "github.com/ethereum-optimism/optimism/op-service"
8
	"github.com/urfave/cli/v2"
9 10 11 12 13 14 15 16 17 18
)

const (
	EnabledFlagName    = "pprof.enabled"
	ListenAddrFlagName = "pprof.addr"
	PortFlagName       = "pprof.port"
)

func CLIFlags(envPrefix string) []cli.Flag {
	return []cli.Flag{
19 20 21
		&cli.BoolFlag{
			Name:    EnabledFlagName,
			Usage:   "Enable the pprof server",
22
			EnvVars: opservice.PrefixEnvVar(envPrefix, "PPROF_ENABLED"),
23
		},
24 25 26
		&cli.StringFlag{
			Name:    ListenAddrFlagName,
			Usage:   "pprof listening address",
27
			Value:   "0.0.0.0", // TODO(CLI-4159): Switch to 127.0.0.1
28
			EnvVars: opservice.PrefixEnvVar(envPrefix, "PPROF_ADDR"),
29
		},
30 31 32 33
		&cli.IntFlag{
			Name:    PortFlagName,
			Usage:   "pprof listening port",
			Value:   6060,
34
			EnvVars: opservice.PrefixEnvVar(envPrefix, "PPROF_PORT"),
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
		},
	}
}

type CLIConfig struct {
	Enabled    bool
	ListenAddr string
	ListenPort int
}

func (m CLIConfig) Check() error {
	if !m.Enabled {
		return nil
	}

	if m.ListenPort < 0 || m.ListenPort > math.MaxUint16 {
		return errors.New("invalid pprof port")
	}

	return nil
}

func ReadCLIConfig(ctx *cli.Context) CLIConfig {
	return CLIConfig{
59 60 61
		Enabled:    ctx.Bool(EnabledFlagName),
		ListenAddr: ctx.String(ListenAddrFlagName),
		ListenPort: ctx.Int(PortFlagName),
62 63
	}
}