Skip to content

Commit

Permalink
Remove functions from utils.go
Browse files Browse the repository at this point in the history
Signed-off-by: George Robinson <george.robinson@grafana.com>
  • Loading branch information
grobinson-grafana committed Sep 25, 2023
1 parent 1efe79b commit 5f49101
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 51 deletions.
37 changes: 28 additions & 9 deletions cli/alert_add.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ package cli

import (
"context"
"errors"
"fmt"
"strconv"
"time"
Expand All @@ -24,6 +25,8 @@ import (

"github.com/prometheus/alertmanager/api/v2/client/alert"
"github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/alertmanager/matchers/compat"
"github.com/prometheus/alertmanager/pkg/labels"
)

type alertAddCmd struct {
Expand Down Expand Up @@ -74,29 +77,45 @@ func (a *alertAddCmd) addAlert(ctx context.Context, _ *kingpin.ParseContext) err
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 := parseLabels([]string{a.labels[0]}); err != nil {
if _, err := compat.Matcher(a.labels[0]); err != nil {
a.labels[0] = fmt.Sprintf("alertname=%s", strconv.Quote(a.labels[0]))
}
}

labels, err := parseLabels(a.labels)
if err != nil {
return err
ls := make(models.LabelSet, len(a.labels))
for _, l := range a.labels {
matcher, err := compat.Matcher(l)
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, err := parseLabels(a.annotations)
if err != nil {
return err
annotations := make(models.LabelSet, len(a.annotations))
for _, a := range a.annotations {
matcher, err := compat.Matcher(a)
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
Expand All @@ -106,7 +125,7 @@ func (a *alertAddCmd) addAlert(ctx context.Context, _ *kingpin.ParseContext) err
pa := &models.PostableAlert{
Alert: models.Alert{
GeneratorURL: strfmt.URI(a.generatorURL),
Labels: labels,
Labels: ls,
},
Annotations: annotations,
StartsAt: strfmt.DateTime(startsAt),
Expand All @@ -117,6 +136,6 @@ func (a *alertAddCmd) addAlert(ctx context.Context, _ *kingpin.ParseContext) err

amclient := NewAlertmanagerClient(alertmanagerURL)

_, err = amclient.Alert.PostAlerts(alertParams)
_, err := amclient.Alert.PostAlerts(alertParams)
return err
}
15 changes: 10 additions & 5 deletions cli/silence_add.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import (

"github.com/prometheus/alertmanager/api/v2/client/silence"
"github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/alertmanager/matchers/compat"
"github.com/prometheus/alertmanager/pkg/labels"
)

func username() string {
Expand Down Expand Up @@ -93,17 +95,20 @@ func (c *silenceAddCmd) add(ctx context.Context, _ *kingpin.ParseContext) error
// If the parser fails then we likely don't have a (=|=~|!=|!~) so lets
// assume that the user wants alertname=<arg> and prepend `alertname=`
// to the front.
_, err := parseMatchers([]string{c.matchers[0]})
_, err := compat.Matcher(c.matchers[0])
if err != nil {
c.matchers[0] = fmt.Sprintf("alertname=%s", strconv.Quote(c.matchers[0]))
}
}

matchers, err := parseMatchers(c.matchers)
if err != nil {
return err
matchers := make([]labels.Matcher, 0, len(c.matchers))
for _, s := range c.matchers {
m, err := compat.Matcher(s)
if err != nil {
return err
}
matchers = append(matchers, *m)
}

if len(matchers) < 1 {
return fmt.Errorf("no matchers specified")
}
Expand Down
3 changes: 2 additions & 1 deletion cli/silence_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/prometheus/alertmanager/api/v2/client/silence"
"github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/alertmanager/cli/format"
"github.com/prometheus/alertmanager/matchers/compat"
)

type silenceQueryCmd struct {
Expand Down Expand Up @@ -98,7 +99,7 @@ func (c *silenceQueryCmd) query(ctx context.Context, _ *kingpin.ParseContext) er
// If the parser fails then we likely don't have a (=|=~|!=|!~) so lets
// assume that the user wants alertname=<arg> and prepend `alertname=`
// to the front.
_, err := parseMatchers([]string{c.matchers[0]})
_, err := compat.Matcher(c.matchers[0])
if err != nil {
c.matchers[0] = fmt.Sprintf("alertname=%s", strconv.Quote(c.matchers[0]))
}
Expand Down
15 changes: 12 additions & 3 deletions cli/test_routing.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import (

"github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/alertmanager/dispatch"
"github.com/prometheus/alertmanager/matchers/compat"
"github.com/prometheus/alertmanager/pkg/labels"
)

const routingTestHelp = `Test alert routing
Expand Down Expand Up @@ -80,9 +82,16 @@ func (c *routingShow) routingTestAction(ctx context.Context, _ *kingpin.ParseCon
mainRoute := dispatch.NewRoute(cfg.Route, nil)

// Parse labels to LabelSet.
ls, err := parseLabels(c.labels)
if err != nil {
kingpin.Fatalf("Failed to parse labels: %v\n", err)
ls := make(models.LabelSet, len(c.labels))
for _, l := range c.labels {
matcher, err := compat.Matcher(l)
if err != nil {
kingpin.Fatalf("Failed to parse labels: %v\n", err)
}
if matcher.Type != labels.MatchEqual {
kingpin.Fatalf("%s\n", "Labels must be specified as key=value pairs")
}
ls[matcher.Name] = matcher.Value
}

if c.debugTree {
Expand Down
33 changes: 0 additions & 33 deletions cli/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,9 @@ import (
"github.com/prometheus/alertmanager/api/v2/client/general"
"github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/alertmanager/config"
"github.com/prometheus/alertmanager/matchers/compat"
"github.com/prometheus/alertmanager/pkg/labels"
)

// parseMatchers parses a list of matchers (cli arguments).
func parseMatchers(inputMatchers []string) ([]labels.Matcher, error) {
matchers := make([]labels.Matcher, 0, len(inputMatchers))
for _, s := range inputMatchers {
matcher, err := compat.Matcher(s)
if err != nil {
return []labels.Matcher{}, err
}
matchers = append(matchers, *matcher)
}
return matchers, nil
}

// getRemoteAlertmanagerConfigStatus returns status responsecontaining configuration from remote Alertmanager
func getRemoteAlertmanagerConfigStatus(ctx context.Context, alertmanagerURL *url.URL) (*models.AlertmanagerStatus, error) {
amclient := NewAlertmanagerClient(alertmanagerURL)
Expand Down Expand Up @@ -92,25 +78,6 @@ func convertClientToCommonLabelSet(cls models.LabelSet) model.LabelSet {
return mls
}

// parseLabels parses a list of labels (cli arguments).
func parseLabels(inputLabels []string) (models.LabelSet, error) {
labelSet := make(models.LabelSet, len(inputLabels))

for _, l := range inputLabels {
matcher, err := compat.Matcher(l)
if err != nil {
return models.LabelSet{}, err
}
if matcher.Type != labels.MatchEqual {
return models.LabelSet{}, errors.New("labels must be specified as key=value pairs")
}

labelSet[matcher.Name] = matcher.Value
}

return labelSet, nil
}

// TypeMatchers only valid for when you are going to add a silence
func TypeMatchers(matchers []labels.Matcher) models.Matchers {
typeMatchers := make(models.Matchers, len(matchers))
Expand Down

0 comments on commit 5f49101

Please sign in to comment.