diff --git a/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx b/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx index 1009d8d7f28..efadc189a1c 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx @@ -401,6 +401,8 @@ export const UnifiedLogsTable = () => { /> + {/* [Joshen] JFYI this is currently just hardcoded data to explore the UX */} + {/* Will need to be either implemented prior to launch or hidden */} void } export function SpanDetail({ span, onClose }: SpanDetailProps) { + const duration = span.endTime - span.startTime + return ( -
-
-

Span Details

- -
- -
+
+

{span.name}

-
-
- Start Time - {span.startTime.toFixed(2)}ms -
-
- End Time - {span.endTime.toFixed(2)}ms -
-
- Duration - {(span.endTime - span.startTime).toFixed(2)}ms -
-
- Depth - {span.depth} -
-
- Row - {span.row} -
- {span.status && ( -
- Status - - {span.status.toUpperCase()} - -
- )} - - {span.children.length > 0 && ( -
- Child Spans: -
    - {span.children.map((child) => ( -
  • - {child.name} -
  • - ))} -
-
- )} - - {span.parent && ( -
- Parent Span: -
{span.parent.name}
-
- )} -
+
+ +
+ + {span.startTime.toFixed(2)}ms + + {span.endTime.toFixed(2)}ms + ({duration.toFixed(2)}ms) +
+ + + + Details + Logs + Network + Source + + + +
+

Span Information

+
+
ID
+
{span.id}
+
Name
+
{span.name}
+
Start Time
+
{span.startTime.toFixed(2)}ms
+
End Time
+
{span.endTime.toFixed(2)}ms
+
Duration
+
{duration.toFixed(2)}ms
+
+
+ +
+

Attributes

+
No attributes available
+
+
+ + +
+
No logs available for this span
+
+
+ + +
+
No network requests for this span
+
+
+ + +
+
+              {`// Sample source code
+function processRequest(req, res) {
+  // Start span
+  const span = tracer.startSpan('${span.name}');
+  
+  try {
+    // Process request
+    const result = await handleRequest(req);
+    
+    // End span
+    span.end();
+    
+    return result;
+  } catch (error) {
+    // Record error
+    span.recordException(error);
+    span.end();
+    throw error;
+  }
+}`}
+            
+
+
+
) } diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/span-detail.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/span-detail.tsx deleted file mode 100644 index 918e9290a3c..00000000000 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/span-detail.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { Clock, ArrowRight, X } from 'lucide-react' -import { - Button, - Tabs_Shadcn_ as Tabs, - TabsContent_Shadcn_ as TabsContent, - TabsList_Shadcn_ as TabsList, - TabsTrigger_Shadcn_ as TabsTrigger, -} from 'ui' - -interface Span { - id: string - name: string - startTime: number - endTime: number - level: number - highlight?: boolean -} - -interface SpanDetailProps { - span: Span - onClose: () => void -} - -export default function SpanDetail({ span, onClose }: SpanDetailProps) { - const duration = span.endTime - span.startTime - - return ( -
-
-

{span.name}

- -
- -
- - {span.startTime.toFixed(2)}ms - - {span.endTime.toFixed(2)}ms - ({duration.toFixed(2)}ms) -
- - - - Details - Logs - Network - Source - - - -
-

Span Information

-
-
ID
-
{span.id}
-
Name
-
{span.name}
-
Start Time
-
{span.startTime.toFixed(2)}ms
-
End Time
-
{span.endTime.toFixed(2)}ms
-
Duration
-
{duration.toFixed(2)}ms
-
-
- -
-

Attributes

-
No attributes available
-
-
- - -
-
No logs available for this span
-
-
- - -
-
No network requests for this span
-
-
- - -
-
-              {`// Sample source code
-function processRequest(req, res) {
-  // Start span
-  const span = tracer.startSpan('${span.name}');
-  
-  try {
-    // Process request
-    const result = await handleRequest(req);
-    
-    // End span
-    span.end();
-    
-    return result;
-  } catch (error) {
-    // Record error
-    span.recordException(error);
-    span.end();
-    throw error;
-  }
-}`}
-            
-
-
-
-
- ) -} diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/minimap.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/minimap.tsx index 5bc456999f7..098283aef81 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/minimap.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/minimap.tsx @@ -1,6 +1,5 @@ -'use client' +import { MouseEvent, RefObject } from 'react' -import type React from 'react' import { cn } from 'ui' import type { LayoutSpan } from '../utils/layout-algorithm' @@ -9,8 +8,8 @@ interface MinimapProps { duration: number visiblePortionStart: number visiblePortionWidth: number - onClick: (e: React.MouseEvent) => void - minimapRef: React.RefObject + onClick: (e: MouseEvent) => void + minimapRef: RefObject spanAbsoluteRows: Record } diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-cursor.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-cursor.tsx index 08d20387c8c..06c1d69145c 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-cursor.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-cursor.tsx @@ -1,7 +1,4 @@ -'use client' - -import type React from 'react' -import { forwardRef, useImperativeHandle, useRef, useEffect } from 'react' +import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react' import { cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui' interface TimelineCursorProps { diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-header.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-header.tsx index 3a0f148b177..6dccb58355d 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-header.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-header.tsx @@ -1,6 +1,6 @@ -'use client' import { ChevronDown, Clock, Search, ZoomIn, ZoomOut } from 'lucide-react' import { useEffect, useRef, useState } from 'react' + import { traceDataSets } from '../data/trace-data' interface TimelineHeaderProps { diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-marker.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-marker.tsx index 9c8a69216c1..c43df802694 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-marker.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-marker.tsx @@ -1,7 +1,6 @@ -'use client' - import { AlertCircle, AlertTriangle, CheckCircle, Info } from 'lucide-react' -import type React from 'react' + +import { MouseEvent } from 'react' import { cn } from 'ui' import type { Marker } from '../types/trace' @@ -9,7 +8,7 @@ interface TimelineMarkerProps { marker: Marker duration: number isSelected: boolean - onClick: (e: React.MouseEvent, marker: Marker) => void + onClick: (e: MouseEvent, marker: Marker) => void } export function TimelineMarker({ marker, duration, isSelected, onClick }: TimelineMarkerProps) { diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-span.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-span.tsx index 28ccf99eac6..228baddf373 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-span.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/timeline/timeline-span.tsx @@ -1,5 +1,3 @@ -'use client' - import { AlertTriangle, ArrowRight, @@ -12,7 +10,8 @@ import { Search, Server, } from 'lucide-react' -import type React from 'react' +import { MouseEvent } from 'react' + import { cn } from 'ui' import type { Span } from '../types/trace' import type { LayoutSpan } from '../utils/layout-algorithm' @@ -23,7 +22,7 @@ interface TimelineSpanProps { isSelected: boolean isVisible: boolean endBeyondViewport: boolean - onClick: (e: React.MouseEvent, span: LayoutSpan) => void + onClick: (e: MouseEvent, span: LayoutSpan) => void showTimestamps: boolean absoluteRow: number } diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer-client.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer-client.tsx index 432312add20..b61e60d9ea7 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer-client.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer-client.tsx @@ -1,7 +1,6 @@ -'use client' - -import { useState, useEffect } from 'react' import dynamic from 'next/dynamic' +import { useEffect, useState } from 'react' + import type { TraceData } from './types/trace' // Use dynamic import with ssr: false to prevent server-side rendering issues diff --git a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer.tsx b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer.tsx index 3ebe19860d9..d89bd3e956b 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/components/Trace/trace-viewer.tsx @@ -1,7 +1,8 @@ import { useEffect, useMemo, useRef, useState } from 'react' + import { traceDataSets } from './data/trace-data' import { MarkerDetail } from './details/marker-detail' -import SpanDetail from './span-detail' +import { SpanDetail } from './details/span-detail' import { Minimap } from './timeline/minimap' import { TimelineCursor, type TimelineCursorRef } from './timeline/timeline-cursor' import { TimelineHeader } from './timeline/timeline-header'