...

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

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

     1  package cli
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"strings"
     7  
     8  	"github.com/peterbourgon/ff/v3/ffcli"
     9  
    10  	dashmgr "edge-infra.dev/pkg/lib/gcp/monitoring/dashboardmanager"
    11  )
    12  
    13  type deleteArgsT struct {
    14  	labels string
    15  	name   string
    16  }
    17  
    18  var deleteArgs deleteArgsT
    19  var deleteFlagSet = newDeleteFlagSet(&deleteArgs)
    20  
    21  func newDeleteFlagSet(deleteArgs *deleteArgsT) *flag.FlagSet {
    22  	deletef := newFlagSet("delete")
    23  	deletef.StringVar(&deleteArgs.labels, "labels", "", "Deletes all dashboards that match the specified label(s). Multiple labels can be specified using a comma between each value.")
    24  	deletef.StringVar(&deleteArgs.name, "name", "", "Dashboard Name or Display Name to delete.\nNOTE: If a Display Name is used and multiple dashboards exist with the same name, all will be deleted.")
    25  	return deletef
    26  }
    27  
    28  var deleteCmd = &ffcli.Command{
    29  	Name:       "delete",
    30  	ShortUsage: "delete [flags]",
    31  	ShortHelp:  "Delete dashboard(s) from project",
    32  	LongHelp: strings.TrimSpace(`
    33  Deletes dashboards in the project using either the specified dashboard name, display name, labels.
    34  `),
    35  	FlagSet: withGlobalFlags(deleteFlagSet),
    36  	Exec:    runDelete,
    37  }
    38  
    39  func runDelete(ctx context.Context, args []string) error {
    40  	if len(args) > 0 {
    41  		Fatalf("too many non-flag arguments: %q", args)
    42  	}
    43  	if !checkDeleteFlags() {
    44  		Println()
    45  		return flag.ErrHelp
    46  	}
    47  
    48  	client, err := dashmgr.New(ctx, projectID)
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	// Delete dashboards matching labels
    54  	if len(deleteArgs.labels) > 0 {
    55  		labels := strArray(deleteArgs.labels)
    56  		for i := 0; i < len(labels); i++ {
    57  			err = client.DeleteDashboardsByLabel(labels[i])
    58  			if err != nil {
    59  				return err
    60  			}
    61  		}
    62  		return nil
    63  	}
    64  
    65  	// Delete dashboards that match specified name
    66  	if len(deleteArgs.name) > 0 {
    67  		return client.DeleteDashboard(deleteArgs.name)
    68  	}
    69  
    70  	return nil
    71  }
    72  
    73  // validates the required delete subcommand flags have been provided
    74  func checkDeleteFlags() bool {
    75  	if len(projectID) == 0 {
    76  		Println("Error: no value specified for [project] - a valid project-id is required")
    77  		return false
    78  	}
    79  
    80  	if len(deleteArgs.name) == 0 && len(deleteArgs.labels) == 0 {
    81  		Println("Error: no value specified for [name] or [labels] - please provide a value for one of the delete action parameters")
    82  		return false
    83  	}
    84  
    85  	if len(deleteArgs.name) > 0 && len(deleteArgs.labels) > 0 {
    86  		Println("Error: values provided for both [name] and [labels] - please specify dashboard [name] or [labels] to perform a delete action on, not both")
    87  	}
    88  
    89  	return true
    90  }
    91  

View as plain text