Skip to content

Commit f1e904b

Browse files
committed
Moved isAdmin to a higher level
1 parent a63145f commit f1e904b

File tree

5 files changed

+100
-27
lines changed

5 files changed

+100
-27
lines changed

apps/webapp/app/components/run/RunTimeline.tsx

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,6 @@ export type SpanTimelineProps = {
594594
inProgress: boolean;
595595
isError: boolean;
596596
events?: TimelineSpanEvent[];
597-
showAdminOnlyEvents?: boolean;
598597
};
599598

600599
export type SpanTimelineState = "error" | "pending" | "complete";
@@ -605,12 +604,10 @@ export function SpanTimeline({
605604
inProgress,
606605
isError,
607606
events,
608-
showAdminOnlyEvents,
609607
}: SpanTimelineProps) {
610608
const state = isError ? "error" : inProgress ? "inprogress" : undefined;
611609

612-
// Filter events if needed
613-
const visibleEvents = events?.filter((event) => !event.adminOnly || showAdminOnlyEvents) ?? [];
610+
const visibleEvents = events ?? [];
614611

615612
return (
616613
<>
@@ -697,13 +694,13 @@ export type TimelineSpanEvent = {
697694
timestamp: Date;
698695
duration?: number;
699696
helpText?: string;
700-
adminOnly: boolean;
701697
markerVariant: TimelineEventVariant;
702698
lineVariant: TimelineLineVariant;
703699
};
704700

705701
export function createTimelineSpanEventsFromSpanEvents(
706702
spanEvents: SpanEvent[],
703+
isAdmin: boolean,
707704
relativeStartTime?: number
708705
): Array<TimelineSpanEvent> {
709706
// Rest of function remains the same
@@ -730,14 +727,28 @@ export function createTimelineSpanEventsFromSpanEvents(
730727
return aTime.getTime() - bTime.getTime();
731728
});
732729

730+
const visibleSpanEvents = sortedSpanEvents.filter(
731+
(spanEvent) =>
732+
isAdmin ||
733+
!getAdminOnlyForEvent(
734+
"event" in spanEvent.properties && typeof spanEvent.properties.event === "string"
735+
? spanEvent.properties.event
736+
: spanEvent.name
737+
)
738+
);
739+
740+
if (visibleSpanEvents.length === 0) {
741+
return [];
742+
}
743+
733744
const firstEventTime =
734-
typeof sortedSpanEvents[0].time === "string"
735-
? new Date(sortedSpanEvents[0].time)
736-
: sortedSpanEvents[0].time;
745+
typeof visibleSpanEvents[0].time === "string"
746+
? new Date(visibleSpanEvents[0].time)
747+
: visibleSpanEvents[0].time;
737748

738749
const $relativeStartTime = relativeStartTime ?? firstEventTime.getTime();
739750

740-
const events = matchingSpanEvents.map((spanEvent, index) => {
751+
const events = visibleSpanEvents.map((spanEvent, index) => {
741752
const timestamp =
742753
typeof spanEvent.time === "string" ? new Date(spanEvent.time) : spanEvent.time;
743754

@@ -767,7 +778,6 @@ export function createTimelineSpanEventsFromSpanEvents(
767778
timestamp,
768779
duration,
769780
properties: spanEvent.properties,
770-
adminOnly: getAdminOnlyForEvent(name),
771781
helpText: getHelpTextForEvent(name),
772782
markerVariant,
773783
lineVariant: "light" as const,
@@ -835,13 +845,13 @@ function getAdminOnlyForEvent(event: string): boolean {
835845
function getHelpTextForEvent(event: string): string | undefined {
836846
switch (event) {
837847
case "dequeue": {
838-
return "The task was dequeued from the queue";
848+
return "The run was dequeued from the queue";
839849
}
840850
case "fork": {
841851
return "The process was created to run the task";
842852
}
843853
case "create_attempt": {
844-
return "An attempt was created for the task";
854+
return "An attempt was created for the run";
845855
}
846856
case "import": {
847857
return "A task file was imported";
@@ -850,22 +860,22 @@ function getHelpTextForEvent(event: string): string | undefined {
850860
return "The payload was initialized lazily";
851861
}
852862
case "pod_scheduled": {
853-
return "The Kubernetes pod was scheduled to run the task";
863+
return "The Kubernetes pod was scheduled to run";
854864
}
855865
case "Triggered": {
856-
return "When the run was initially triggered";
866+
return "The run was triggered";
857867
}
858868
case "Dequeued": {
859-
return "When the run is taken from the queue for processing";
869+
return "The run was dequeued from the queue";
860870
}
861871
case "Started": {
862-
return "When the run begins executing";
872+
return "The run began executing";
863873
}
864874
case "Finished": {
865-
return "When the run completes execution";
875+
return "The run completed execution";
866876
}
867877
case "Expired": {
868-
return "When the run expires before it can be processed";
878+
return "The run expired before it could be started";
869879
}
870880
default: {
871881
return undefined;

apps/webapp/app/components/runs/v3/SpanTitle.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,36 @@ export function eventBackgroundClassName(event: RunEvent) {
144144
}
145145
}
146146

147+
export function eventBorderClassName(event: RunEvent) {
148+
if (event.isError) {
149+
return "border-error";
150+
}
151+
152+
if (event.isCancelled) {
153+
return "border-charcoal-600";
154+
}
155+
156+
switch (event.level) {
157+
case "TRACE": {
158+
return backgroundClassNameForVariant(event.style.variant, event.isPartial);
159+
}
160+
case "LOG":
161+
case "INFO":
162+
case "DEBUG": {
163+
return backgroundClassNameForVariant(event.style.variant, event.isPartial);
164+
}
165+
case "WARN": {
166+
return "border-amber-400";
167+
}
168+
case "ERROR": {
169+
return "border-error";
170+
}
171+
default: {
172+
return backgroundClassNameForVariant(event.style.variant, event.isPartial);
173+
}
174+
}
175+
}
176+
147177
function textClassNameForVariant(variant: TaskEventStyle["variant"]) {
148178
switch (variant) {
149179
case "primary": {
@@ -168,3 +198,17 @@ function backgroundClassNameForVariant(variant: TaskEventStyle["variant"], isPar
168198
}
169199
}
170200
}
201+
202+
function borderClassNameForVariant(variant: TaskEventStyle["variant"], isPartial: boolean) {
203+
switch (variant) {
204+
case "primary": {
205+
if (isPartial) {
206+
return "border-blue-500";
207+
}
208+
return "border-success";
209+
}
210+
default: {
211+
return "border-charcoal-500";
212+
}
213+
}
214+
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,15 @@ export class RunPresenter {
123123
};
124124
}
125125

126+
const user = await this.#prismaClient.user.findFirst({
127+
where: {
128+
id: userId,
129+
},
130+
select: {
131+
admin: true,
132+
},
133+
});
134+
126135
//this tree starts at the passed in span (hides parent elements if there are any)
127136
const tree = createTreeFromFlatItems(traceSummary.spans, run.spanId);
128137

@@ -141,6 +150,7 @@ export class RunPresenter {
141150
...n.data,
142151
timelineEvents: createTimelineSpanEventsFromSpanEvents(
143152
n.data.events,
153+
user?.admin ?? false,
144154
treeRootStartTimeMs
145155
),
146156
//set partial nodes to null duration

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ import { NodesState } from "~/components/primitives/TreeView/reducer";
5555
import { CancelRunDialog } from "~/components/runs/v3/CancelRunDialog";
5656
import { ReplayRunDialog } from "~/components/runs/v3/ReplayRunDialog";
5757
import { RunIcon } from "~/components/runs/v3/RunIcon";
58-
import { SpanTitle, eventBackgroundClassName } from "~/components/runs/v3/SpanTitle";
58+
import {
59+
SpanTitle,
60+
eventBackgroundClassName,
61+
eventBorderClassName,
62+
} from "~/components/runs/v3/SpanTitle";
5963
import { TaskRunStatusIcon, runStatusClassNameColor } from "~/components/runs/v3/TaskRunStatus";
6064
import { env } from "~/env.server";
6165
import { useDebounce } from "~/hooks/useDebounce";
@@ -911,7 +915,10 @@ function TimelineView({
911915
>
912916
{(ms) => (
913917
<motion.div
914-
className="-ml-[0.5px] h-[0.5625rem] w-px rounded-none bg-text-dimmed"
918+
className={cn(
919+
"-ml-[0.5px] h-[0.5625rem] w-px rounded-none",
920+
eventBackgroundClassName(node.data)
921+
)}
915922
layoutId={`${node.id}-${event.name}`}
916923
/>
917924
)}
@@ -924,7 +931,10 @@ function TimelineView({
924931
>
925932
{(ms) => (
926933
<motion.div
927-
className="-ml-1 size-[0.3125rem] rounded-full border border-text-dimmed bg-background-bright"
934+
className={cn(
935+
"-ml-1 size-[0.3125rem] rounded-full border bg-background-bright",
936+
eventBorderClassName(node.data)
937+
)}
928938
layoutId={`${node.id}-${event.name}`}
929939
/>
930940
)}
@@ -941,7 +951,7 @@ function TimelineView({
941951
)}
942952
>
943953
<motion.div
944-
className="h-[1px] w-full rounded-none bg-text-dimmed"
954+
className={cn("h-px w-full", eventBackgroundClassName(node.data))}
945955
layoutId={`mark-${node.id}`}
946956
/>
947957
</Timeline.Span>
@@ -962,7 +972,7 @@ function TimelineView({
962972
{(ms) => (
963973
<motion.div
964974
className={cn(
965-
"-ml-1 h-3 w-3 rounded-full border-2 border-background-bright",
975+
"-ml-1 size-3 rounded-full border-2 border-background-bright",
966976
eventBackgroundClassName(node.data)
967977
)}
968978
layoutId={node.id}
@@ -1120,11 +1130,11 @@ function LiveReloadingStatus({
11201130

11211131
function PulsingDot() {
11221132
return (
1123-
<span className="relative flex h-2 w-2">
1133+
<span className="relative flex size-2">
11241134
<span
11251135
className={`absolute h-full w-full animate-ping rounded-full border border-blue-500 opacity-100 duration-1000`}
11261136
/>
1127-
<span className={`h-2 w-2 rounded-full bg-blue-500`} />
1137+
<span className={`size-2 rounded-full bg-blue-500`} />
11281138
</span>
11291139
);
11301140
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,7 @@ function SpanBody({
310310
duration={span.duration}
311311
inProgress={span.isPartial}
312312
isError={span.isError}
313-
showAdminOnlyEvents={isAdmin}
314-
events={createTimelineSpanEventsFromSpanEvents(span.events)}
313+
events={createTimelineSpanEventsFromSpanEvents(span.events, isAdmin)}
315314
/>
316315
</>
317316
) : (

0 commit comments

Comments
 (0)