Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 19 additions & 31 deletions controlplane/src/core/repositories/analytics/TraceRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,52 +49,40 @@ 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}'

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);
Expand Down