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
}