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  }