Skip to content

Commit 0274eb9

Browse files
committed
implement getSpan
1 parent d3363ab commit 0274eb9

File tree

12 files changed

+406
-93
lines changed

12 files changed

+406
-93
lines changed

apps/webapp/app/presenters/v3/RunPresenter.server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ export class RunPresenter {
256256
queuedDuration: run.startedAt
257257
? millisecondsToNanoseconds(run.startedAt.getTime() - run.createdAt.getTime())
258258
: undefined,
259+
overridesBySpanId: traceSummary.overridesBySpanId,
259260
},
260261
};
261262
}

apps/webapp/app/presenters/v3/SpanPresenter.server.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,6 @@ export class SpanPresenter extends BasePresenter {
499499
style: span.style,
500500
properties: span.properties ? JSON.stringify(span.properties, null, 2) : undefined,
501501
entity: span.entity,
502-
originalRun: span.originalRun,
503502
metadata: span.metadata,
504503
triggeredRuns,
505504
};

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route";
9797
import { SpanView } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam/route";
9898
import { useSearchParams } from "~/hooks/useSearchParam";
9999
import { CopyableText } from "~/components/primitives/CopyableText";
100+
import type { SpanOverride } from "~/v3/eventRepository/eventRepository.types";
100101

101102
const resizableSettings = {
102103
parent: {
@@ -301,7 +302,8 @@ function TraceView({ run, trace, maximumLiveReloadingSetting, resizable }: Loade
301302
return <></>;
302303
}
303304

304-
const { events, duration, rootSpanStatus, rootStartedAt, queuedDuration } = trace;
305+
const { events, duration, rootSpanStatus, rootStartedAt, queuedDuration, overridesBySpanId } =
306+
trace;
305307
const shouldLiveReload = events.length <= maximumLiveReloadingSetting;
306308

307309
const changeToSpan = useDebounce((selectedSpan: string) => {
@@ -323,6 +325,8 @@ function TraceView({ run, trace, maximumLiveReloadingSetting, resizable }: Loade
323325
// WARNING Don't put the revalidator in the useEffect deps array or bad things will happen
324326
}, [streamedEvents]); // eslint-disable-line react-hooks/exhaustive-deps
325327

328+
const spanOverrides = selectedSpanId ? overridesBySpanId?.[selectedSpanId] : undefined;
329+
326330
return (
327331
<div className={cn("grid h-full max-h-full grid-cols-1 overflow-hidden")}>
328332
<ResizablePanelGroup
@@ -371,6 +375,7 @@ function TraceView({ run, trace, maximumLiveReloadingSetting, resizable }: Loade
371375
<SpanView
372376
runParam={run.friendlyId}
373377
spanId={selectedSpanId}
378+
spanOverrides={spanOverrides as SpanOverride | undefined}
374379
closePanel={() => replaceSearchParam("span")}
375380
/>
376381
</ResizablePanel>

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam/route.tsx

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import {
7979
import { createTimelineSpanEventsFromSpanEvents } from "~/utils/timelineSpanEvents";
8080
import { CompleteWaitpointForm } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route";
8181
import { requireUserId } from "~/services/session.server";
82+
import type { SpanOverride } from "~/v3/eventRepository/eventRepository.types";
8283

8384
export const loader = async ({ request, params }: LoaderFunctionArgs) => {
8485
const userId = await requireUserId(request);
@@ -120,10 +121,12 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
120121
export function SpanView({
121122
runParam,
122123
spanId,
124+
spanOverrides,
123125
closePanel,
124126
}: {
125127
runParam: string;
126128
spanId: string | undefined;
129+
spanOverrides?: SpanOverride;
127130
closePanel?: () => void;
128131
}) {
129132
const organization = useOrganization();
@@ -174,17 +177,26 @@ export function SpanView({
174177
);
175178
}
176179
case "span": {
177-
return <SpanBody span={fetcher.data.span} runParam={runParam} closePanel={closePanel} />;
180+
return (
181+
<SpanBody
182+
span={fetcher.data.span}
183+
spanOverrides={spanOverrides}
184+
runParam={runParam}
185+
closePanel={closePanel}
186+
/>
187+
);
178188
}
179189
}
180190
}
181191

182192
function SpanBody({
183193
span,
194+
spanOverrides,
184195
runParam,
185196
closePanel,
186197
}: {
187198
span: Span;
199+
spanOverrides?: SpanOverride;
188200
runParam?: string;
189201
closePanel?: () => void;
190202
}) {
@@ -198,6 +210,8 @@ function SpanBody({
198210
tab = "overview";
199211
}
200212

213+
span = applySpanOverrides(span, spanOverrides);
214+
201215
return (
202216
<div className="grid h-full max-h-full grid-rows-[2.5rem_2rem_1fr] overflow-hidden bg-background-bright">
203217
<div className="flex items-center justify-between gap-2 overflow-x-hidden px-3">
@@ -241,6 +255,38 @@ function SpanBody({
241255
);
242256
}
243257

258+
function applySpanOverrides(span: Span, spanOverrides?: SpanOverride): Span {
259+
if (!spanOverrides) {
260+
return span;
261+
}
262+
263+
const newSpan = { ...span };
264+
265+
if (spanOverrides.isCancelled) {
266+
newSpan.isCancelled = true;
267+
newSpan.isPartial = false;
268+
newSpan.isError = false;
269+
} else if (spanOverrides.isError) {
270+
newSpan.isError = true;
271+
newSpan.isPartial = false;
272+
newSpan.isCancelled = false;
273+
}
274+
275+
if (spanOverrides.duration) {
276+
newSpan.duration = spanOverrides.duration;
277+
}
278+
279+
if (spanOverrides.events) {
280+
if (newSpan.events) {
281+
newSpan.events = [...newSpan.events, ...spanOverrides.events];
282+
} else {
283+
newSpan.events = spanOverrides.events;
284+
}
285+
}
286+
287+
return newSpan;
288+
}
289+
244290
function RunBody({
245291
run,
246292
runParam,

0 commit comments

Comments
 (0)