func()

in cli/alert_add.go [76:141]


func (a *alertAddCmd) addAlert(ctx context.Context, _ *kingpin.ParseContext) error {
	if len(a.labels) > 0 {
		// Allow the alertname label to be defined implicitly as the first argument rather
		// than explicitly as a key=value pair.
		if _, err := compat.Matcher(a.labels[0], "cli"); err != nil {
			a.labels[0] = fmt.Sprintf("alertname=%s", strconv.Quote(a.labels[0]))
		}
	}

	ls := make(models.LabelSet, len(a.labels))
	for _, l := range a.labels {
		matcher, err := compat.Matcher(l, "cli")
		if err != nil {
			return err
		}
		if matcher.Type != labels.MatchEqual {
			return errors.New("labels must be specified as key=value pairs")
		}
		ls[matcher.Name] = matcher.Value
	}

	annotations := make(models.LabelSet, len(a.annotations))
	for _, a := range a.annotations {
		matcher, err := compat.Matcher(a, "cli")
		if err != nil {
			return err
		}
		if matcher.Type != labels.MatchEqual {
			return errors.New("annotations must be specified as key=value pairs")
		}
		annotations[matcher.Name] = matcher.Value
	}

	var startsAt, endsAt time.Time
	if a.start != "" {
		var err error
		startsAt, err = time.Parse(time.RFC3339, a.start)
		if err != nil {
			return err
		}
	}
	if a.end != "" {
		var err error
		endsAt, err = time.Parse(time.RFC3339, a.end)
		if err != nil {
			return err
		}
	}

	pa := &models.PostableAlert{
		Alert: models.Alert{
			GeneratorURL: strfmt.URI(a.generatorURL),
			Labels:       ls,
		},
		Annotations: annotations,
		StartsAt:    strfmt.DateTime(startsAt),
		EndsAt:      strfmt.DateTime(endsAt),
	}
	alertParams := alert.NewPostAlertsParams().WithContext(ctx).
		WithAlerts(models.PostableAlerts{pa})

	amclient := NewAlertmanagerClient(alertmanagerURL)

	_, err := amclient.Alert.PostAlerts(alertParams)
	return err
}