github.com/devwanda/aphelion-staking@v0.33.9/cmd/tendermint/commands/root.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/spf13/cobra" 8 "github.com/spf13/viper" 9 10 cfg "github.com/devwanda/aphelion-staking/config" 11 "github.com/devwanda/aphelion-staking/libs/cli" 12 tmflags "github.com/devwanda/aphelion-staking/libs/cli/flags" 13 "github.com/devwanda/aphelion-staking/libs/log" 14 ) 15 16 var ( 17 config = cfg.DefaultConfig() 18 logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout)) 19 ) 20 21 func init() { 22 registerFlagsRootCmd(RootCmd) 23 } 24 25 func registerFlagsRootCmd(cmd *cobra.Command) { 26 cmd.PersistentFlags().String("log_level", config.LogLevel, "Log level") 27 } 28 29 // ParseConfig retrieves the default environment configuration, 30 // sets up the Tendermint root and ensures that the root exists 31 func ParseConfig() (*cfg.Config, error) { 32 conf := cfg.DefaultConfig() 33 err := viper.Unmarshal(conf) 34 if err != nil { 35 return nil, err 36 } 37 conf.SetRoot(conf.RootDir) 38 cfg.EnsureRoot(conf.RootDir) 39 if err = conf.ValidateBasic(); err != nil { 40 return nil, fmt.Errorf("error in config file: %v", err) 41 } 42 return conf, err 43 } 44 45 // RootCmd is the root command for Tendermint core. 46 var RootCmd = &cobra.Command{ 47 Use: "tendermint", 48 Short: "Tendermint Core (BFT Consensus) in Go", 49 PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { 50 if cmd.Name() == VersionCmd.Name() { 51 return nil 52 } 53 config, err = ParseConfig() 54 if err != nil { 55 return err 56 } 57 if config.LogFormat == cfg.LogFormatJSON { 58 logger = log.NewTMJSONLogger(log.NewSyncWriter(os.Stdout)) 59 } 60 logger, err = tmflags.ParseLogLevel(config.LogLevel, logger, cfg.DefaultLogLevel()) 61 if err != nil { 62 return err 63 } 64 if viper.GetBool(cli.TraceFlag) { 65 logger = log.NewTracingLogger(logger) 66 } 67 logger = logger.With("module", "main") 68 return nil 69 }, 70 }