mirror of
https://github.com/prometheus/prometheus
synced 2024-12-25 16:02:28 +00:00
cmd/prometheus: improve help output
This commit is contained in:
parent
a8f117b02d
commit
525070419b
@ -18,9 +18,10 @@ import (
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
"text/template"
|
||||
"time"
|
||||
"unicode"
|
||||
|
||||
"github.com/prometheus/log"
|
||||
"github.com/prometheus/prometheus/notification"
|
||||
@ -54,6 +55,9 @@ func init() {
|
||||
|
||||
cfg.fs = flag.CommandLine
|
||||
|
||||
// Set additional defaults.
|
||||
cfg.storage.SyncStrategy = local.Adaptive
|
||||
|
||||
cfg.fs.BoolVar(
|
||||
&cfg.printVersion, "version", false,
|
||||
"Print version information.",
|
||||
@ -209,9 +213,6 @@ func init() {
|
||||
&cfg.queryEngine.MaxConcurrentQueries, "query.max-concurrency", 20,
|
||||
"Maximum number of queries executed concurrently.",
|
||||
)
|
||||
|
||||
// Set additional defaults.
|
||||
cfg.storage.SyncStrategy = local.Adaptive
|
||||
}
|
||||
|
||||
func parse(args []string) error {
|
||||
@ -245,10 +246,44 @@ func parse(args []string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
var helpTmpl = `
|
||||
usage: prometheus [<args>]
|
||||
{{ range $cat, $flags := . }}{{ if ne $cat "." }} == {{ $cat | upper }} =={{ end }}
|
||||
{{ range $flags }}
|
||||
-{{ .Name }} {{ .DefValue | quote }}
|
||||
{{ .Usage | wrap 80 6 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
`
|
||||
|
||||
func usage() {
|
||||
helpTmpl = strings.TrimSpace(helpTmpl)
|
||||
t := template.New("usage")
|
||||
t = t.Funcs(template.FuncMap{
|
||||
"wrap": func(width, indent int, s string) (ns string) {
|
||||
width = width - indent
|
||||
length := indent
|
||||
for _, w := range strings.SplitAfter(s, " ") {
|
||||
if length+len(w) > width {
|
||||
ns += "\n" + strings.Repeat(" ", indent)
|
||||
length = 0
|
||||
}
|
||||
ns += w
|
||||
length += len(w)
|
||||
}
|
||||
return strings.TrimSpace(ns)
|
||||
},
|
||||
"quote": func(s string) string {
|
||||
if len(s) == 0 || s == "false" || s == "true" || unicode.IsDigit(rune(s[0])) {
|
||||
return s
|
||||
}
|
||||
return fmt.Sprintf("%q", s)
|
||||
},
|
||||
"upper": strings.ToUpper,
|
||||
})
|
||||
t = template.Must(t.Parse(helpTmpl))
|
||||
|
||||
groups := make(map[string][]*flag.Flag)
|
||||
// Set a default group for ungrouped flags.
|
||||
groups["."] = make([]*flag.Flag, 0)
|
||||
|
||||
// Bucket flags into groups based on the first of their dot-separated levels.
|
||||
cfg.fs.VisitAll(func(fl *flag.Flag) {
|
||||
@ -260,43 +295,12 @@ func usage() {
|
||||
groups[name] = append(groups[name], fl)
|
||||
}
|
||||
})
|
||||
|
||||
groupsOrdered := make(sort.StringSlice, 0, len(groups))
|
||||
for groupName := range groups {
|
||||
groupsOrdered = append(groupsOrdered, groupName)
|
||||
}
|
||||
sort.Sort(groupsOrdered)
|
||||
|
||||
fmt.Fprintf(os.Stderr, "Usage: %s [options ...]:\n\n", os.Args[0])
|
||||
|
||||
const (
|
||||
maxLineLength = 80
|
||||
lineSep = "\n "
|
||||
)
|
||||
for _, groupName := range groupsOrdered {
|
||||
if groupName != "." {
|
||||
fmt.Fprintf(os.Stderr, "\n%s:\n", strings.Title(groupName))
|
||||
}
|
||||
|
||||
for _, fl := range groups[groupName] {
|
||||
format := " -%s=%s"
|
||||
if strings.Contains(fl.DefValue, " ") || fl.DefValue == "" {
|
||||
format = " -%s=%q"
|
||||
}
|
||||
flagUsage := fmt.Sprintf(format+lineSep, fl.Name, fl.DefValue)
|
||||
|
||||
// Format the usage text to not exceed maxLineLength characters per line.
|
||||
words := strings.SplitAfter(fl.Usage, " ")
|
||||
lineLength := len(lineSep) - 1
|
||||
for _, w := range words {
|
||||
if lineLength+len(w) > maxLineLength {
|
||||
flagUsage += lineSep
|
||||
lineLength = len(lineSep) - 1
|
||||
}
|
||||
flagUsage += w
|
||||
lineLength += len(w)
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "%s\n", flagUsage)
|
||||
for cat, fl := range groups {
|
||||
if len(fl) < 2 && cat != "." {
|
||||
groups["."] = append(groups["."], fl...)
|
||||
delete(groups, cat)
|
||||
}
|
||||
}
|
||||
|
||||
t.Execute(os.Stdout, groups)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user