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  }