Skip to content

Commit 97d84e1

Browse files
committed
Convert getDetailedTraceSummary to use the new ancestor override stuff
1 parent 0d1311c commit 97d84e1

File tree

2 files changed

+58
-13
lines changed

2 files changed

+58
-13
lines changed

apps/webapp/app/v3/eventRepository.server.ts

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,8 @@ export class EventRepository {
809809
}
810810
}
811811

812+
logger.debug("[getTraceDetailedSummary] preparedEvents before merge", { preparedEvents });
813+
812814
for (const event of preparedEvents) {
813815
const existingEvent = eventsBySpanId.get(event.spanId);
814816

@@ -817,13 +819,36 @@ export class EventRepository {
817819
continue;
818820
}
819821

822+
// This is an invisible event, and we just want to keep the original event but concat together
823+
// the event.events with the existingEvent.events
824+
if (event.kind === "UNSPECIFIED") {
825+
eventsBySpanId.set(event.spanId, {
826+
...existingEvent,
827+
events: [...(existingEvent.events ?? []), ...(event.events ?? [])],
828+
});
829+
continue;
830+
}
831+
820832
if (event.isCancelled || !event.isPartial) {
821-
eventsBySpanId.set(event.spanId, event);
833+
// If we have a cancelled event and an existing partial event,
834+
// merge them: use cancelled event data but preserve style from the partial event
835+
if (event.isCancelled && existingEvent.isPartial && !existingEvent.isCancelled) {
836+
const mergedEvent: PreparedDetailedEvent = {
837+
...event, // Use cancelled event as base (has correct timing, status, events)
838+
// Preserve style from the original partial event
839+
style: existingEvent.style,
840+
events: [...(existingEvent.events ?? []), ...(event.events ?? [])],
841+
};
842+
eventsBySpanId.set(event.spanId, mergedEvent);
843+
continue;
844+
}
822845
}
823846
}
824847

825848
preparedEvents = Array.from(eventsBySpanId.values());
826849

850+
logger.debug("[getTraceDetailedSummary] preparedEvents after merge", { preparedEvents });
851+
827852
if (!rootSpanId) {
828853
return;
829854
}
@@ -833,12 +858,27 @@ export class EventRepository {
833858

834859
// First pass: create all span detailed summaries
835860
for (const event of preparedEvents) {
836-
const ancestorCancelled = isAncestorCancelled(eventsBySpanId, event.spanId);
837-
const duration = calculateDurationIfAncestorIsCancelled(
838-
eventsBySpanId,
839-
event.spanId,
840-
event.duration
841-
);
861+
const overrides = getAncestorOverrides({
862+
spansById: eventsBySpanId,
863+
span: event,
864+
});
865+
866+
if (overrides) {
867+
logger.debug("[getTraceDetailedSummary] overrides", { overrides, event });
868+
}
869+
870+
const ancestorCancelled = overrides?.isCancelled ?? false;
871+
const ancestorIsError = overrides?.isError ?? false;
872+
const duration = overrides?.duration ?? event.duration;
873+
const events = [...(overrides?.events ?? []), ...(event.events ?? [])];
874+
const isPartial = ancestorCancelled || ancestorIsError ? false : event.isPartial;
875+
const isCancelled =
876+
event.isCancelled === true ? true : event.isPartial && ancestorCancelled;
877+
const isError = isCancelled
878+
? false
879+
: typeof overrides?.isError === "boolean"
880+
? overrides.isError
881+
: event.isError;
842882

843883
const output = event.output ? (event.output as Attributes) : undefined;
844884
const properties = event.properties
@@ -853,12 +893,12 @@ export class EventRepository {
853893
runId: event.runId,
854894
taskSlug: event.taskSlug ?? undefined,
855895
taskPath: event.taskPath ?? undefined,
856-
events: event.events?.filter((e) => !e.name.startsWith("trigger.dev")),
896+
events: events?.filter((e) => !e.name.startsWith("trigger.dev")),
857897
startTime: getDateFromNanoseconds(event.startTime),
858898
duration: nanosecondsToMilliseconds(duration),
859-
isError: event.isError,
860-
isPartial: ancestorCancelled ? false : event.isPartial,
861-
isCancelled: event.isCancelled === true ? true : event.isPartial && ancestorCancelled,
899+
isError,
900+
isPartial,
901+
isCancelled,
862902
level: event.level,
863903
environmentType: event.environmentType,
864904
workerVersion: event.workerVersion ?? undefined,
@@ -889,6 +929,8 @@ export class EventRepository {
889929
return;
890930
}
891931

932+
logger.debug("[getTraceDetailedSummary] result", { traceId, rootSpan });
933+
892934
return {
893935
traceId,
894936
rootSpan,

apps/webapp/app/v3/taskEventStore.server.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export type DetailedTraceEvent = Pick<
4848
| "machinePreset"
4949
| "properties"
5050
| "output"
51+
| "attemptNumber"
5152
>;
5253

5354
export type TaskEventStoreTable = "taskEvent" | "taskEventPartitioned";
@@ -276,7 +277,8 @@ export class TaskEventStore {
276277
"queueName",
277278
"machinePreset",
278279
properties,
279-
output
280+
output,
281+
"attemptNumber"
280282
FROM "TaskEventPartitioned"
281283
WHERE
282284
"traceId" = ${traceId}
@@ -314,7 +316,8 @@ export class TaskEventStore {
314316
"queueName",
315317
"machinePreset",
316318
properties,
317-
output
319+
output,
320+
"attemptNumber"
318321
FROM "TaskEvent"
319322
WHERE "traceId" = ${traceId}
320323
${

0 commit comments

Comments
 (0)