github.com/prysmaticlabs/prysm@v1.4.4/cmd/client-stats/usage.go (about) 1 // This code was adapted from https://github.com/ethereum/go-ethereum/blob/master/cmd/geth/usage.go 2 package main 3 4 import ( 5 "io" 6 "sort" 7 8 "github.com/prysmaticlabs/prysm/cmd/client-stats/flags" 9 "github.com/prysmaticlabs/prysm/shared/cmd" 10 "github.com/urfave/cli/v2" 11 ) 12 13 var appHelpTemplate = `NAME: 14 {{.App.Name}} - {{.App.Usage}} 15 USAGE: 16 {{.App.HelpName}} [options]{{if .App.Commands}} command [command options]{{end}} {{if .App.ArgsUsage}}{{.App.ArgsUsage}}{{else}}[arguments...]{{end}} 17 {{if .App.Version}} 18 AUTHOR: 19 {{range .App.Authors}}{{ . }}{{end}} 20 {{end}}{{if .App.Commands}} 21 GLOBAL OPTIONS: 22 {{range .App.Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}} 23 {{end}}{{end}}{{if .FlagGroups}} 24 {{range .FlagGroups}}{{.Name}} OPTIONS: 25 {{range .Flags}}{{.}} 26 {{end}} 27 {{end}}{{end}}{{if .App.Copyright }} 28 COPYRIGHT: 29 {{.App.Copyright}} 30 VERSION: 31 {{.App.Version}} 32 {{end}}{{if len .App.Authors}} 33 {{end}} 34 ` 35 36 type flagGroup struct { 37 Name string 38 Flags []cli.Flag 39 } 40 41 var appHelpFlagGroups = []flagGroup{ 42 { 43 Name: "cmd", 44 Flags: []cli.Flag{ 45 cmd.VerbosityFlag, 46 cmd.LogFormat, 47 cmd.LogFileName, 48 cmd.ConfigFileFlag, 49 }, 50 }, 51 { 52 Name: "client-stats", 53 Flags: []cli.Flag{ 54 flags.BeaconnodeMetricsURLFlag, 55 flags.ValidatorMetricsURLFlag, 56 flags.ClientStatsAPIURLFlag, 57 flags.ScrapeIntervalFlag, 58 }, 59 }, 60 } 61 62 func init() { 63 cli.AppHelpTemplate = appHelpTemplate 64 65 type helpData struct { 66 App interface{} 67 FlagGroups []flagGroup 68 } 69 70 originalHelpPrinter := cli.HelpPrinter 71 cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) { 72 if tmpl == appHelpTemplate { 73 for _, group := range appHelpFlagGroups { 74 sort.Sort(cli.FlagsByName(group.Flags)) 75 } 76 originalHelpPrinter(w, tmpl, helpData{data, appHelpFlagGroups}) 77 } else { 78 originalHelpPrinter(w, tmpl, data) 79 } 80 } 81 }