Files
76c2c85b97 [Generator] Add DRAIN span_name sanitizer (#6098)
* [Generator] Add DRAIN span_name sanitizer

* Fix linter

* Fix formatting

* Update default manifest

* Fix build error in update-fixtures

* Remove bad test

* Remove misleading comment

* Add per-tenant override for drain mode

* Do a machines job

* Address PR feedback

* Address PR review: rename drain_mode config and improve sanitizer

- Rename `drain_mode` to `span_name_sanitization` across all config,
  legacy config, interfaces, and overrides for better user-facing clarity
- Add explicit default value "disabled" in RegisterFlagsAndApplyDefaults
- Add ValidateSpanNameSanitization function in validation/fields.go
- Rename metrics to remove DRAIN reference:
  `drain_spans_compacted_total` -> `spans_sanitized_total`
  `post_drain_demand_estimate` -> `post_sanitization_demand_estimate`
- Pass configured staleDuration to NewDrainSanitizer instead of
  hardcoded 15min, consistent with other registry components
- Extract "span_name" magic string to labelSpanName constant
- Update all tests with new names and signatures

* Update manifest

* Use empty string as disabled

* Update CHANGELOG.md

Co-authored-by: Suraj Nath <[email protected]>

* Update manifest

---------

Co-authored-by: Suraj Nath <[email protected]>
2026-02-22 00:55:22 -08:00

62 lines
1.4 KiB
Go

package main
import (
"encoding/json"
"os"
"path/filepath"
"strings"
"testing"
"github.com/grafana/tempo/pkg/drain"
"github.com/stretchr/testify/require"
)
func TestFixtures(t *testing.T) {
files, err := os.ReadDir("..")
if err != nil {
t.Fatalf("failed to read testdata directory: %v", err)
}
for _, file := range files {
if file.IsDir() {
continue
}
if !strings.HasSuffix(file.Name(), ".json") {
continue
}
t.Run(file.Name(), func(t *testing.T) {
linesJSON, err := os.ReadFile(filepath.Join("..", file.Name()))
if err != nil {
t.Fatalf("failed to read file: %v", err)
}
var lines []string
err = json.Unmarshal(linesJSON, &lines)
if err != nil {
t.Fatalf("failed to unmarshal file: %v", err)
}
drain := drain.New("test-tenant", drain.DefaultConfig())
patternMapping := make(map[string]string)
for _, line := range lines {
cluster := drain.Train(line)
if cluster == nil {
patternMapping[line] = "<nil> (possibly too many tokens)"
} else {
patternMapping[line] = cluster.String()
}
}
expectedBytes, err := os.ReadFile(filepath.Join("..", strings.TrimSuffix(file.Name(), ".json")+".drain"))
if err != nil {
t.Fatalf("failed to read file: %v", err)
}
var expected TestData
err = json.Unmarshal(expectedBytes, &expected)
if err != nil {
t.Fatalf("failed to unmarshal file: %v", err)
}
require.Equal(t, expected.PatternMapping, patternMapping)
})
}
}