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

Method ExecuteTagValues

pkg/traceql/engine.go:182–267  ·  view source on GitHub ↗
(
	ctx context.Context,
	tag Attribute,
	conditionGroups [][]Condition,
	cb FetchTagValuesCallback,
	fetcher TagValuesFetcher,
	maxConditionGroups int,
)

Source from the content-addressed store, hash-verified

180}
181
182func (e *Engine) ExecuteTagValues(
183 ctx context.Context,
184 tag Attribute,
185 conditionGroups [][]Condition,
186 cb FetchTagValuesCallback,
187 fetcher TagValuesFetcher,
188 maxConditionGroups int,
189) error {
190 ctx, span := tracer.Start(ctx, "traceql.Engine.ExecuteTagValues")
191 defer span.End()
192
193 if maxConditionGroups <= 0 {
194 maxConditionGroups = DefaultMaxConditionGroupsPerTagQuery
195 }
196
197 if len(conditionGroups) == 0 {
198 return fetcher.Fetch(ctx, FetchTagValuesRequest{
199 ConditionGroups: nil,
200 TagName: tag,
201 }, cb)
202 }
203
204 finalConditionGroups := make([][]Condition, 0, len(conditionGroups))
205 for _, group := range conditionGroups {
206 skip := false
207 for _, c := range group {
208 if c.Attribute == tag && c.Op == OpEqual {
209 if len(c.Operands) > 0 {
210 if cb(c.Operands[0]) {
211 return nil // callback signalled stop (limit reached)
212 }
213 }
214 skip = true
215 break
216 }
217 }
218 if !skip {
219 groupCopy := make([]Condition, len(group))
220 copy(groupCopy, group)
221 finalConditionGroups = append(finalConditionGroups, groupCopy)
222 }
223 }
224
225 if len(finalConditionGroups) == 0 {
226 return nil
227 }
228
229 if tag.Scope == AttributeScopeNone && tag.Intrinsic == IntrinsicNone {
230 if (len(finalConditionGroups) * 2) > maxConditionGroups {
231 return fmt.Errorf("%w (limit: %d). Reduce the number of OR conditions in the query", ErrMaxConditionGroupsPerTagQueryReached, maxConditionGroups)
232 }
233 finalGroupOne := make([][]Condition, len(finalConditionGroups))
234 finalGroupTwo := make([][]Condition, len(finalConditionGroups))
235 for i := range finalConditionGroups {
236 tagResource := tag
237 tagResource.Scope = AttributeScopeResource
238 tagSpan := tag
239 tagSpan.Scope = AttributeScopeSpan

Callers 5

tagValuesRunnerFunction · 0.95
SearchTagValuesV2Method · 0.95
TestExecuteTagValuesFunction · 0.95

Calls 3

StartMethod · 0.65
FetchMethod · 0.65
StringMethod · 0.45

Tested by 3

tagValuesRunnerFunction · 0.76
TestExecuteTagValuesFunction · 0.76