github.com/vchain-us/vcn@v0.9.11-0.20210921212052-a2484d23c0b3/pkg/cmd/alert/list/list.go (about) 1 /* 2 * Copyright (c) 2018-2020 vChain, Inc. All Rights Reserved. 3 * This software is released under GPL3. 4 * The full license information can be found under: 5 * https://www.gnu.org/licenses/gpl-3.0.en.html 6 * 7 */ 8 9 package list 10 11 import ( 12 "fmt" 13 14 "github.com/vchain-us/vcn/pkg/cmd/internal/cli" 15 16 "github.com/vchain-us/vcn/internal/assert" 17 "github.com/vchain-us/vcn/pkg/api" 18 "github.com/vchain-us/vcn/pkg/store" 19 20 "github.com/spf13/cobra" 21 ) 22 23 // NewCommand returns the cobra command for `vcn alerts list` 24 func NewCommand() *cobra.Command { 25 cmd := &cobra.Command{ 26 Use: "list", 27 Short: "List configured alert", 28 Long: ``, 29 Args: cobra.NoArgs, 30 RunE: runList, 31 } 32 33 return cmd 34 } 35 36 func runList(cmd *cobra.Command, args []string) error { 37 output, err := cmd.Flags().GetString("output") 38 if err != nil { 39 return err 40 } 41 42 cmd.SilenceUsage = true 43 if err := assert.UserLogin(); err != nil { 44 return err 45 } 46 47 u := api.NewUser(store.Config().CurrentContext.Email) 48 if hasAuth, _ := u.IsAuthenticated(); !hasAuth { 49 return fmt.Errorf("you need to be logged in, please use <vcn login>") 50 } 51 52 if output == "" { 53 fmt.Printf("Listing locally configured alerts for %s...\n\n", u.Email()) 54 } 55 alerts, err := store.ReadAlerts(u.Email()) 56 if err != nil { 57 return err 58 } 59 60 if output == "" && len(alerts) == 0 { 61 fmt.Printf("No results.\n\n") 62 return nil 63 } 64 65 var list []api.AlertResponse 66 67 for _, a := range alerts { 68 aConfig := api.AlertConfig{} 69 if err := a.ExportConfig(&aConfig); err != nil || aConfig.AlertUUID == "" { 70 cli.PrintWarning( 71 output, 72 fmt.Sprintf(`invalid configuration for: %#v`, a), 73 ) 74 continue 75 } 76 77 alert, err := u.GetAlert(aConfig.AlertUUID) 78 if err != nil { 79 cli.PrintWarning( 80 output, 81 fmt.Sprintf(`errored alert %s: %s`, aConfig.AlertUUID, err), 82 ) 83 continue 84 } 85 list = append(list, *alert) 86 } 87 88 return cli.PrintObjects(output, list) 89 }