github.com/prysmaticlabs/prysm@v1.4.4/cmd/slasher/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/slasher/flags"
     9  	"github.com/prysmaticlabs/prysm/shared/cmd"
    10  	"github.com/prysmaticlabs/prysm/shared/debug"
    11  	"github.com/prysmaticlabs/prysm/shared/featureconfig"
    12  	"github.com/urfave/cli/v2"
    13  )
    14  
    15  var appHelpTemplate = `NAME:
    16     {{.App.Name}} - {{.App.Usage}}
    17  USAGE:
    18     {{.App.HelpName}} [options]{{if .App.Commands}} command [command options]{{end}} {{if .App.ArgsUsage}}{{.App.ArgsUsage}}{{else}}[arguments...]{{end}}
    19     {{if .App.Version}}
    20  AUTHOR:
    21     {{range .App.Authors}}{{ . }}{{end}}
    22     {{end}}{{if .App.Commands}}
    23  GLOBAL OPTIONS:
    24     {{range .App.Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
    25     {{end}}{{end}}{{if .FlagGroups}}
    26  {{range .FlagGroups}}{{.Name}} OPTIONS:
    27    {{range .Flags}}{{.}}
    28    {{end}}
    29  {{end}}{{end}}{{if .App.Copyright }}
    30  COPYRIGHT:
    31     {{.App.Copyright}}
    32  VERSION:
    33     {{.App.Version}}
    34     {{end}}{{if len .App.Authors}}
    35     {{end}}
    36  `
    37  
    38  type flagGroup struct {
    39  	Name  string
    40  	Flags []cli.Flag
    41  }
    42  
    43  var appHelpFlagGroups = []flagGroup{
    44  	{
    45  		Name: "cmd",
    46  		Flags: []cli.Flag{
    47  			cmd.MinimalConfigFlag,
    48  			cmd.E2EConfigFlag,
    49  			cmd.RPCMaxPageSizeFlag,
    50  			cmd.VerbosityFlag,
    51  			cmd.DataDirFlag,
    52  			cmd.EnableTracingFlag,
    53  			cmd.TracingProcessNameFlag,
    54  			cmd.TracingEndpointFlag,
    55  			cmd.TraceSampleFractionFlag,
    56  			cmd.MonitoringHostFlag,
    57  			cmd.EnableBackupWebhookFlag,
    58  			cmd.BackupWebhookOutputDir,
    59  			flags.MonitoringPortFlag,
    60  			cmd.DisableMonitoringFlag,
    61  			cmd.LogFormat,
    62  			cmd.LogFileName,
    63  			cmd.ForceClearDB,
    64  			cmd.ClearDB,
    65  			cmd.ConfigFileFlag,
    66  			cmd.AcceptTosFlag,
    67  		},
    68  	},
    69  	{
    70  		Name: "debug",
    71  		Flags: []cli.Flag{
    72  			debug.PProfFlag,
    73  			debug.PProfAddrFlag,
    74  			debug.PProfPortFlag,
    75  			debug.MemProfileRateFlag,
    76  			debug.CPUProfileFlag,
    77  			debug.TraceFlag,
    78  		},
    79  	},
    80  	{
    81  		Name: "slasher",
    82  		Flags: []cli.Flag{
    83  			flags.BeaconCertFlag,
    84  			flags.CertFlag,
    85  			flags.KeyFlag,
    86  			flags.RPCPort,
    87  			flags.RPCHost,
    88  			flags.BeaconRPCProviderFlag,
    89  			flags.EnableHistoricalDetectionFlag,
    90  			flags.SpanCacheSize,
    91  			flags.HighestAttCacheSize,
    92  		},
    93  	},
    94  	{
    95  		Name:  "features",
    96  		Flags: featureconfig.ActiveFlags(featureconfig.SlasherFlags),
    97  	},
    98  }
    99  
   100  func init() {
   101  	cli.AppHelpTemplate = appHelpTemplate
   102  
   103  	type helpData struct {
   104  		App        interface{}
   105  		FlagGroups []flagGroup
   106  	}
   107  
   108  	originalHelpPrinter := cli.HelpPrinter
   109  	cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) {
   110  		if tmpl == appHelpTemplate {
   111  			for _, group := range appHelpFlagGroups {
   112  				sort.Sort(cli.FlagsByName(group.Flags))
   113  			}
   114  			originalHelpPrinter(w, tmpl, helpData{data, appHelpFlagGroups})
   115  		} else {
   116  			originalHelpPrinter(w, tmpl, data)
   117  		}
   118  	}
   119  }