ble-sensors/cmd/root.go

72 lines
1.8 KiB
Go
Raw Normal View History

2020-08-08 19:00:41 -05:00
package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
2020-08-13 00:13:15 -05:00
"go.uber.org/zap"
2020-08-08 19:00:41 -05:00
"github.com/spf13/viper"
)
2020-08-13 00:13:15 -05:00
var configFile string
var debug bool
var logger *zap.Logger
2020-08-08 19:00:41 -05:00
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
2020-08-13 00:13:15 -05:00
Use: "ble-sensors",
2020-08-08 19:00:41 -05:00
Short: "A brief description of your application",
Long: `A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func init() {
cobra.OnInitialize(initConfig)
2020-08-13 00:13:15 -05:00
rootCmd.PersistentFlags().StringVar(&configFile, "config", "", "config file")
rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "Turn debug messages on.")
2020-08-08 19:00:41 -05:00
}
func initConfig() {
2020-08-13 00:13:15 -05:00
if configFile != "" {
viper.SetConfigFile(configFile)
2020-08-08 19:00:41 -05:00
} else {
viper.AddConfigPath(".")
2020-08-13 00:13:15 -05:00
viper.AddConfigPath("/opt/ble-sensors")
viper.SetConfigName("ble-sensors")
2020-08-08 19:00:41 -05:00
}
2020-08-13 00:13:15 -05:00
var err error
if debug {
logger, err = zap.NewDevelopment()
} else {
logger, err = zap.NewProduction()
}
if err != nil {
fmt.Printf("unable to initialize logger: %s\n", err.Error())
os.Exit(1)
}
err = viper.ReadInConfig()
if err != nil {
fmt.Printf("unable to open config file: %s\n", err.Error())
os.Exit(1)
2020-08-08 19:00:41 -05:00
}
2020-08-13 00:13:15 -05:00
logger.Info("found config file", zap.String("filename", viper.ConfigFileUsed()))
2020-08-08 19:00:41 -05:00
}