diff --git a/controlplane/src/core/repositories/analytics/TraceRepository.ts b/controlplane/src/core/repositories/analytics/TraceRepository.ts index 4b740d5b2b..594003f7b8 100644 --- a/controlplane/src/core/repositories/analytics/TraceRepository.ts +++ b/controlplane/src/core/repositories/analytics/TraceRepository.ts @@ -49,38 +49,14 @@ export class TraceRepository { SpanAttributes['wg.federated_graph.id'] as attrFederatedGraphId `; - const getStartEndQuery = ` - WITH '${traceID}' AS trace_id, - ( - SELECT min(Start) - FROM ${this.client.database}.otel_traces_trace_id_ts - WHERE TraceId = trace_id - ) AS start, - ( - SELECT max(End) + 1 - FROM ${this.client.database}.otel_traces_trace_id_ts - WHERE TraceId = trace_id - ) AS end - SELECT start, end - `; - - const startEndResults = await this.client.queryPromise(getStartEndQuery); - - if (!Array.isArray(startEndResults)) { - return []; - } - - const start = startEndResults[0].start; - const end = startEndResults[0].end; - const query = ` WITH RECURSIVE spans AS ( SELECT ${columns} FROM ${this.client.database}.otel_traces WHERE - (TraceId = '${traceID}') - AND (Timestamp >= '${start}') - AND (Timestamp <= '${end}') + (TraceId = trace_id) + AND (Timestamp >= start) + AND (Timestamp <= end) AND SpanAttributes['wg.organization.id'] = '${organizationID}' AND SpanAttributes['wg.federated_graph.id'] = '${federatedGraphId}' AND spanId = '${spanID}' @@ -88,13 +64,25 @@ export class TraceRepository { UNION ALL SELECT ${columns} - FROM ${this.client.database}.otel_traces t - INNER JOIN spans s ON t.ParentSpanId = s.spanId AND t.TraceId = s.traceId - ) + FROM spans s, ${this.client.database}.otel_traces as t + WHERE t.ParentSpanId = s.spanId AND t.TraceId = s.traceId + ), + '${traceID}' AS trace_id, + ( + SELECT min(Start) + FROM ${this.client.database}.otel_traces_trace_id_ts + WHERE TraceId = trace_id + ) AS start, + ( + SELECT max(End) + 1 + FROM ${this.client.database}.otel_traces_trace_id_ts + WHERE TraceId = trace_id + ) AS end SELECT * FROM spans ORDER BY timestamp ASC - LIMIT 1000 + LIMIT 100 + SETTINGS allow_experimental_analyzer = 1 `; const results = await this.client.queryPromise(query);