(res *parquetquery.IteratorResult)
| 2561 | } |
| 2562 | |
| 2563 | func (c *spanCollector) KeepGroup(res *parquetquery.IteratorResult) bool { |
| 2564 | var sp *span |
| 2565 | // look for existing span first. this occurs on the second pass |
| 2566 | for _, e := range res.OtherEntries { |
| 2567 | if v, ok := e.Value.(*span); ok { |
| 2568 | sp = v |
| 2569 | break |
| 2570 | } |
| 2571 | } |
| 2572 | |
| 2573 | // if not found create a new one |
| 2574 | if sp == nil { |
| 2575 | sp = getSpan() |
| 2576 | sp.rowNum = res.RowNumber |
| 2577 | } |
| 2578 | |
| 2579 | for _, e := range res.OtherEntries { |
| 2580 | if v, ok := e.Value.(traceql.Static); ok { |
| 2581 | sp.addSpanAttr(newSpanAttr(e.Key), v) |
| 2582 | } |
| 2583 | } |
| 2584 | |
| 2585 | var durationNanos uint64 |
| 2586 | |
| 2587 | // Merge all individual columns into the span |
| 2588 | for _, kv := range res.Entries { |
| 2589 | switch kv.Key { |
| 2590 | case columnPathSpanID: |
| 2591 | sp.id = kv.Value.ByteArray() |
| 2592 | sp.addSpanAttr(traceql.IntrinsicSpanIDAttribute, traceql.NewStaticString(util.SpanIDToHexString(kv.Value.ByteArray()))) |
| 2593 | case columnPathSpanParentSpanID: |
| 2594 | sp.addSpanAttr(traceql.IntrinsicParentIDAttribute, traceql.NewStaticString(util.SpanIDToHexString(kv.Value.ByteArray()))) |
| 2595 | case columnPathSpanStartTime: |
| 2596 | sp.startTimeUnixNanos = kv.Value.Uint64() |
| 2597 | case columnPathSpanDuration: |
| 2598 | durationNanos = kv.Value.Uint64() |
| 2599 | sp.durationNanos = durationNanos |
| 2600 | sp.addSpanAttr(traceql.IntrinsicDurationAttribute, traceql.NewStaticDuration(time.Duration(durationNanos))) |
| 2601 | case columnPathSpanName: |
| 2602 | sp.addSpanAttr(traceql.IntrinsicNameAttribute, traceql.NewStaticString(unsafeToString(kv.Value.Bytes()))) |
| 2603 | case columnPathSpanStatusCode: |
| 2604 | // Map OTLP status code back to TraceQL enum. |
| 2605 | // For other values, use the raw integer. |
| 2606 | var status traceql.Status |
| 2607 | switch kv.Value.Uint64() { |
| 2608 | case uint64(v1.Status_STATUS_CODE_UNSET): |
| 2609 | status = traceql.StatusUnset |
| 2610 | case uint64(v1.Status_STATUS_CODE_OK): |
| 2611 | status = traceql.StatusOk |
| 2612 | case uint64(v1.Status_STATUS_CODE_ERROR): |
| 2613 | status = traceql.StatusError |
| 2614 | default: |
| 2615 | status = traceql.Status(kv.Value.Uint64()) |
| 2616 | } |
| 2617 | sp.addSpanAttr(traceql.IntrinsicStatusAttribute, traceql.NewStaticStatus(status)) |
| 2618 | case columnPathSpanStatusMessage: |
| 2619 | sp.addSpanAttr(traceql.IntrinsicStatusMessageAttribute, traceql.NewStaticString(unsafeToString(kv.Value.Bytes()))) |
| 2620 | case columnPathSpanKind: |
nothing calls this directly
no test coverage detected