diff --git a/frontend/components/traces/session-player.tsx b/frontend/components/traces/session-player.tsx index 0d6d983d..f4805526 100644 --- a/frontend/components/traces/session-player.tsx +++ b/frontend/components/traces/session-player.tsx @@ -28,7 +28,11 @@ export interface SessionPlayerHandle { } const SessionPlayer = forwardRef( - ({ hasBrowserSession, traceId, onTimelineChange }, ref) => { + ({ + hasBrowserSession, + traceId, + onTimelineChange + }, ref) => { const containerRef = useRef(null); const playerContainerRef = useRef(null); const playerRef = useRef(null); @@ -38,6 +42,7 @@ const SessionPlayer = forwardRef( const [totalDuration, setTotalDuration] = useState(0); const [speed, setSpeed] = useState(1); const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); + const [startTime, setStartTime] = useState(0); const { projectId } = useProjectContext(); // Add resize observer effect @@ -125,6 +130,8 @@ const SessionPlayer = forwardRef( speed } }); + const startTime = events[0].timestamp; + setStartTime(startTime); // Set total duration and add player listeners const duration = (events[events.length - 1].timestamp - events[0].timestamp) / 1000; @@ -140,7 +147,7 @@ const SessionPlayer = forwardRef( playerRef.current.addEventListener('ui-update-current-time', (event: any) => { setCurrentTime(event.payload / 1000); - onTimelineChange(event.payload); + onTimelineChange(startTime + event.payload); }); } catch (e) { console.error('Error initializing player:', e); diff --git a/frontend/components/traces/timeline.tsx b/frontend/components/traces/timeline.tsx index 81b26dde..9b23b3ee 100644 --- a/frontend/components/traces/timeline.tsx +++ b/frontend/components/traces/timeline.tsx @@ -35,7 +35,9 @@ export default function Timeline({ }: TimelineProps) { const [segments, setSegments] = useState([]); const [timeIntervals, setTimeIntervals] = useState([]); - const [maxTime, setMaxTime] = useState(0); + const [startTime, setStartTime] = useState(0); + const [endTime, setEndTime] = useState(0); + const ref = useRef(null); const traverse = useCallback( @@ -104,7 +106,8 @@ export default function Timeline({ return; } - setMaxTime(endTime.getTime() - startTime.getTime()); + setStartTime(startTime.getTime()); + setEndTime(endTime.getTime()); const totalDuration = endTime.getTime() - startTime.getTime(); @@ -120,22 +123,22 @@ export default function Timeline({ const segments: Segment[] = []; for (const span of orderedSpans) { - const duration = getDuration(span.startTime, span.endTime) / 1000; + const spanDuration = getDuration(span.startTime, span.endTime); + + const width = (spanDuration / totalDuration) * 100; + + const left = (new Date(span.startTime).getTime() - startTime.getTime()) / totalDuration * 100; - const width = (duration / upperInterval) * 100; - const left = - (getDuration(startTime.toISOString(), span.startTime) / - 1000 / - upperInterval) * - 100; + console.log("spanDuration", spanDuration, "span offset", left, span.startTime, new Date(span.startTime).getTime()); const segmentEvents = [] as SegmentEvent[]; + for (const event of span.events) { const eventLeft = ((new Date(event.timestamp).getTime() - new Date(span.startTime).getTime()) / 1000 / - duration) * + spanDuration) * 100; segmentEvents.push({ @@ -158,13 +161,6 @@ export default function Timeline({ return (
- {browserSessionTime && ( -
- )}
{timeIntervals.map((interval, index) => (
-
+
+ {browserSessionTime && ( +
+ )} {segments.map((segment, index) => (
{ setBrowserSessionTime(time); + const activeSpans = spans.filter( (span: Span) => { - const traceStartTime = new Date(trace.startTime).getTime(); const spanStartTime = new Date(span.startTime).getTime(); const spanEndTime = new Date(span.endTime).getTime(); - const startTime = spanStartTime - traceStartTime; - const endTime = spanEndTime - traceStartTime; - return startTime <= time && endTime >= time && span.parentSpanId !== null; + return spanStartTime <= time && spanEndTime >= time && span.parentSpanId !== null; } ); diff --git a/frontend/components/ui/header.tsx b/frontend/components/ui/header.tsx index b02b5c89..02344e80 100644 --- a/frontend/components/ui/header.tsx +++ b/frontend/components/ui/header.tsx @@ -52,7 +52,7 @@ export default function Header({ path, children, className, showSidebarTrigger =