PR feedback

pull/640/head
Edward Welch 6 years ago committed by Ed
parent ab2bc8766a
commit d60b6f5440
  1. 2
      pkg/logentry/stages/json.go
  2. 4
      pkg/logentry/stages/match.go
  3. 16
      pkg/logentry/stages/metrics.go
  4. 45
      pkg/logentry/stages/metrics_test.go
  5. 2
      pkg/logentry/stages/regex.go

@ -73,7 +73,7 @@ func newJSONStage(logger log.Logger, config interface{}) (*jsonStage, error) {
return &jsonStage{
cfg: cfg,
expressions: expressions,
logger: log.With(logger, "component", "mutator", "type", "json"),
logger: log.With(logger, "component", "stage", "type", "json"),
}, nil
}

@ -73,8 +73,6 @@ func newMatcherStage(logger log.Logger, jobName *string, config interface{}, reg
}
return &matcherStage{
cfgs: cfg,
logger: logger,
matchers: matchers,
pipeline: pl,
}, nil
@ -82,9 +80,7 @@ func newMatcherStage(logger log.Logger, jobName *string, config interface{}, reg
// matcherStage applies Label matchers to determine if the include stages should be run
type matcherStage struct {
cfgs *MatcherConfig
matchers []*labels.Matcher
logger log.Logger
pipeline Stage
}

@ -26,6 +26,7 @@ const (
MetricTypeHistogram = "histogram"
ErrEmptyMetricsStageConfig = "empty metric stage configuration"
ErrMetricsStageInvalidType = "invalid metric type '%s', metric type must be one of 'counter', 'gauge', or 'histogram'"
)
// MetricConfig is a single metrics configuration.
@ -51,6 +52,13 @@ func validateMetricsConfig(cfg MetricsConfig) error {
cp.Source = &nm
cfg[name] = cp
}
config.MetricType = strings.ToLower(config.MetricType)
if config.MetricType != MetricTypeCounter &&
config.MetricType != MetricTypeGauge &&
config.MetricType != MetricTypeHistogram {
return errors.Errorf(ErrMetricsStageInvalidType, config.MetricType)
}
}
return nil
}
@ -144,7 +152,7 @@ func (m *metricStage) recordCounter(name string, counter *metric.Counters, label
case metric.CounterAdd:
f, err := getFloat(v)
if err != nil || f < 0 {
level.Debug(m.logger).Log("msg", "failed to convert extracted value to float", "metric", name, "err", err)
level.Debug(m.logger).Log("msg", "failed to convert extracted value to positive float", "metric", name, "err", err)
return
}
counter.With(labels).Add(f)
@ -171,7 +179,7 @@ func (m *metricStage) recordGauge(name string, gauge *metric.Gauges, labels mode
case metric.GaugeSet:
f, err := getFloat(v)
if err != nil || f < 0 {
level.Debug(m.logger).Log("msg", "failed to convert extracted value to float", "metric", name, "err", err)
level.Debug(m.logger).Log("msg", "failed to convert extracted value to positive float", "metric", name, "err", err)
return
}
gauge.With(labels).Set(f)
@ -182,14 +190,14 @@ func (m *metricStage) recordGauge(name string, gauge *metric.Gauges, labels mode
case metric.GaugeAdd:
f, err := getFloat(v)
if err != nil || f < 0 {
level.Debug(m.logger).Log("msg", "failed to convert extracted value to float", "metric", name, "err", err)
level.Debug(m.logger).Log("msg", "failed to convert extracted value to positive float", "metric", name, "err", err)
return
}
gauge.With(labels).Add(f)
case metric.GaugeSub:
f, err := getFloat(v)
if err != nil || f < 0 {
level.Debug(m.logger).Log("msg", "failed to convert extracted value to float", "metric", name, "err", err)
level.Debug(m.logger).Log("msg", "failed to convert extracted value to positive float", "metric", name, "err", err)
return
}
gauge.With(labels).Sub(f)

@ -6,6 +6,7 @@ import (
"time"
"github.com/cortexproject/cortex/pkg/util"
"github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/testutil"
"github.com/prometheus/common/model"
@ -59,6 +60,50 @@ func TestMetricsPipeline(t *testing.T) {
}
}
func Test(t *testing.T) {
tests := map[string]struct {
config MetricsConfig
err error
}{
"empty": {
nil,
errors.New(ErrEmptyMetricsStageConfig),
},
"invalid metric type": {
MetricsConfig{
"metric1": MetricConfig{
MetricType: "Piplne",
},
},
errors.Errorf(ErrMetricsStageInvalidType, "piplne"),
},
"valid": {
MetricsConfig{
"metric1": MetricConfig{
MetricType: "Counter",
Description: "some description",
Config: metric.CounterConfig{
Action: "inc",
},
},
},
nil,
},
}
for name, test := range tests {
test := test
t.Run(name, func(t *testing.T) {
t.Parallel()
err := validateMetricsConfig(test.config)
if (err != nil) && (err.Error() != test.err.Error()) {
t.Errorf("Metrics stage validation error, expected error = %v, actual error = %v", test.err, err)
return
}
})
}
}
var labelFoo = model.LabelSet(map[model.LabelName]model.LabelValue{"foo": "bar", "bar": "foo"})
var labelFu = model.LabelSet(map[model.LabelName]model.LabelValue{"fu": "baz", "baz": "fu"})

@ -61,7 +61,7 @@ func newRegexStage(logger log.Logger, config interface{}) (Stage, error) {
return &regexStage{
cfg: cfg,
expression: expression,
logger: log.With(logger, "component", "mutator", "type", "regex"),
logger: log.With(logger, "component", "stage", "type", "regex"),
}, nil
}

Loading…
Cancel
Save