2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-09-21 03:16:57 +08:00
asynq/tools/asynqmon/cmd/root.go

77 lines
2.1 KiB
Go
Raw Normal View History

2019-12-06 22:51:55 +08:00
package cmd
import (
"fmt"
"github.com/spf13/cobra"
"os"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)
var cfgFile string
2019-12-07 23:48:11 +08:00
// Flags
var uri string
var db int
2019-12-06 22:51:55 +08:00
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "asynqmon",
Short: "A monitoring tool for asynq queues",
2019-12-08 11:59:12 +08:00
Long: `Asynqmon is a CLI tool to inspect and monitor queues managed by asynq package.
2019-12-06 22:51:55 +08:00
2019-12-09 08:36:08 +08:00
Asynqmon has a few subcommands to query and mutate the current state of the queues.
Monitoring commands such as "stats" and "ls" can be used in conjunction with the
"watch" command to continuously run the command at a certain interval.
2019-12-08 11:59:12 +08:00
Example: watch -n 5 asynqmon stats`,
2019-12-06 22:51:55 +08:00
// 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(&cfgFile, "config", "", "config file (default is $HOME/.asynqmon.yaml)")
2019-12-07 23:48:11 +08:00
rootCmd.PersistentFlags().StringVarP(&uri, "uri", "u", "127.0.0.1:6379", "Redis server URI")
rootCmd.PersistentFlags().IntVarP(&db, "db", "n", 0, "Redis database number (default is 0)")
2019-12-06 22:51:55 +08:00
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
if cfgFile != "" {
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
} else {
// Find home directory.
home, err := homedir.Dir()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Search config in home directory with name ".asynqmon" (without extension).
viper.AddConfigPath(home)
viper.SetConfigName(".asynqmon")
}
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.
if err := viper.ReadInConfig(); err == nil {
fmt.Println("Using config file:", viper.ConfigFileUsed())
}
}