...

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

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

     1  package cli
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	"strings"
     8  
     9  	"github.com/peterbourgon/ff/v3/ffcli"
    10  
    11  	alertmgr "edge-infra.dev/pkg/lib/gcp/monitoring/alertmanager"
    12  )
    13  
    14  type createArgsT struct {
    15  	templatePath string
    16  }
    17  
    18  var createArgs createArgsT
    19  var createFlagSet = newCreateFlagSet(&createArgs)
    20  
    21  func newCreateFlagSet(createArgs *createArgsT) *flag.FlagSet {
    22  	createf := newFlagSet("create")
    23  	createf.StringVar(&createArgs.templatePath, "path", "", "File/Folder path to the AlertPolicy(ies) (*.json) file(s).")
    24  	return createf
    25  }
    26  
    27  var createCmd = &ffcli.Command{
    28  	Name:       "create",
    29  	ShortUsage: "create [flags]",
    30  	ShortHelp:  "Create an alert policy",
    31  	FlagSet:    withGlobalFlags(createFlagSet),
    32  	Exec:       runCreate,
    33  }
    34  
    35  func runCreate(_ context.Context, args []string) error {
    36  	var err error
    37  
    38  	if len(args) > 0 {
    39  		Fatalf("too many non-flag arguments: %q", args)
    40  	}
    41  
    42  	if !checkCreateFlags() {
    43  		Println()
    44  		return flag.ErrHelp
    45  	}
    46  
    47  	// Get the AlertPolicy configuration template(s) from the path.
    48  	sourceAlertPolicy, err := alertmgr.ReadAlertPolicyFromPath(createArgs.templatePath)
    49  	if err != nil {
    50  		logger.Error(err, "Failed to read AlertPolicy configuration from file")
    51  		return err
    52  	}
    53  
    54  	for i := 0; i < len(sourceAlertPolicy); i++ {
    55  		policies, err := alertmgr.GetAlertPolicies(projectID, sourceAlertPolicy[i].DisplayName, "")
    56  		// allows duplicate alertpolicies creation  for testing purpose. Only for test alertpolicies with userlabel [validation:test].
    57  		testDuplicateFlag := strings.Contains(sourceAlertPolicy[i].UserLabels["validation"], "test")
    58  		if (err != nil || policies != nil) && !testDuplicateFlag {
    59  			logger.Error(nil, "AlertPolicy already exists in project", "project-id", projectID, "display-name", sourceAlertPolicy[i].DisplayName)
    60  			continue
    61  		}
    62  		err = alertmgr.CreateAlertPolicies(sourceAlertPolicy[i].AlertPolicy, projectID)
    63  		if err != nil {
    64  			return err
    65  		}
    66  	}
    67  	return nil
    68  }
    69  
    70  func checkCreateFlags() bool {
    71  	if len(projectID) == 0 {
    72  		logger.Error(nil, "Error: no value specified for [project] - a valid project-id is required")
    73  		return false
    74  	}
    75  
    76  	if len(createArgs.templatePath) == 0 {
    77  		logger.Error(nil, "Error: no value specified for [path] please provide the location of the AlertPolicy (*.json) file(s)")
    78  		return false
    79  	}
    80  
    81  	if !checkPath(createArgs.templatePath, false) {
    82  		logger.Error(nil, fmt.Sprintf("Error: invalid AlertPolicy [path] specified - %s\n", createArgs.templatePath))
    83  		return false
    84  	}
    85  
    86  	return true
    87  }
    88  

View as plain text