Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
f9c19e0
tsdb: Tidy up some test code
bboreham Jun 29, 2022
d3e1f03
promql: refactor BenchmarkRangeQuery so we can re-use test cases
bboreham Jul 10, 2022
e3e661d
promql: add test for race conditions in query engine
bboreham Jul 10, 2022
304f565
labels: allow Builder to set blank values
bboreham Jul 18, 2022
a0391eb
model/labels: Make Labels type a struct
bboreham Dec 27, 2021
1fbae4d
New methods on labels.Labels to work without access to internals
bboreham May 26, 2022
25ba899
Update package labels tests for new labels.Labels type
bboreham May 26, 2022
17c0c53
Add SimpleBuilder for Labels
bboreham Jul 4, 2022
73ada9b
model/labels: add a basic test for SimpleBuilder
bboreham Jul 10, 2022
db801d7
labels: add tests for Filter
bboreham Jun 26, 2022
4fc73e0
labels: test FromStrings more cleanly
bboreham Jun 26, 2022
be68f6a
Update package model/relabel for new labels.Labels type
bboreham Mar 9, 2022
ba8d0fd
Update package model/relabel tests for new labels.Labels type
bboreham Mar 9, 2022
7ca8358
Update package model/textparse for new labels.Labels type
bboreham Mar 9, 2022
05f890c
Update package model/textparse tests for new labels.Labels type
bboreham Mar 9, 2022
c0d13ca
Update package config for new labels.Labels type
bboreham Mar 9, 2022
e909023
Update package tsdb/index for new labels.Labels type
bboreham Mar 9, 2022
19fb698
tsdb/index: use SimpleBuilder to create Labels
bboreham Jun 28, 2022
56a2379
Update package tsdb/index tests for new labels.Labels type
bboreham Mar 9, 2022
9fb8372
tsdb/index/index_test.go: need to copy labels in case they change
bboreham Jul 4, 2022
9769219
Update package tsdb/agent for new labels.Labels type
bboreham Feb 20, 2022
1e911aa
Update package tsdb/test for new labels.Labels type
bboreham Feb 20, 2022
ce1aa5e
Update package tsdb for new labels.Labels type
bboreham Mar 9, 2022
bea7c8d
Update package tsdb/record for new labels.Labels type
bboreham Jun 28, 2022
65d9739
Update package tsdb tests for new labels.Labels type
bboreham Mar 9, 2022
b1933a8
Update package storage for new labels.Labels type
bboreham Mar 9, 2022
21cdf8c
Update package promql for new labels.Labels type
bboreham Mar 9, 2022
bd55209
Update package promql tests for new labels.Labels type
bboreham Mar 9, 2022
e1c5632
Update package notifier for new labels.Labels type
bboreham Mar 9, 2022
e75a295
Update package scrape for new labels.Labels type
bboreham Mar 9, 2022
650c05b
Update package scrape tests for new labels.Labels type
bboreham May 30, 2022
800e2b6
Update package storage/remote for new labels.Labels type
bboreham Mar 9, 2022
6fe7cd1
Update package storage/remote tests for new labels.Labels type
bboreham Mar 9, 2022
178d836
Update package rules for new labels.Labels type
bboreham Feb 27, 2022
63b288c
Update package web for new labels.Labels type
bboreham Feb 27, 2022
b2ce8c7
Update package web tests for new labels.Labels type
bboreham Feb 27, 2022
19eb274
Update package cmd/promtool for new labels.Labels type
bboreham Feb 27, 2022
2dd3e9b
Update package cmd/promtool tests for new labels.Labels type
bboreham Feb 27, 2022
034113f
labels: use SimpleBuilder in ReadLabels
bboreham Jun 26, 2022
8cb8959
labels: tweak EmptyLabels() to be non-nil
bboreham Nov 27, 2022
74a42a1
Couple more uses of labels.EmptyLabels()
bboreham Nov 27, 2022
9816cea
Use labels.FromStrings instead of raw struct
bboreham Nov 27, 2022
580cb9f
tsdb: fix up some newer code for Labels data structure
bboreham Nov 27, 2022
69cc4b3
textparse: fix up protobuf parser for Labels data structure
bboreham Nov 27, 2022
527ec8f
relabel: fix up some newer code for Labels data structure
bboreham Nov 27, 2022
f5b9815
labels: rename SimpleBuilder to ScratchBuilder.
bboreham Nov 27, 2022
5e9c1e7
labels: allow pre-allocation of ScratchBuilder
bboreham Nov 27, 2022
afae4da
labels: remove Filter method
bboreham Nov 27, 2022
e8b0f7c
labels: remove Merge() method
bboreham Nov 27, 2022
1f2d9b0
labels: apply suggestions from code review
bboreham Nov 27, 2022
fcde5b4
labels: remove Builder.SetAnyValue method
bboreham Nov 27, 2022
5f3a2ed
web/api tests: don't sort individual labels
bboreham Nov 27, 2022
5e3883b
labels: rename method to Validate
bboreham Dec 13, 2022
aeb5c23
labels: fix up for newer code
bboreham Dec 13, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cmd/promtool/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -631,9 +631,9 @@ func checkRules(filename string, lintSettings lintConfig) (int, []error) {
errMessage := fmt.Sprintf("%d duplicate rule(s) found.\n", len(dRules))
for _, n := range dRules {
errMessage += fmt.Sprintf("Metric: %s\nLabel(s):\n", n.metric)
for _, l := range n.label {
n.label.Range(func(l labels.Label) {
errMessage += fmt.Sprintf("\t%s: %s\n", l.Name, l.Value)
}
})
}
errMessage += "Might cause inconsistency while recording expressions"
return 0, []error{fmt.Errorf("%w %s", lintError, errMessage)}
Expand Down
7 changes: 4 additions & 3 deletions cmd/promtool/rules.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,14 +158,15 @@ func (importer *ruleImporter) importRule(ctx context.Context, ruleExpr, ruleName

// Setting the rule labels after the output of the query,
// so they can override query output.
for _, l := range ruleLabels {
ruleLabels.Range(func(l labels.Label) {
lb.Set(l.Name, l.Value)
}
})

lb.Set(labels.MetricName, ruleName)
lbls := lb.Labels(labels.EmptyLabels())

for _, value := range sample.Values {
if err := app.add(ctx, lb.Labels(nil), timestamp.FromTime(value.Timestamp.Time()), float64(value.Value)); err != nil {
if err := app.add(ctx, lbls, timestamp.FromTime(value.Timestamp.Time()), float64(value.Value)); err != nil {
return fmt.Errorf("add: %w", err)
}
}
Expand Down
10 changes: 5 additions & 5 deletions cmd/promtool/rules_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func TestBackfillRuleIntegration(t *testing.T) {
require.Equal(t, 1, len(gRules))
require.Equal(t, "rule1", gRules[0].Name())
require.Equal(t, "ruleExpr", gRules[0].Query().String())
require.Equal(t, 1, len(gRules[0].Labels()))
require.Equal(t, 1, gRules[0].Labels().Len())

group2 := ruleImporter.groups[path2+";group2"]
require.NotNil(t, group2)
Expand All @@ -109,7 +109,7 @@ func TestBackfillRuleIntegration(t *testing.T) {
require.Equal(t, 2, len(g2Rules))
require.Equal(t, "grp2_rule1", g2Rules[0].Name())
require.Equal(t, "grp2_rule1_expr", g2Rules[0].Query().String())
require.Equal(t, 0, len(g2Rules[0].Labels()))
require.Equal(t, 0, g2Rules[0].Labels().Len())

// Backfill all recording rules then check the blocks to confirm the correct data was created.
errs = ruleImporter.importAll(ctx)
Expand All @@ -132,12 +132,12 @@ func TestBackfillRuleIntegration(t *testing.T) {
for selectedSeries.Next() {
seriesCount++
series := selectedSeries.At()
if len(series.Labels()) != 3 {
require.Equal(t, 2, len(series.Labels()))
if series.Labels().Len() != 3 {
require.Equal(t, 2, series.Labels().Len())
x := labels.FromStrings("__name__", "grp2_rule1", "name1", "val1")
require.Equal(t, x, series.Labels())
} else {
require.Equal(t, 3, len(series.Labels()))
require.Equal(t, 3, series.Labels().Len())
}
it := series.Iterator(nil)
for it.Next() == chunkenc.ValFloat {
Expand Down
19 changes: 10 additions & 9 deletions cmd/promtool/tsdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ func readPrometheusLabels(r io.Reader, n int) ([]labels.Labels, error) {
i := 0

for scanner.Scan() && i < n {
m := make(labels.Labels, 0, 10)
m := make([]labels.Label, 0, 10)

r := strings.NewReplacer("\"", "", "{", "", "}", "")
s := r.Replace(scanner.Text())
Expand All @@ -325,13 +325,12 @@ func readPrometheusLabels(r io.Reader, n int) ([]labels.Labels, error) {
split := strings.Split(labelChunk, ":")
m = append(m, labels.Label{Name: split[0], Value: split[1]})
}
// Order of the k/v labels matters, don't assume we'll always receive them already sorted.
sort.Sort(m)
h := m.Hash()
ml := labels.New(m...) // This sorts by name - order of the k/v labels matters, don't assume we'll always receive them already sorted.
h := ml.Hash()
if _, ok := hashes[h]; ok {
continue
}
mets = append(mets, m)
mets = append(mets, ml)
hashes[h] = struct{}{}
i++
}
Expand Down Expand Up @@ -472,19 +471,20 @@ func analyzeBlock(path, blockID string, limit int, runExtended bool) error {
}
lbls := labels.Labels{}
chks := []chunks.Meta{}
builder := labels.ScratchBuilder{}
for p.Next() {
if err = ir.Series(p.At(), &lbls, &chks); err != nil {
if err = ir.Series(p.At(), &builder, &lbls, &chks); err != nil {
return err
}
// Amount of the block time range not covered by this series.
uncovered := uint64(meta.MaxTime-meta.MinTime) - uint64(chks[len(chks)-1].MaxTime-chks[0].MinTime)
for _, lbl := range lbls {
lbls.Range(func(lbl labels.Label) {
key := lbl.Name + "=" + lbl.Value
labelsUncovered[lbl.Name] += uncovered
labelpairsUncovered[key] += uncovered
labelpairsCount[key]++
entries++
}
})
}
if p.Err() != nil {
return p.Err()
Expand Down Expand Up @@ -589,10 +589,11 @@ func analyzeCompaction(block tsdb.BlockReader, indexr tsdb.IndexReader) (err err
nBuckets := 10
histogram := make([]int, nBuckets)
totalChunks := 0
var builder labels.ScratchBuilder
for postingsr.Next() {
lbsl := labels.Labels{}
var chks []chunks.Meta
if err := indexr.Series(postingsr.At(), &lbsl, &chks); err != nil {
if err := indexr.Series(postingsr.At(), &builder, &lbsl, &chks); err != nil {
return err
}

Expand Down
4 changes: 2 additions & 2 deletions cmd/promtool/unittest.go
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,8 @@ func (tg *testGroup) test(evalInterval time.Duration, groupOrderMap map[string]i
for _, a := range ar.ActiveAlerts() {
if a.State == rules.StateFiring {
alerts = append(alerts, labelAndAnnotation{
Labels: append(labels.Labels{}, a.Labels...),
Annotations: append(labels.Labels{}, a.Annotations...),
Labels: a.Labels.Copy(),
Annotations: a.Annotations.Copy(),
})
}
}
Expand Down
16 changes: 10 additions & 6 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ func Load(s string, expandExternalLabels bool, logger log.Logger) (*Config, erro
return cfg, nil
}

for i, v := range cfg.GlobalConfig.ExternalLabels {
b := labels.ScratchBuilder{}
cfg.GlobalConfig.ExternalLabels.Range(func(v labels.Label) {
newV := os.Expand(v.Value, func(s string) string {
if s == "$" {
return "$"
Expand All @@ -93,10 +94,10 @@ func Load(s string, expandExternalLabels bool, logger log.Logger) (*Config, erro
})
if newV != v.Value {
level.Debug(logger).Log("msg", "External label replaced", "label", v.Name, "input", v.Value, "output", newV)
v.Value = newV
cfg.GlobalConfig.ExternalLabels[i] = v
}
}
b.Add(v.Name, newV)
})
cfg.GlobalConfig.ExternalLabels = b.Labels()
return cfg, nil
}

Expand Down Expand Up @@ -361,13 +362,16 @@ func (c *GlobalConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
return err
}

for _, l := range gc.ExternalLabels {
if err := gc.ExternalLabels.Validate(func(l labels.Label) error {
if !model.LabelName(l.Name).IsValid() {
return fmt.Errorf("%q is not a valid label name", l.Name)
}
if !model.LabelValue(l.Value).IsValid() {
return fmt.Errorf("%q is not a valid label value", l.Value)
}
return nil
}); err != nil {
return err
}

// First set the correct scrape interval, then check that the timeout
Expand All @@ -394,7 +398,7 @@ func (c *GlobalConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {

// isZero returns true iff the global config is the zero value.
func (c *GlobalConfig) isZero() bool {
return c.ExternalLabels == nil &&
return c.ExternalLabels.IsEmpty() &&
c.ScrapeInterval == 0 &&
c.ScrapeTimeout == 0 &&
c.EvaluationInterval == 0 &&
Expand Down
Loading