...

Source file src/edge-infra.dev/cmd/edge/monitoring/alertman/cli/delete.go

Documentation: edge-infra.dev/cmd/edge/monitoring/alertman/cli

     1  package cli
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  
     7  	"github.com/peterbourgon/ff/v3/ffcli"
     8  
     9  	alertmgr "edge-infra.dev/pkg/lib/gcp/monitoring/alertmanager"
    10  
    11  	monutil "edge-infra.dev/pkg/lib/gcp/monitoring/monutil"
    12  )
    13  
    14  type deleteArgsT struct {
    15  	name      string
    16  	labels    string
    17  	deleteAll bool
    18  }
    19  
    20  var deleteArgs deleteArgsT
    21  var deleteFlagSet = newDeleteFlagSet(&deleteArgs)
    22  
    23  func newDeleteFlagSet(deleteArgs *deleteArgsT) *flag.FlagSet {
    24  	deletef := newFlagSet("delete")
    25  	deletef.StringVar(&deleteArgs.name, "name", "", "Name of alert policy to delete.")
    26  	deletef.StringVar(&deleteArgs.labels, "labels", "", "Delete alert policies based on label(s). \n Specify multiple labels through colon and comma separation (representing key and value pairs). \n Label input supports keys, keys and values, and mixed input. \n ex. policy-owner:edge,severity:critical,type")
    27  	deletef.BoolVar(&deleteArgs.deleteAll, "all", false, "Delete all alert policies that return from a name match. Must be specified if there is more than one match found.")
    28  	return deletef
    29  }
    30  
    31  var deleteCmd = &ffcli.Command{
    32  	Name:       "delete",
    33  	ShortUsage: "delete [flags]",
    34  	ShortHelp:  "Delete an alert policy",
    35  	FlagSet:    withGlobalFlags(deleteFlagSet),
    36  	Exec:       runDelete,
    37  }
    38  
    39  func runDelete(_ context.Context, args []string) error {
    40  	var alertNames []string
    41  
    42  	if len(args) > 0 {
    43  		Fatalf("too many non-flag arguments: %q", args)
    44  	}
    45  
    46  	if !checkDeleteFlags() {
    47  		Println()
    48  		return flag.ErrHelp
    49  	}
    50  
    51  	if len(deleteArgs.name) > 0 {
    52  		var alertNames []string
    53  		if alertmgr.IsLinkName(deleteArgs.name) {
    54  			alertNames = append(alertNames, deleteArgs.name)
    55  			return alertmgr.DeleteAlertPolicies(alertNames)
    56  		}
    57  
    58  		policy, err := alertmgr.GetAlertPolicies(projectID, deleteArgs.name, "")
    59  		if err != nil || len(policy) == 0 {
    60  			return Errorf("No mactch for AlertPolicy: %s", deleteArgs.name)
    61  		}
    62  		for _, value := range policy {
    63  			alertNames = append(alertNames, value.Name)
    64  		}
    65  
    66  		if !deleteArgs.deleteAll && len(alertNames) > 1 {
    67  			logger.Info("There was more than one alert policy found with this Display Name. Please use the [all] flag.")
    68  			return flag.ErrHelp
    69  		}
    70  		return alertmgr.DeleteAlertPolicies(alertNames)
    71  	}
    72  
    73  	if len(deleteArgs.labels) > 0 {
    74  		labelsMap := monutil.StringToMap(deleteArgs.labels)
    75  		alertNames = alertmgr.GetNamesFromLabels(labelsMap, projectID)
    76  		return alertmgr.DeleteAlertPolicies(alertNames)
    77  	}
    78  	return nil
    79  }
    80  
    81  func checkDeleteFlags() bool {
    82  	if len(projectID) == 0 {
    83  		logger.Info("Error: no value specified for [project] - a valid project-id is required")
    84  		return false
    85  	}
    86  
    87  	if deleteArgs.deleteAll && len(deleteArgs.labels) > 0 {
    88  		logger.Info("Error: value specified for [all] flag and [labels] - only provide a value for labels.")
    89  		return false
    90  	}
    91  
    92  	if len(deleteArgs.name) == 0 && len(deleteArgs.labels) == 0 {
    93  		logger.Info("Error: no value specified for [name] or for [labels] please provide a valid name for one of the delete action parameters")
    94  		return false
    95  	}
    96  
    97  	if len(deleteArgs.name) > 0 && len(deleteArgs.labels) > 0 {
    98  		logger.Info("Error: value specified for [name] and [labels] - please provide a value for only one of the delete action parameters")
    99  		return false
   100  	}
   101  
   102  	return true
   103  }
   104  

View as plain text