cli.go 1.57 KB
Newer Older
1 2 3 4 5 6 7 8
package metrics

import (
	"errors"
	"math"

	opservice "github.com/ethereum-optimism/optimism/op-service"

9
	"github.com/urfave/cli/v2"
10 11 12 13 14 15
)

const (
	EnabledFlagName    = "metrics.enabled"
	ListenAddrFlagName = "metrics.addr"
	PortFlagName       = "metrics.port"
16 17
	defaultListenAddr  = "0.0.0.0"
	defaultListenPort  = 7300
18 19
)

20 21
var ErrInvalidPort = errors.New("invalid metrics port")

22 23 24 25 26 27 28 29
func DefaultCLIConfig() CLIConfig {
	return CLIConfig{
		Enabled:    false,
		ListenAddr: defaultListenAddr,
		ListenPort: defaultListenPort,
	}
}

30 31
func CLIFlags(envPrefix string) []cli.Flag {
	return []cli.Flag{
32 33 34
		&cli.BoolFlag{
			Name:    EnabledFlagName,
			Usage:   "Enable the metrics server",
35
			EnvVars: opservice.PrefixEnvVar(envPrefix, "METRICS_ENABLED"),
36
		},
37 38 39
		&cli.StringFlag{
			Name:    ListenAddrFlagName,
			Usage:   "Metrics listening address",
40
			Value:   defaultListenAddr, // TODO(CLI-4159): Switch to 127.0.0.1
41
			EnvVars: opservice.PrefixEnvVar(envPrefix, "METRICS_ADDR"),
42
		},
43 44 45
		&cli.IntFlag{
			Name:    PortFlagName,
			Usage:   "Metrics listening port",
46
			Value:   defaultListenPort,
47
			EnvVars: opservice.PrefixEnvVar(envPrefix, "METRICS_PORT"),
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
		},
	}
}

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 {
64
		return ErrInvalidPort
65 66 67 68 69 70 71
	}

	return nil
}

func ReadCLIConfig(ctx *cli.Context) CLIConfig {
	return CLIConfig{
72 73 74
		Enabled:    ctx.Bool(EnabledFlagName),
		ListenAddr: ctx.String(ListenAddrFlagName),
		ListenPort: ctx.Int(PortFlagName),
75 76
	}
}