Skip to content

Commit

Permalink
cmd: fix config and flags loading process
Browse files Browse the repository at this point in the history
Get value from viper, like `viper.GetString()`

Value priority:

1. Return value from config file
2. Return value from flag value, passed by command line
3. Return value from flag default value
  • Loading branch information
fanyang89 authored and 1023280072 committed Sep 7, 2023
1 parent 1055172 commit 77d2302
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 31 deletions.
18 changes: 0 additions & 18 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ package cmd

import (
"fmt"
"os"
"path/filepath"

"github.com/cockroachdb/errors"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
"github.com/spf13/viper"
Expand Down Expand Up @@ -34,18 +31,3 @@ func init() {
configCmd.AddCommand(configGetDefaultCmd)
rootCmd.AddCommand(configCmd)
}

func writeDefaultConfig() error {
home, err := os.UserHomeDir()
if err != nil {
return errors.WithStack(err)
}

parentDir := filepath.Join(home, ".tcpmon")
err = os.MkdirAll(parentDir, 0755)
if err != nil {
return errors.WithStack(err)
}

return errors.WithStack(viper.SafeWriteConfigAs(filepath.Join(parentDir, "config.yaml")))
}
4 changes: 1 addition & 3 deletions cmd/op.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@ var opBackupAllCmd = &cobra.Command{
}

func init() {
rootCmd.AddCommand(opCmd)

opBackupAllCmd.Flags().DurationP("timeout", "t", 4*time.Second, "HTTP timeout")
rootCmd.AddCommand(opCmd)
opCmd.AddCommand(opBackupAllCmd)
fatalIf(viper.BindPFlags(opBackupAllCmd.Flags()))
}
31 changes: 24 additions & 7 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cmd

import (
"os"
"path/filepath"
"strings"

"github.com/cockroachdb/errors"
Expand Down Expand Up @@ -32,7 +33,7 @@ func Execute(cmdline string) {
if !strings.HasPrefix(cmdline, "config default") {
err := viper.ReadInConfig()
if err != nil {
// config file not found, is must be a dev env
// config file not found, it must be a dev env (RPM package will place a default config)
// write a default config file to $HOME/.tcpmon/config.yaml
var expected viper.ConfigFileNotFoundError
if errors.As(err, &expected) {
Expand All @@ -45,25 +46,26 @@ func Execute(cmdline string) {
log.Fatal().Err(err).Msg("failed to read config file")
}
}
if strings.HasPrefix(cmdline, "start") {
log.Info().Str("configFile", viper.ConfigFileUsed()).
Str("logDir", viper.GetString("log-dir")).
Msg("Config loaded")
}
}

// init logger
level, _ := zerolog.ParseLevel(viper.GetString("log-level"))
disableConsoleLog := viper.GetBool("disable-console")
logConfig := &tcpmon.LogConfig{
Level: level,
FileLoggingEnabled: true,
ConsoleLoggingEnabled: !viper.GetBool("disable-console"),
ConsoleLoggingEnabled: !disableConsoleLog,
Directory: viper.GetString("log-dir"),
Filename: viper.GetString("log-filename"),
MaxSize: viper.GetInt("log-max-size"),
MaxBackups: viper.GetInt("log-max-count"),
}
tcpmon.InitLogger(logConfig)
if strings.HasPrefix(cmdline, "start") {
log.Info().Str("configFile", viper.ConfigFileUsed()).
Str("logDir", viper.GetString("log-dir")).
Msg("Config loaded")
}

// print warnings after logger initialized
if level == zerolog.NoLevel {
Expand All @@ -86,3 +88,18 @@ func init() {
rootCmd.PersistentFlags().Int("log-max-count", 5, "Maximum log files to keep")
fatalIf(viper.BindPFlags(rootCmd.PersistentFlags()))
}

func writeDefaultConfig() error {
home, err := os.UserHomeDir()
if err != nil {
return errors.WithStack(err)
}

parentDir := filepath.Join(home, ".tcpmon")
err = os.MkdirAll(parentDir, 0755)
if err != nil {
return errors.WithStack(err)
}

return errors.WithStack(viper.SafeWriteConfigAs(filepath.Join(parentDir, "config.yaml")))
}
1 change: 0 additions & 1 deletion rpm/tcpmon.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ db-expected-rss: "209715200"
db-max-size: "2000000"
db-min-open-interval: 1m0s
db-write-interval: 3s
disable-console: true
listen: 0.0.0.0:6789
log-dir: /var/log/tcpmon
log-filename: tcpmon.log
Expand Down
4 changes: 2 additions & 2 deletions tcpmon/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ type BadgerDbLogger struct {

func NewBadgerLogger() *BadgerDbLogger {
return &BadgerDbLogger{
log: log.With().Str("mod", "badger").Logger().Level(zerolog.InfoLevel),
log: log.With().Str("mod", "badger").Logger(),
}
}

Expand All @@ -123,7 +123,7 @@ type MemberlistLogger struct {

func NewMemberlistLogger() *MemberlistLogger {
return &MemberlistLogger{
log: log.With().Str("mod", "memberlist").Logger().Level(zerolog.InfoLevel),
log: log.With().Str("mod", "memberlist").Logger(),
}
}

Expand Down

0 comments on commit 77d2302

Please sign in to comment.