@@ -101,5 +101,92 @@ func TestParseQuery(t *testing.T) {
101101 require .Equal (t , q .BucketAggs [1 ].Settings .Get ("min_doc_count" ).MustInt (), 0 )
102102 require .Equal (t , q .BucketAggs [1 ].Settings .Get ("trimEdges" ).MustInt (), 0 )
103103 })
104+
105+ t .Run ("Should normalize exemplar-style bare trace id links" , func (t * testing.T ) {
106+ traceID := "75d7a6e5c07de26e0238cd17a281a190"
107+ body := `{
108+ "query": "` + traceID + `",
109+ "queryType": "traces",
110+ "metrics": [{ "type": "logs", "id": "3", "settings": { "limit": "100" } }],
111+ "bucketAggs": [{ "type": "date_histogram", "field": "@timestamp", "id": "2" }]
112+ }`
113+ dataQuery , err := newDataQuery (body )
114+ require .NoError (t , err )
115+ queries , err := parseQuery (dataQuery .Queries )
116+ require .NoError (t , err )
117+ require .Len (t , queries , 1 )
118+
119+ q := queries [0 ]
120+ require .Equal (t , "trace_id:" + traceID , q .RawQuery )
121+ require .Equal (t , tracesType , q .QueryType )
122+ require .Len (t , q .Metrics , 1 )
123+ require .Equal (t , tracesType , q .Metrics [0 ].Type )
124+ require .Equal (t , "3" , q .Metrics [0 ].ID )
125+ require .Equal (t , "100" , q .Metrics [0 ].Settings .Get ("limit" ).MustString ())
126+ require .Empty (t , q .BucketAggs )
127+ })
128+
129+ t .Run ("Should create a traces metric for bare trace id links without metrics" , func (t * testing.T ) {
130+ traceID := "75d7a6e5c07de26e0238cd17a281a190"
131+ body := `{
132+ "query": "` + traceID + `",
133+ "metrics": [],
134+ "bucketAggs": []
135+ }`
136+ dataQuery , err := newDataQuery (body )
137+ require .NoError (t , err )
138+ queries , err := parseQuery (dataQuery .Queries )
139+ require .NoError (t , err )
140+ require .Len (t , queries , 1 )
141+
142+ q := queries [0 ]
143+ require .Equal (t , "trace_id:" + traceID , q .RawQuery )
144+ require .Equal (t , tracesType , q .QueryType )
145+ require .Len (t , q .Metrics , 1 )
146+ require .Equal (t , tracesType , q .Metrics [0 ].Type )
147+ require .Equal (t , "1" , q .Metrics [0 ].ID )
148+ require .Equal (t , "1000" , q .Metrics [0 ].Settings .Get ("limit" ).MustString ())
149+ })
150+
151+ t .Run ("Should not normalize regular metric queries with bare hex filters" , func (t * testing.T ) {
152+ traceID := "75d7a6e5c07de26e0238cd17a281a190"
153+ body := `{
154+ "query": "` + traceID + `",
155+ "metrics": [{ "type": "count", "id": "1" }],
156+ "bucketAggs": [{ "type": "date_histogram", "field": "@timestamp", "id": "2" }]
157+ }`
158+ dataQuery , err := newDataQuery (body )
159+ require .NoError (t , err )
160+ queries , err := parseQuery (dataQuery .Queries )
161+ require .NoError (t , err )
162+ require .Len (t , queries , 1 )
163+
164+ q := queries [0 ]
165+ require .Equal (t , traceID , q .RawQuery )
166+ require .Empty (t , q .QueryType )
167+ require .Len (t , q .Metrics , 1 )
168+ require .Equal (t , countType , q .Metrics [0 ].Type )
169+ require .Len (t , q .BucketAggs , 1 )
170+ })
171+
172+ t .Run ("Should not normalize span-specific log correlation queries" , func (t * testing.T ) {
173+ traceID := "75d7a6e5c07de26e0238cd17a281a190"
174+ body := `{
175+ "query": "trace_id:` + traceID + ` AND span_id:cccccccccccccccc",
176+ "metrics": [{ "type": "logs", "id": "3", "settings": { "limit": "100" } }],
177+ "bucketAggs": []
178+ }`
179+ dataQuery , err := newDataQuery (body )
180+ require .NoError (t , err )
181+ queries , err := parseQuery (dataQuery .Queries )
182+ require .NoError (t , err )
183+ require .Len (t , queries , 1 )
184+
185+ q := queries [0 ]
186+ require .Equal (t , "trace_id:" + traceID + " AND span_id:cccccccccccccccc" , q .RawQuery )
187+ require .Empty (t , q .QueryType )
188+ require .Len (t , q .Metrics , 1 )
189+ require .Equal (t , logsType , q .Metrics [0 ].Type )
190+ })
104191 })
105192}
0 commit comments