MCPcopy
hub / github.com/grafana/tempo / TestDrain_Train_BasicPatternDetection

Function TestDrain_Train_BasicPatternDetection

pkg/drain/drain_test.go:51–86  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

49}
50
51func TestDrain_Train_BasicPatternDetection(t *testing.T) {
52 t.Parallel()
53
54 drain := New("test-tenant", DefaultConfig())
55
56 // Train with similar span names that should form a pattern
57 spanNames := []string{
58 "GET /api/users/123",
59 "GET /api/users/456",
60 "GET /api/users/789",
61 "GET /api/users/101",
62 }
63
64 var clusters []*LogCluster
65 for _, spanName := range spanNames {
66 cluster := drain.Train(spanName)
67 require.NotNil(t, cluster)
68 clusters = append(clusters, cluster)
69 }
70
71 // After training multiple similar patterns, they should cluster together
72 // All clusters should have the same pattern (with parameter markers)
73 uniquePatterns := make(map[string]bool)
74 for _, cluster := range clusters {
75 pattern := cluster.String()
76 uniquePatterns[pattern] = true
77 }
78
79 // Should have fewer unique patterns than input span names (clustering occurred)
80 require.Less(t, len(uniquePatterns), len(spanNames), "patterns should be clustered")
81
82 // Verify pattern contains parameter marker
83 for pattern := range uniquePatterns {
84 require.Contains(t, pattern, "<_>", "pattern should contain parameter marker")
85 }
86}
87
88func TestDrain_Train_MultipleClusters(t *testing.T) {
89 t.Parallel()

Callers

nothing calls this directly

Calls 5

DefaultConfigFunction · 0.85
TrainMethod · 0.80
NewFunction · 0.70
StringMethod · 0.45
LessMethod · 0.45

Tested by

no test coverage detected