/
main.go
135 lines (118 loc) · 3.76 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package main
import (
"flag"
"fmt"
"io"
"os"
"path/filepath"
"strings"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/server"
svrcmd "github.com/cosmos/cosmos-sdk/server/cmd"
"github.com/cosmos/cosmos-sdk/telemetry"
"github.com/rs/zerolog"
"github.com/spf13/cobra"
"github.com/spf13/cobra/doc"
tmcfg "github.com/tendermint/tendermint/config"
tmcli "github.com/tendermint/tendermint/libs/cli"
"github.com/fairblock/dkg-core/app"
"github.com/fairblock/dkg-core/cmd/dkgd/cmd"
//"github.com/fairblock/dkg-core/cmd/dkgd/cmd/utils"
)
//go:generate ./genDocs.sh ../../docs/cli
func main() {
docs := flag.String("docs", "", "only generate documentation for the CLI commands into the specified folder")
flag.Parse()
rootCmd, _ := cmd.NewRootCmd()
// If run with the docs flag, generate documentation for all CLI commands
if *docs != "" {
// add flags from svrcmd.Execute()
rootCmd.PersistentFlags().String(flags.FlagLogLevel, zerolog.InfoLevel.String(), "The logging level (trace|debug|info|warn|error|fatal|panic)")
rootCmd.PersistentFlags().String(flags.FlagLogFormat, tmcfg.LogFormatPlain, "The logging format (json|plain)")
home := filepath.Join("$HOME", "."+app.Name)
executor := tmcli.PrepareBaseCmd(rootCmd, "", home)
rootCmd = executor.Root()
// set static values for dynamic (system-dependent) flag defaults
// values := map[string]string{
// flags.FlagHome: home,
// cli.FlagIP: "127.0.0.1",
// cli.FlagMoniker: "node",
// }
// utils.OverwriteFlagDefaults(rootCmd, values, true)
// The AutoGen tag includes a date, so when the time zone of the local machine is different from the time zone
// of the github host the date could be different and the PR check fail. Therefore we disable it
rootCmd.DisableAutoGenTag = true
deleteLineBreakCmds(rootCmd)
if err := doc.GenMarkdownTree(rootCmd, *docs); err != nil {
fmt.Printf("Failed generating CLI command documentation: %s, exiting...\n", err)
os.Exit(1)
}
if err := genTOC(rootCmd, *docs); err != nil {
fmt.Printf("Failed generating CLI command table of contents: %s, exiting...\n", err)
os.Exit(1)
}
os.Exit(0)
}
setupMetrics()
if err := svrcmd.Execute(rootCmd, app.DefaultNodeHome); err != nil {
switch e := err.(type) {
case server.ErrorCode:
os.Exit(e.Code)
default:
os.Exit(1)
}
}
}
func genTOC(cmd *cobra.Command, dir string) error {
toc := make([]string, 0)
toc = append(toc, genTOCEntry(cmd, dir)...)
filename := filepath.Join(dir, "toc.md")
f, err := os.Create(filename)
if err != nil {
return err
}
_, err = io.WriteString(f, "# CLI command overview\n")
if err != nil {
return err
}
for _, s := range toc {
_, err = io.WriteString(f, s)
if err != nil {
return err
}
}
return nil
}
func genTOCEntry(cmd *cobra.Command, dir string) []string {
basename := strings.Replace(cmd.CommandPath(), " ", "_", -1) + ".md"
label := cmd.Use
label = strings.ReplaceAll(label, "<", "\\<")
label = strings.ReplaceAll(label, ">", "\\>")
toc := []string{fmt.Sprintf("- [%s](%s)\t - %s\n", label, basename, cmd.Short)}
for _, c := range cmd.Commands() {
if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
for _, entry := range genTOCEntry(c, dir) {
toc = append(toc, "\t"+entry)
}
}
return toc
}
func deleteLineBreakCmds(cmd *cobra.Command) {
cmd.RemoveCommand(flags.LineBreak)
for _, c := range cmd.Commands() {
deleteLineBreakCmds(c)
}
}
func setupMetrics() {
telemetry.New(telemetry.Config{
Enabled: true,
EnableHostname: false,
ServiceName: "dkg",
// 1<<62, https://play.golang.org/p/szrQPRHxE0O
// A hacky way to essentially prevent prometheus metrics from ever expiring
PrometheusRetentionTime: 4611686018427387904,
EnableHostnameLabel: false,
})
}