improve command handling
- add alias box for boxes - expose api host as flag - allow to set watch through config file
This commit is contained in:
parent
d99e0da559
commit
dfbbe9d58f
5 changed files with 31 additions and 16 deletions
|
@ -16,10 +16,11 @@ var checkCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
var checkBoxCmd = &cobra.Command{
|
var checkBoxCmd = &cobra.Command{
|
||||||
Use: "boxes <boxId> [...<boxIds>]",
|
Use: "boxes <boxId> [...<boxIds>]",
|
||||||
Short: "one-off check on one or more box IDs",
|
Aliases: []string{"box"},
|
||||||
Long: "specify box IDs to check them for events",
|
Short: "one-off check on one or more box IDs",
|
||||||
Args: BoxIdValidator,
|
Long: "specify box IDs to check them for events",
|
||||||
|
Args: BoxIdValidator,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
cmd.SilenceUsage = true
|
cmd.SilenceUsage = true
|
||||||
return checkAndNotify(args)
|
return checkAndNotify(args)
|
||||||
|
|
|
@ -41,14 +41,19 @@ func init() {
|
||||||
shouldNotify bool
|
shouldNotify bool
|
||||||
debug bool
|
debug bool
|
||||||
logFormat string
|
logFormat string
|
||||||
|
api string
|
||||||
)
|
)
|
||||||
|
|
||||||
cobra.OnInitialize(initConfig)
|
cobra.OnInitialize(initConfig)
|
||||||
|
|
||||||
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "path to config file (default $HOME/.osem_notify.yml)")
|
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "path to config file (default $HOME/.osem_notify.yml)")
|
||||||
|
rootCmd.PersistentFlags().StringVarP(&api, "api", "a", "https://api.opensensemap.org", "openSenseMap API to query against")
|
||||||
rootCmd.PersistentFlags().StringVarP(&logFormat, "logformat", "l", "plain", "log format, can be plain or json")
|
rootCmd.PersistentFlags().StringVarP(&logFormat, "logformat", "l", "plain", "log format, can be plain or json")
|
||||||
rootCmd.PersistentFlags().BoolVarP(&debug, "debug", "d", false, "enable verbose logging")
|
rootCmd.PersistentFlags().BoolVarP(&debug, "debug", "d", false, "enable verbose logging")
|
||||||
rootCmd.PersistentFlags().BoolVarP(&shouldNotify, "notify", "n", false, "if set, will send out notifications.\nOtherwise results are printed to stdout only")
|
rootCmd.PersistentFlags().BoolVarP(&shouldNotify, "notify", "n", false, `if set, will send out notifications.
|
||||||
|
Otherwise results are printed to stdout only.
|
||||||
|
You might want to run 'osem_notify debug notifications' first to verify everything works.
|
||||||
|
`)
|
||||||
|
|
||||||
viper.BindPFlags(rootCmd.PersistentFlags()) // let flags override config
|
viper.BindPFlags(rootCmd.PersistentFlags()) // let flags override config
|
||||||
}
|
}
|
||||||
|
|
22
cmd/watch.go
22
cmd/watch.go
|
@ -4,14 +4,20 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
var watchInterval int
|
|
||||||
var ticker <-chan time.Time
|
var ticker <-chan time.Time
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
watchCmd.AddCommand(watchBoxesCmd)
|
var (
|
||||||
|
watchInterval int
|
||||||
|
)
|
||||||
|
|
||||||
watchCmd.PersistentFlags().IntVarP(&watchInterval, "interval", "i", 15, "interval to run checks in minutes")
|
watchCmd.PersistentFlags().IntVarP(&watchInterval, "interval", "i", 15, "interval to run checks in minutes")
|
||||||
|
viper.BindPFlags(watchCmd.PersistentFlags())
|
||||||
|
|
||||||
|
watchCmd.AddCommand(watchBoxesCmd)
|
||||||
rootCmd.AddCommand(watchCmd)
|
rootCmd.AddCommand(watchCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,12 +29,14 @@ var watchCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
var watchBoxesCmd = &cobra.Command{
|
var watchBoxesCmd = &cobra.Command{
|
||||||
Use: "boxes <boxId> [...<boxIds>]",
|
Use: "boxes <boxId> [...<boxIds>]",
|
||||||
Short: "watch a list of box IDs for events",
|
Aliases: []string{"box"},
|
||||||
Long: "specify box IDs to watch them for events",
|
Short: "watch a list of box IDs for events",
|
||||||
Args: BoxIdValidator,
|
Long: "specify box IDs to watch them for events",
|
||||||
|
Args: BoxIdValidator,
|
||||||
PreRun: func(cmd *cobra.Command, args []string) {
|
PreRun: func(cmd *cobra.Command, args []string) {
|
||||||
ticker = time.NewTicker(time.Duration(watchInterval) * time.Minute).C
|
interval := viper.GetDuration("interval") * time.Minute
|
||||||
|
ticker = time.NewTicker(interval).C
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
cmd.SilenceUsage = true
|
cmd.SilenceUsage = true
|
||||||
|
|
|
@ -161,8 +161,10 @@ func checkBox(boxId string, defaultConf *NotifyConfig) (*Box, []CheckResult, err
|
||||||
boxLogger := log.WithFields(log.Fields{"boxId": boxId})
|
boxLogger := log.WithFields(log.Fields{"boxId": boxId})
|
||||||
boxLogger.Info("checking box for events")
|
boxLogger.Info("checking box for events")
|
||||||
|
|
||||||
|
osem := NewOsemClient(viper.GetString("api"))
|
||||||
|
|
||||||
// get box data
|
// get box data
|
||||||
box, err := Osem.GetBox(boxId)
|
box, err := osem.GetBox(boxId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
boxLogger.Error(err)
|
boxLogger.Error(err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
|
@ -16,9 +16,9 @@ type OsemClient struct {
|
||||||
sling *sling.Sling
|
sling *sling.Sling
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOsemClient(client *http.Client) *OsemClient {
|
func NewOsemClient(endpoint string) *OsemClient {
|
||||||
return &OsemClient{
|
return &OsemClient{
|
||||||
sling: sling.New().Client(client).Base("https://api.opensensemap.org/"),
|
sling: sling.New().Client(&http.Client{}).Base(endpoint),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,4 +32,3 @@ func (client *OsemClient) GetBox(boxId string) (*Box, error) {
|
||||||
return box, nil
|
return box, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var Osem = NewOsemClient(&http.Client{}) // default client
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue