ble-sensors/cmd/root.go
Jeffrey C. Ollie 523a561015
Some checks failed
continuous-integration/drone/push Build is failing
much work
2020-08-13 00:13:15 -05:00

72 lines
1.8 KiB
Go

package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
"go.uber.org/zap"
"github.com/spf13/viper"
)
var configFile string
var debug bool
var logger *zap.Logger
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "ble-sensors",
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)
rootCmd.PersistentFlags().StringVar(&configFile, "config", "", "config file")
rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "Turn debug messages on.")
}
func initConfig() {
if configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.AddConfigPath(".")
viper.AddConfigPath("/opt/ble-sensors")
viper.SetConfigName("ble-sensors")
}
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)
}
logger.Info("found config file", zap.String("filename", viper.ConfigFileUsed()))
}