@flanksource/clicky-ui 0.3.58 → 0.3.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clicky.cjs +3 -1
- package/dist/clicky.d.ts +1 -0
- package/dist/clicky.d.ts.map +1 -1
- package/dist/clicky.js +3 -1
- package/dist/data/Clicky.cjs +22 -270
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +3 -29
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +10 -259
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/clicky-download.cjs +251 -0
- package/dist/data/clicky-download.cjs.map +1 -0
- package/dist/data/clicky-download.d.ts +55 -0
- package/dist/data/clicky-download.d.ts.map +1 -0
- package/dist/data/clicky-download.js +244 -0
- package/dist/data/clicky-download.js.map +1 -0
- package/dist/data/traces/index.d.ts +2 -0
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.cjs +102 -78
- package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.d.ts +6 -2
- package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.js +102 -78
- package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.cjs +43 -7
- package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.d.ts +14 -3
- package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.js +44 -8
- package/dist/data/traces/otel/OtelTraceTable.js.map +1 -1
- package/dist/data/traces/otel/profile-listing.cjs +61 -0
- package/dist/data/traces/otel/profile-listing.cjs.map +1 -0
- package/dist/data/traces/otel/profile-listing.d.ts +23 -0
- package/dist/data/traces/otel/profile-listing.d.ts.map +1 -0
- package/dist/data/traces/otel/profile-listing.js +60 -0
- package/dist/data/traces/otel/profile-listing.js.map +1 -0
- package/dist/data/traces/otel/profile-spans.cjs +22 -0
- package/dist/data/traces/otel/profile-spans.cjs.map +1 -0
- package/dist/data/traces/otel/profile-spans.d.ts +4 -0
- package/dist/data/traces/otel/profile-spans.d.ts.map +1 -0
- package/dist/data/traces/otel/profile-spans.js +22 -0
- package/dist/data/traces/otel/profile-spans.js.map +1 -0
- package/dist/data/traces/otel/span-traces.cjs +7 -1
- package/dist/data/traces/otel/span-traces.cjs.map +1 -1
- package/dist/data/traces/otel/span-traces.d.ts +2 -0
- package/dist/data/traces/otel/span-traces.d.ts.map +1 -1
- package/dist/data/traces/otel/span-traces.js +7 -2
- package/dist/data/traces/otel/span-traces.js.map +1 -1
- package/dist/data/useClickyTableMenu.cjs +33 -0
- package/dist/data/useClickyTableMenu.cjs.map +1 -0
- package/dist/data/useClickyTableMenu.d.ts +17 -0
- package/dist/data/useClickyTableMenu.d.ts.map +1 -0
- package/dist/data/useClickyTableMenu.js +33 -0
- package/dist/data/useClickyTableMenu.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +7 -2
- package/dist/data.js +5 -3
- package/dist/index.cjs +14 -3
- package/dist/index.js +9 -4
- package/dist/rpc/EntityExplorerApp.cjs +49 -12
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +10 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +51 -14
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/EntitySurface.cjs +38 -0
- package/dist/rpc/EntitySurface.cjs.map +1 -0
- package/dist/rpc/EntitySurface.d.ts +17 -0
- package/dist/rpc/EntitySurface.d.ts.map +1 -0
- package/dist/rpc/EntitySurface.js +38 -0
- package/dist/rpc/EntitySurface.js.map +1 -0
- package/dist/rpc/ExplorerNav.cjs +48 -0
- package/dist/rpc/ExplorerNav.cjs.map +1 -0
- package/dist/rpc/ExplorerNav.d.ts +12 -0
- package/dist/rpc/ExplorerNav.d.ts.map +1 -0
- package/dist/rpc/ExplorerNav.js +48 -0
- package/dist/rpc/ExplorerNav.js.map +1 -0
- package/dist/rpc/explorer-nav-context.cjs +5 -0
- package/dist/rpc/explorer-nav-context.cjs.map +1 -0
- package/dist/rpc/explorer-nav-context.d.ts +11 -0
- package/dist/rpc/explorer-nav-context.d.ts.map +1 -0
- package/dist/rpc/explorer-nav-context.js +6 -0
- package/dist/rpc/explorer-nav-context.js.map +1 -0
- package/dist/rpc.cjs +4 -0
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +3 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/traces/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/traces/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@ var CATEGORY_ICON = {
|
|
|
38
38
|
};
|
|
39
39
|
var ROW_HEIGHT = 28;
|
|
40
40
|
var NAME_COLUMN = "minmax(15rem, 36%) minmax(0, 1fr)";
|
|
41
|
-
function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }) {
|
|
41
|
+
function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan, renderTitle }) {
|
|
42
42
|
const index = (0, react.useMemo)(() => require_model.indexTrace(TRACE), [TRACE]);
|
|
43
43
|
const suspects = (0, react.useMemo)(() => require_model.misparented(index), [index]);
|
|
44
44
|
const selected = selectedSpanId ?? TRACE.spans[0]?.spanId ?? "";
|
|
@@ -99,7 +99,11 @@ function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }) {
|
|
|
99
99
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
100
100
|
className: "space-y-4 rounded-xl border border-border bg-background p-density-4",
|
|
101
101
|
children: [
|
|
102
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
102
|
+
renderTitle ? renderTitle(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TraceTitle, {
|
|
103
|
+
trace: TRACE,
|
|
104
|
+
compact: true
|
|
105
|
+
})) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TraceTitle, { trace: TRACE }),
|
|
106
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TraceStats, {
|
|
103
107
|
index,
|
|
104
108
|
trace: TRACE
|
|
105
109
|
}),
|
|
@@ -191,7 +195,69 @@ function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }) {
|
|
|
191
195
|
})
|
|
192
196
|
});
|
|
193
197
|
}
|
|
194
|
-
function
|
|
198
|
+
function TraceTitle({ trace: { summary }, compact }) {
|
|
199
|
+
const status = summary.errors === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Badge.Badge, {
|
|
200
|
+
tone: "success",
|
|
201
|
+
variant: "soft",
|
|
202
|
+
children: "no errors"
|
|
203
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Badge.Badge, {
|
|
204
|
+
tone: "danger",
|
|
205
|
+
variant: "soft",
|
|
206
|
+
children: [summary.errors, " errors"]
|
|
207
|
+
});
|
|
208
|
+
const meta = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
209
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: summary.traceId }),
|
|
210
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CopyButton.CopyButton, {
|
|
211
|
+
value: summary.traceId,
|
|
212
|
+
label: "Copy trace ID"
|
|
213
|
+
}),
|
|
214
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
215
|
+
"· ",
|
|
216
|
+
summary.services.join(", "),
|
|
217
|
+
" · ",
|
|
218
|
+
new Date(summary.startedAt).toLocaleString()
|
|
219
|
+
] })
|
|
220
|
+
] });
|
|
221
|
+
if (compact) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
222
|
+
className: "flex min-w-0 flex-1 items-center gap-density-2",
|
|
223
|
+
children: [
|
|
224
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h1", {
|
|
225
|
+
className: "flex min-w-0 items-center gap-2 text-base font-semibold tracking-tight",
|
|
226
|
+
title: summary.operation,
|
|
227
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SpanCategory.Tinted, {
|
|
228
|
+
icon: require_UiRobotAi.UiRobotAi,
|
|
229
|
+
color: require_model.CATEGORY_COLOR.agent
|
|
230
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
231
|
+
className: "min-w-0 truncate",
|
|
232
|
+
children: require_model.shortOperation(summary.operation)
|
|
233
|
+
})]
|
|
234
|
+
}),
|
|
235
|
+
status,
|
|
236
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
237
|
+
className: "hidden min-w-0 items-center gap-2 truncate text-xs text-muted-foreground lg:flex",
|
|
238
|
+
children: meta
|
|
239
|
+
})
|
|
240
|
+
]
|
|
241
|
+
});
|
|
242
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
243
|
+
className: "min-w-0 space-y-1",
|
|
244
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h2", {
|
|
245
|
+
className: "flex items-center gap-2 text-xl font-semibold tracking-tight",
|
|
246
|
+
children: [
|
|
247
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SpanCategory.Tinted, {
|
|
248
|
+
icon: require_UiRobotAi.UiRobotAi,
|
|
249
|
+
color: require_model.CATEGORY_COLOR.agent
|
|
250
|
+
}),
|
|
251
|
+
require_model.shortOperation(summary.operation),
|
|
252
|
+
status
|
|
253
|
+
]
|
|
254
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
255
|
+
className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground",
|
|
256
|
+
children: meta
|
|
257
|
+
})]
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
function TraceStats({ index, trace: TRACE }) {
|
|
195
261
|
const { summary } = TRACE;
|
|
196
262
|
const by = (c) => TRACE.spans.filter((span) => require_model.category(span) === c);
|
|
197
263
|
const llm = by("llm");
|
|
@@ -206,81 +272,39 @@ function TraceHeader({ index, trace: TRACE }) {
|
|
|
206
272
|
const tokensIn = sum(llm, "gen_ai.usage.input_tokens");
|
|
207
273
|
const tokensOut = sum(llm, "gen_ai.usage.output_tokens");
|
|
208
274
|
const ms = (spans) => spans.reduce((total, span) => total + span.durationMs, 0);
|
|
209
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
"· ",
|
|
243
|
-
summary.services.join(", "),
|
|
244
|
-
" · ",
|
|
245
|
-
new Date(summary.startedAt).toLocaleString()
|
|
246
|
-
] })
|
|
247
|
-
]
|
|
248
|
-
})]
|
|
249
|
-
})
|
|
250
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_StatStrip.StatStrip, { items: [
|
|
251
|
-
{
|
|
252
|
-
label: "Duration",
|
|
253
|
-
value: require_model.duration(summary.durationMs),
|
|
254
|
-
sub: `${summary.spanCount} spans`,
|
|
255
|
-
icon: require_UiClock.UiClock
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
label: "LLM",
|
|
259
|
-
value: require_model.duration(ms(llm)),
|
|
260
|
-
sub: `${llm.length} calls · ${require_metrics.metric(tokensIn)} in / ${require_metrics.metric(tokensOut)} out`,
|
|
261
|
-
icon: require_UiSparkles.UiSparkles
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
label: "Database",
|
|
265
|
-
value: require_model.duration(ms(db)),
|
|
266
|
-
sub: `${db.length} calls · ${new Set(db.map((span) => span.attributes?.["db.sql.table"])).size} tables`,
|
|
267
|
-
icon: require_UiDatabase.UiDatabase
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
label: "Cost",
|
|
271
|
-
value: require_metrics.metric(cost, (value) => `$${value.toFixed(4)}`),
|
|
272
|
-
sub: budget ? `of $${budget} budget` : "budget unavailable",
|
|
273
|
-
icon: require_UiCoins.UiCoins
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
label: "Root self-time",
|
|
277
|
-
value: require_model.duration(require_model.selfTimeMs(index, root)),
|
|
278
|
-
sub: "not covered by any child span",
|
|
279
|
-
icon: require_UiRobotAi.UiRobotAi,
|
|
280
|
-
tone: "warning"
|
|
281
|
-
}
|
|
282
|
-
] })]
|
|
283
|
-
});
|
|
275
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_StatStrip.StatStrip, { items: [
|
|
276
|
+
{
|
|
277
|
+
label: "Duration",
|
|
278
|
+
value: require_model.duration(summary.durationMs),
|
|
279
|
+
sub: `${summary.spanCount} spans`,
|
|
280
|
+
icon: require_UiClock.UiClock
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
label: "LLM",
|
|
284
|
+
value: require_model.duration(ms(llm)),
|
|
285
|
+
sub: `${llm.length} calls · ${require_metrics.metric(tokensIn)} in / ${require_metrics.metric(tokensOut)} out`,
|
|
286
|
+
icon: require_UiSparkles.UiSparkles
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
label: "Database",
|
|
290
|
+
value: require_model.duration(ms(db)),
|
|
291
|
+
sub: `${db.length} calls · ${new Set(db.map((span) => span.attributes?.["db.sql.table"])).size} tables`,
|
|
292
|
+
icon: require_UiDatabase.UiDatabase
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
label: "Cost",
|
|
296
|
+
value: require_metrics.metric(cost, (value) => `$${value.toFixed(4)}`),
|
|
297
|
+
sub: budget ? `of $${budget} budget` : "budget unavailable",
|
|
298
|
+
icon: require_UiCoins.UiCoins
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
label: "Root self-time",
|
|
302
|
+
value: require_model.duration(require_model.selfTimeMs(index, root)),
|
|
303
|
+
sub: "not covered by any child span",
|
|
304
|
+
icon: require_UiRobotAi.UiRobotAi,
|
|
305
|
+
tone: "warning"
|
|
306
|
+
}
|
|
307
|
+
] });
|
|
284
308
|
}
|
|
285
309
|
function Toolbar(props) {
|
|
286
310
|
const counts = props.trace.spans.reduce((acc, span) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelTraceDetail.cjs","names":["UiRobotAi","UiSparkles","UiDatabase","UiClock","useMemo","indexTrace","misparented","useState","buildRows","category","withAncestors","Callout","shortOperation","Button","SplitPane","GroupDetail","num","Tinted","CATEGORY_COLOR","Badge","CopyButton","StatStrip","duration","metric","UiCoins","selfTimeMs","SearchInput","CATEGORY_LABEL","Switch","Icon","UiExpandAll","UiCollapseAll","niceStep","useRef","UiChevronDown","UiChevronRight","_Fragment","UiWarningTriangle","isError","AgentCard","LlmCard","DbCard","Section","Properties","CodeBlock"],"sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"sourcesContent":["import { Tinted } from \"./SpanCategory\";\nimport { AgentCard, LlmCard, DbCard, GroupDetail } from \"./SpanCards\";\nimport { metric } from \"./metrics\";\nimport { StatStrip } from \"../../StatStrip\";\nimport { Icon } from \"../../Icon\";\nimport { Callout } from \"../../Callout\";\nimport { Badge } from \"../../Badge\";\nimport { CodeBlock } from \"../../CodeBlock\";\nimport { Properties } from \"../../Properties\";\n/**\n * OpenTelemetry waterfall with grouped calls and an adjacent span inspector.\n */\nimport { useEffect, useMemo, useRef, useState, type KeyboardEvent } from \"react\";\nimport {\n Button,\n CopyButton,\n SearchInput,\n Section,\n SplitPane,\n Switch,\n} from \"../../../components\";\nimport {\n UiChevronDown,\n UiChevronRight,\n UiClock,\n UiCoins,\n UiCollapseAll,\n UiDatabase,\n UiExpandAll,\n UiRobotAi,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\n\n\nimport {\n CATEGORY_COLOR,\n CATEGORY_LABEL,\n buildRows,\n category,\n duration,\n indexTrace,\n isError,\n misparented,\n niceStep,\n num,\n selfTimeMs,\n shortOperation,\n withAncestors,\n type Category,\n type Row,\n type Span,\n type TraceIndex,\n type Trace,\n} from \"./model\";\n\nconst CATEGORY_ICON = { agent: UiRobotAi, llm: UiSparkles, db: UiDatabase, other: UiClock } as const;\nconst ROW_HEIGHT = 28;\n\nconst NAME_COLUMN = \"minmax(15rem, 36%) minmax(0, 1fr)\";\n\n\nexport function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan }: { trace: Trace; selectedSpanId?: string; onSelectSpan: (id: string) => void }) {\n const index = useMemo(() => indexTrace(TRACE), [TRACE]);\n const suspects = useMemo(() => misparented(index), [index]);\n const selected = selectedSpanId ?? TRACE.spans[0]?.spanId ?? \"\";\n const [collapsed, setCollapsed] = useState(new Set<string>());\n const groupOf = (id: string) => buildRows(index, { collapsed: new Set(), expanded: new Set(), group: true }).find(row => row.type === \"group\" && row.spans.some(span => span.spanId === id))?.id;\n const [expanded, setExpanded] = useState(() => new Set([groupOf(selected)].filter(id => id !== undefined)));\n const [group, setGroup] = useState(true);\n const [query, setQuery] = useState(\"\");\n const [categories, setCategories] = useState(new Set<Category>());\n const [onlySuspects, setOnlySuspects] = useState(false);\n\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q && categories.size === 0 && !onlySuspects) return undefined;\n const hits = TRACE.spans.filter(span =>\n (!q || [span.operation, span.service, ...Object.values(span.attributes ?? {}).map(String)].some(text => text.toLowerCase().includes(q))) &&\n (categories.size === 0 || categories.has(category(span))) &&\n (!onlySuspects || suspects.has(span.spanId)));\n return withAncestors(index, hits.map(span => span.spanId));\n }, [index, query, categories, onlySuspects, suspects, TRACE]);\n\n const rows = useMemo(() => buildRows(index, { collapsed, expanded, group, ...(visible ? { visible } : {}) }), [index, collapsed, expanded, group, visible]);\n\n const select = (id: string) => {\n const group = groupOf(id);\n if (group) setExpanded(previous => new Set(previous).add(group));\n onSelectSpan(id);\n };\n const toggle = (set: typeof setCollapsed, id: string) => set(previous => {\n const next = new Set(previous);\n if (!next.delete(id)) next.add(id);\n return next;\n });\n\n const selectedSpan = index.byId.get(selected);\n const selectedGroup = rows.find((row): row is Extract<Row, { type: \"group\" }> => row.type === \"group\" && row.id === selected);\n\n return (\n <div className=\"space-y-8\">\n <section className=\"space-y-4 rounded-xl border border-border bg-background p-density-4\">\n <TraceHeader index={index} trace={TRACE} />\n {TRACE.missingParents.length > 0 && <p role=\"status\">Partial trace: {TRACE.missingParents.length} parent spans are missing from this source.</p>}\n {suspects.size > 0 && (\n <Callout variant=\"warning\" title={`${suspects.size} spans run inside a nested agent but hang off its parent`}>\n <p className=\"text-sm\">\n They start and end within <code>{shortOperation(suspects.values().next().value!.operation)}</code>, yet their parent is the root span, so the nested agent looks like it made a single LLM call. This usually means the agent's context is not propagated to its database client.{\" \"}\n <Button size=\"sm\" variant=\"link\" className=\"h-auto p-0\" onClick={() => setOnlySuspects(on => !on)}>{onlySuspects ? \"Show all spans\" : \"Show only these spans\"}</Button>\n </p>\n </Callout>\n )}\n <Toolbar\n trace={TRACE}\n query={query}\n setQuery={setQuery}\n categories={categories}\n toggleCategory={c => setCategories(previous => {\n const next = new Set(previous);\n if (!next.delete(c)) next.add(c);\n return next;\n })}\n group={group}\n setGroup={setGroup}\n expandAll={() => {\n setCollapsed(new Set());\n setExpanded(new Set(rows.filter(row => row.type === \"group\").map(row => row.id)));\n }}\n collapseAll={() => {\n setExpanded(new Set());\n setCollapsed(new Set(TRACE.spans.filter(span => index.children.has(span.spanId) && !span.parentId).map(span => span.spanId)));\n }}\n shown={rows.length}\n />\n <SplitPane\n stackOnMobile\n defaultSplit={62}\n minLeft={40}\n minRight={25}\n className=\"rounded-lg border border-border\"\n left={<Waterfall index={index} rows={rows} selected={selected} onSelect={select} suspects={suspects} onToggleSpan={id => toggle(setCollapsed, id)} onToggleGroup={id => toggle(setExpanded, id)} expanded={expanded} collapsed={collapsed} />}\n right={\n <div className=\"h-72 overflow-auto p-density-3 md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n {selectedGroup ? <GroupDetail index={index} spans={selectedGroup.spans} onSelect={select} />\n : selectedSpan ? <SpanDetail index={index} span={selectedSpan} host={suspects.get(selectedSpan.spanId)} onSelect={select} />\n : <p className=\"text-sm text-muted-foreground\">Select a span.</p>}\n </div>\n }\n />\n </section>\n </div>\n );\n}\n\nfunction TraceHeader({ index, trace: TRACE }: { index: TraceIndex; trace: Trace }) {\n const { summary } = TRACE;\n const by = (c: Category) => TRACE.spans.filter(span => category(span) === c);\n const llm = by(\"llm\");\n const db = by(\"db\");\n const sum = (spans: Span[], key: string) => { const values = spans.map(span => num(span.attributes?.[key])).filter(value => value !== undefined); return values.length ? values.reduce((total, value) => total + value, 0) : undefined; };\n const root = index.roots[0]!;\n const cost = num(root.attributes?.[\"captain.cost_usd\"]);\n const budget = num(root.attributes?.[\"captain.budget.cost_usd\"]);\n const tokensIn = sum(llm, \"gen_ai.usage.input_tokens\");\n const tokensOut = sum(llm, \"gen_ai.usage.output_tokens\");\n const ms = (spans: Span[]) => spans.reduce((total, span) => total + span.durationMs, 0);\n return (\n <div className=\"space-y-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0 space-y-1\">\n \n <h2 className=\"flex items-center gap-2 text-xl font-semibold tracking-tight\">\n <Tinted icon={UiRobotAi} color={CATEGORY_COLOR.agent} />\n {shortOperation(summary.operation)}\n {summary.errors === 0 ? <Badge tone=\"success\" variant=\"soft\">no errors</Badge> : <Badge tone=\"danger\" variant=\"soft\">{summary.errors} errors</Badge>}\n </h2>\n <p className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <code>{summary.traceId}</code>\n <CopyButton value={summary.traceId} label=\"Copy trace ID\" />\n <span>· {summary.services.join(\", \")} · {new Date(summary.startedAt).toLocaleString()}</span>\n </p>\n </div>\n </div>\n <StatStrip\n items={[\n { label: \"Duration\", value: duration(summary.durationMs), sub: `${summary.spanCount} spans`, icon: UiClock },\n { label: \"LLM\", value: duration(ms(llm)), sub: `${llm.length} calls · ${metric(tokensIn)} in / ${metric(tokensOut)} out`, icon: UiSparkles },\n { label: \"Database\", value: duration(ms(db)), sub: `${db.length} calls · ${new Set(db.map(span => span.attributes?.[\"db.sql.table\"])).size} tables`, icon: UiDatabase },\n { label: \"Cost\", value: metric(cost, value => `$${value.toFixed(4)}`), sub: budget ? `of $${budget} budget` : \"budget unavailable\", icon: UiCoins },\n { label: \"Root self-time\", value: duration(selfTimeMs(index, root)), sub: \"not covered by any child span\", icon: UiRobotAi, tone: \"warning\" },\n ]}\n />\n </div>\n );\n}\n\nfunction Toolbar(props: {\n trace: Trace;\n query: string; setQuery: (q: string) => void;\n categories: Set<Category>; toggleCategory: (c: Category) => void;\n group: boolean; setGroup: (on: boolean) => void;\n expandAll: () => void; collapseAll: () => void; shown: number;\n}) {\n const counts = props.trace.spans.reduce((acc, span) => ({ ...acc, [category(span)]: (acc[category(span)] ?? 0) + 1 }), {} as Partial<Record<Category, number>>);\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <SearchInput className=\"w-72\" placeholder=\"Filter by name, table or attribute\" value={props.query} onChange={props.setQuery} />\n {(Object.keys(counts) as Category[]).map(c => {\n const on = props.categories.has(c);\n return (\n <Button key={c} size=\"sm\" variant={on ? \"default\" : \"outline\"} aria-pressed={on} onClick={() => props.toggleCategory(c)}>\n <span className=\"mr-1.5 inline-block size-2 rounded-full\" style={{ background: CATEGORY_COLOR[c] }} />\n {CATEGORY_LABEL[c]} <span className=\"ml-1 text-muted-foreground\">{counts[c]}</span>\n </Button>\n );\n })}\n <label className=\"ml-2 inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <Switch checked={props.group} aria-label=\"Group repeated database calls\" onChange={props.setGroup} />\n Group repeated DB calls\n </label>\n <div className=\"ml-auto flex items-center gap-1\">\n <span className=\"mr-2 text-xs text-muted-foreground\">{props.shown} rows</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.expandAll}><Icon icon={UiExpandAll} className=\"mr-1\" />Expand all</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.collapseAll}><Icon icon={UiCollapseAll} className=\"mr-1\" />Collapse</Button>\n </div>\n </div>\n );\n}\n\nfunction Waterfall(props: {\n index: TraceIndex; rows: Row[]; selected: string; onSelect: (id: string) => void; suspects: Map<string, Span>;\n onToggleSpan: (id: string) => void; onToggleGroup: (id: string) => void; expanded: Set<string>; collapsed: Set<string>;\n}) {\n const { index, rows, selected, onSelect } = props;\n const total = Math.max(index.totalMs, 0.001);\n const step = niceStep(total);\n const ticks = Array.from({ length: Math.floor(total / step) + 1 }, (_, i) => i * step);\n const scroller = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n scroller.current?.querySelector<HTMLElement>(`[data-row-id=\"${CSS.escape(selected)}\"]`)?.scrollIntoView?.({ block: \"nearest\" });\n }, [selected]);\n\n const onKey = (event: KeyboardEvent) => {\n const at = rows.findIndex(row => row.id === selected);\n const next = event.key === \"ArrowDown\" ? rows[at + 1] : event.key === \"ArrowUp\" ? rows[at - 1] : undefined;\n const row = rows[at];\n if (next) onSelect(next.id);\n else if (row && (event.key === \"ArrowRight\" || event.key === \"ArrowLeft\")) {\n const open = row.type === \"group\" ? props.expanded.has(row.id) : !props.collapsed.has(row.id);\n const want = event.key === \"ArrowRight\";\n if (open !== want && (row.type === \"group\" || row.childCount > 0)) (row.type === \"group\" ? props.onToggleGroup : props.onToggleSpan)(row.id);\n } else return;\n event.preventDefault();\n };\n\n const pct = (ms: number) => `${(ms / total) * 100}%`;\n return (\n <div ref={scroller} tabIndex={0} onKeyDown={onKey} aria-label=\"Span waterfall\" className=\"h-72 overflow-auto text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n <div className=\"min-w-[40rem]\">\n <div className=\"sticky top-0 z-10 grid border-b border-border bg-muted text-muted-foreground\" style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }}>\n <div className=\"flex items-center px-density-2 font-medium\">Span</div>\n <div className=\"relative mr-12\">\n {ticks.map(t => <span key={t} className=\"absolute top-1.5 -translate-x-1/2 tabular-nums\" style={{ left: pct(t) }}>{t === 0 ? \"0\" : duration(t)}</span>)}\n </div>\n </div>\n <div className=\"relative\">\n <div aria-hidden className=\"pointer-events-none absolute inset-y-0 grid\" style={{ gridTemplateColumns: NAME_COLUMN, left: 0, right: 0 }}>\n <div />\n <div className=\"relative mr-12\">{ticks.map(t => <span key={t} className=\"absolute inset-y-0 border-l border-border\" style={{ left: pct(t), opacity: 0.6 }} />)}</div>\n </div>\n {rows.map(row => <WaterfallRow key={row.id} {...props} row={row} pct={pct} active={row.id === selected} />)}\n {rows.length === 0 && <p className=\"p-density-4 text-sm text-muted-foreground\">No spans match these filters.</p>}\n </div>\n </div>\n </div>\n );\n}\n\nfunction WaterfallRow({ index, row, active, pct, onSelect, suspects, onToggleSpan, onToggleGroup, expanded, collapsed }: Parameters<typeof Waterfall>[0] & { row: Row; active: boolean; pct: (ms: number) => string }) {\n const indent = { paddingLeft: `${row.depth * 14 + 4}px` };\n const toggleButton = (open: boolean, onClick: () => void, label: string) => (\n <button type=\"button\" aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`} className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted\" onClick={event => { event.stopPropagation(); onClick(); }}>\n <Icon icon={open ? UiChevronDown : UiChevronRight} />\n </button>\n );\n const rowClass = `relative grid w-full cursor-pointer items-center text-left ${active ? \"bg-accent\" : \"hover:bg-muted\"}`;\n\n if (row.type === \"group\") {\n const open = expanded.has(row.id);\n const ops = Object.entries(row.spans.reduce<Record<string, number>>((acc, span) => ({ ...acc, [span.operation.replace(\"gorm.\", \"\")]: (acc[span.operation.replace(\"gorm.\", \"\")] ?? 0) + 1 }), {}));\n const first = index.offsetMs(row.spans[0]!);\n const last = row.spans.at(-1)!;\n const end = index.offsetMs(last) + last.durationMs;\n const busy = row.spans.reduce((total, span) => total + span.durationMs, 0);\n const suspectCount = row.spans.filter(span => suspects.has(span.spanId)).length;\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {toggleButton(open, () => onToggleGroup(row.id), \"database group\")}\n <Tinted icon={UiDatabase} color={CATEGORY_COLOR.db} />\n <span className=\"truncate\"><span className=\"font-medium\">{row.spans.length} DB calls</span> <span className=\"text-muted-foreground\">{ops.map(([op, n]) => `${op} ×${n}`).join(\", \")}</span></span>\n {suspectCount > 0 && <><Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label={`${suspectCount} calls run inside a nested agent but are parented elsewhere`} /><span className=\"text-muted-foreground\">{suspectCount}</span></>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: pct(first), width: pct(end - first), top: 11, height: 6, background: CATEGORY_COLOR.db, opacity: 0.18 }} />\n {row.spans.map(span => <span key={span.spanId} className=\"absolute rounded-sm\" style={{ left: pct(index.offsetMs(span)), width: pct(span.durationMs), minWidth: 2, top: 8, height: 12, background: CATEGORY_COLOR.db }} />)}\n <BarLabel start={(first / Math.max(index.totalMs, 0.001)) * 100} end={(end / Math.max(index.totalMs, 0.001)) * 100} text={`${duration(busy)} busy`} />\n </div>\n </div>\n );\n }\n\n const { span } = row;\n const c = category(span);\n const parent = span.parentId ? index.byId.get(span.parentId) : undefined;\n const left = (index.offsetMs(span) / Math.max(index.totalMs, 0.001)) * 100;\n const width = (span.durationMs / Math.max(index.totalMs, 0.001)) * 100;\n const error = isError(span);\n const label = shortOperation(span.operation);\n const table = span.attributes?.[\"db.sql.table\"];\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)} title={span.operation}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {row.childCount > 0 ? toggleButton(!collapsed.has(span.spanId), () => onToggleSpan(span.spanId), label) : <span className=\"size-5 shrink-0\" />}\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n {parent && parent.service !== span.service && <Badge size=\"sm\" variant=\"outline\">{span.service}</Badge>}\n <span className={`truncate ${c === \"db\" ? \"\" : \"font-medium\"}`}>{label}</span>\n {typeof table === \"string\" && <span className=\"truncate text-muted-foreground\">{table}</span>}\n {row.childCount > 0 && collapsed.has(span.spanId) && <span className=\"text-muted-foreground\">+{row.childCount}</span>}\n {suspects.has(span.spanId) && <Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label=\"Runs inside a nested agent but is parented elsewhere\" />}\n {error && <Badge size=\"sm\" tone=\"danger\" variant=\"soft\">error</Badge>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: `${left}%`, width: `${width}%`, minWidth: 2, top: 7, height: 14, background: error ? \"var(--destructive)\" : CATEGORY_COLOR[c], opacity: c === \"agent\" ? 0.85 : 1 }} />\n <BarLabel start={left} end={left + width} inside={width > 14} text={duration(span.durationMs)} />\n </div>\n </div>\n );\n}\n\n/** Duration next to the bar's end — or inside a wide bar — and flipped left of the start near the right edge. */\nfunction BarLabel({ start, end, inside, text }: { start: number; end: number; inside?: boolean; text: string }) {\n if (inside) return <span className=\"absolute top-1.5 px-1.5 font-medium text-white tabular-nums\" style={{ left: `${start}%` }}>{text}</span>;\n const position = end > 90 ? { right: `${100 - start}%`, paddingRight: 4 } : { left: `${end}%`, paddingLeft: 4 };\n return <span className=\"absolute top-1.5 whitespace-nowrap tabular-nums text-muted-foreground\" style={position}>{text}</span>;\n}\n\nfunction SpanDetail({ index, span, host, onSelect }: { index: TraceIndex; span: Span; host: Span | undefined; onSelect: (id: string) => void }) {\n const c = category(span);\n const ancestors: Span[] = [];\n for (let p = span.parentId ? index.byId.get(span.parentId) : undefined; p; p = p.parentId ? index.byId.get(p.parentId) : undefined) ancestors.unshift(p);\n const attributes = Object.entries(span.attributes ?? {});\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n {ancestors.length > 0 && (\n <p className=\"flex flex-wrap items-center gap-1 text-xs text-muted-foreground\">\n {ancestors.map(a => (\n <span key={a.spanId} className=\"inline-flex items-center gap-1\">\n <button type=\"button\" className=\"hover:underline\" onClick={() => onSelect(a.spanId)}>{shortOperation(a.operation)}</button>\n <Icon icon={UiChevronRight} />\n </span>\n ))}\n </p>\n )}\n <h3 className=\"flex items-center gap-2 text-base font-semibold\" title={span.operation}>\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n <span className=\"truncate\">{shortOperation(span.operation)}</span>\n </h3>\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs\">\n <Badge variant=\"soft\" size=\"sm\">{CATEGORY_LABEL[c]}</Badge>\n {span.kind && <Badge variant=\"outline\" size=\"sm\">{span.kind}</Badge>}\n {isError(span) && <Badge tone=\"danger\" variant=\"soft\" size=\"sm\">error</Badge>}\n <span className=\"tabular-nums text-muted-foreground\">{duration(span.durationMs)} · starts at +{duration(index.offsetMs(span))}</span>\n <span className=\"ml-auto inline-flex items-center gap-1 text-muted-foreground\"><code>{span.spanId}</code><CopyButton value={span.spanId} label=\"Copy span ID\" /></span>\n </div>\n </div>\n {host && (\n <Callout variant=\"warning\" title=\"Likely mis-parented\">\n <p className=\"text-sm\">Runs entirely inside <button type=\"button\" className=\"underline\" onClick={() => onSelect(host.spanId)}>{shortOperation(host.operation)}</button> but its parent is {span.parentId ? shortOperation(index.byId.get(span.parentId)?.operation ?? span.parentId) : \"missing\"}.</p>\n </Callout>\n )}\n {c === \"agent\" && <AgentCard index={index} span={span} />}\n {c === \"llm\" && <LlmCard span={span} />}\n {c === \"db\" && <DbCard span={span} />}\n <Section title={`All attributes (${attributes.length})`} defaultOpen={c === \"other\"}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={attributes.map(([key, value]) => ({ key, value }))} />\n </Section>\n {span.otlp && <Section title=\"OpenTelemetry metadata\" defaultOpen={false}><CodeBlock language=\"json\" source={JSON.stringify(span.otlp, null, 2)} jsonDefaultOpenDepth={4} copyable /></Section>}\n <Section title={`Resource (${Object.keys(span.resource ?? {}).length})`} defaultOpen={false}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={Object.entries(span.resource ?? {}).map(([key, value]) => ({ key, value }))} />\n </Section>\n </div>\n );\n}\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OtelTraceDetail.cjs","names":["UiRobotAi","UiSparkles","UiDatabase","UiClock","useMemo","indexTrace","misparented","useState","buildRows","category","withAncestors","Callout","shortOperation","Button","SplitPane","GroupDetail","Badge","_Fragment","CopyButton","Tinted","CATEGORY_COLOR","num","StatStrip","duration","metric","UiCoins","selfTimeMs","SearchInput","CATEGORY_LABEL","Switch","Icon","UiExpandAll","UiCollapseAll","niceStep","useRef","UiChevronDown","UiChevronRight","UiWarningTriangle","isError","AgentCard","LlmCard","DbCard","Section","Properties","CodeBlock"],"sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"sourcesContent":["import { Tinted } from \"./SpanCategory\";\nimport { AgentCard, LlmCard, DbCard, GroupDetail } from \"./SpanCards\";\nimport { metric } from \"./metrics\";\nimport { StatStrip } from \"../../StatStrip\";\nimport { Icon } from \"../../Icon\";\nimport { Callout } from \"../../Callout\";\nimport { Badge } from \"../../Badge\";\nimport { CodeBlock } from \"../../CodeBlock\";\nimport { Properties } from \"../../Properties\";\n/**\n * OpenTelemetry waterfall with grouped calls and an adjacent span inspector.\n */\nimport { useEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport {\n Button,\n CopyButton,\n SearchInput,\n Section,\n SplitPane,\n Switch,\n} from \"../../../components\";\nimport {\n UiChevronDown,\n UiChevronRight,\n UiClock,\n UiCoins,\n UiCollapseAll,\n UiDatabase,\n UiExpandAll,\n UiRobotAi,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\n\n\nimport {\n CATEGORY_COLOR,\n CATEGORY_LABEL,\n buildRows,\n category,\n duration,\n indexTrace,\n isError,\n misparented,\n niceStep,\n num,\n selfTimeMs,\n shortOperation,\n withAncestors,\n type Category,\n type Row,\n type Span,\n type TraceIndex,\n type Trace,\n} from \"./model\";\n\nconst CATEGORY_ICON = { agent: UiRobotAi, llm: UiSparkles, db: UiDatabase, other: UiClock } as const;\nconst ROW_HEIGHT = 28;\n\nconst NAME_COLUMN = \"minmax(15rem, 36%) minmax(0, 1fr)\";\n\n\nexport type OtelTraceDetailProps = {\n trace: Trace;\n selectedSpanId?: string;\n onSelectSpan: (id: string) => void;\n /** Places the trace title elsewhere, e.g. an app shell's top bar; rendered inline when unset. */\n renderTitle?: (title: ReactNode) => ReactNode;\n};\n\nexport function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan, renderTitle }: OtelTraceDetailProps) {\n const index = useMemo(() => indexTrace(TRACE), [TRACE]);\n const suspects = useMemo(() => misparented(index), [index]);\n const selected = selectedSpanId ?? TRACE.spans[0]?.spanId ?? \"\";\n const [collapsed, setCollapsed] = useState(new Set<string>());\n const groupOf = (id: string) => buildRows(index, { collapsed: new Set(), expanded: new Set(), group: true }).find(row => row.type === \"group\" && row.spans.some(span => span.spanId === id))?.id;\n const [expanded, setExpanded] = useState(() => new Set([groupOf(selected)].filter(id => id !== undefined)));\n const [group, setGroup] = useState(true);\n const [query, setQuery] = useState(\"\");\n const [categories, setCategories] = useState(new Set<Category>());\n const [onlySuspects, setOnlySuspects] = useState(false);\n\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q && categories.size === 0 && !onlySuspects) return undefined;\n const hits = TRACE.spans.filter(span =>\n (!q || [span.operation, span.service, ...Object.values(span.attributes ?? {}).map(String)].some(text => text.toLowerCase().includes(q))) &&\n (categories.size === 0 || categories.has(category(span))) &&\n (!onlySuspects || suspects.has(span.spanId)));\n return withAncestors(index, hits.map(span => span.spanId));\n }, [index, query, categories, onlySuspects, suspects, TRACE]);\n\n const rows = useMemo(() => buildRows(index, { collapsed, expanded, group, ...(visible ? { visible } : {}) }), [index, collapsed, expanded, group, visible]);\n\n const select = (id: string) => {\n const group = groupOf(id);\n if (group) setExpanded(previous => new Set(previous).add(group));\n onSelectSpan(id);\n };\n const toggle = (set: typeof setCollapsed, id: string) => set(previous => {\n const next = new Set(previous);\n if (!next.delete(id)) next.add(id);\n return next;\n });\n\n const selectedSpan = index.byId.get(selected);\n const selectedGroup = rows.find((row): row is Extract<Row, { type: \"group\" }> => row.type === \"group\" && row.id === selected);\n\n return (\n <div className=\"space-y-8\">\n <section className=\"space-y-4 rounded-xl border border-border bg-background p-density-4\">\n {renderTitle ? renderTitle(<TraceTitle trace={TRACE} compact />) : <TraceTitle trace={TRACE} />}\n <TraceStats index={index} trace={TRACE} />\n {TRACE.missingParents.length > 0 && <p role=\"status\">Partial trace: {TRACE.missingParents.length} parent spans are missing from this source.</p>}\n {suspects.size > 0 && (\n <Callout variant=\"warning\" title={`${suspects.size} spans run inside a nested agent but hang off its parent`}>\n <p className=\"text-sm\">\n They start and end within <code>{shortOperation(suspects.values().next().value!.operation)}</code>, yet their parent is the root span, so the nested agent looks like it made a single LLM call. This usually means the agent's context is not propagated to its database client.{\" \"}\n <Button size=\"sm\" variant=\"link\" className=\"h-auto p-0\" onClick={() => setOnlySuspects(on => !on)}>{onlySuspects ? \"Show all spans\" : \"Show only these spans\"}</Button>\n </p>\n </Callout>\n )}\n <Toolbar\n trace={TRACE}\n query={query}\n setQuery={setQuery}\n categories={categories}\n toggleCategory={c => setCategories(previous => {\n const next = new Set(previous);\n if (!next.delete(c)) next.add(c);\n return next;\n })}\n group={group}\n setGroup={setGroup}\n expandAll={() => {\n setCollapsed(new Set());\n setExpanded(new Set(rows.filter(row => row.type === \"group\").map(row => row.id)));\n }}\n collapseAll={() => {\n setExpanded(new Set());\n setCollapsed(new Set(TRACE.spans.filter(span => index.children.has(span.spanId) && !span.parentId).map(span => span.spanId)));\n }}\n shown={rows.length}\n />\n <SplitPane\n stackOnMobile\n defaultSplit={62}\n minLeft={40}\n minRight={25}\n className=\"rounded-lg border border-border\"\n left={<Waterfall index={index} rows={rows} selected={selected} onSelect={select} suspects={suspects} onToggleSpan={id => toggle(setCollapsed, id)} onToggleGroup={id => toggle(setExpanded, id)} expanded={expanded} collapsed={collapsed} />}\n right={\n <div className=\"h-72 overflow-auto p-density-3 md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n {selectedGroup ? <GroupDetail index={index} spans={selectedGroup.spans} onSelect={select} />\n : selectedSpan ? <SpanDetail index={index} span={selectedSpan} host={suspects.get(selectedSpan.spanId)} onSelect={select} />\n : <p className=\"text-sm text-muted-foreground\">Select a span.</p>}\n </div>\n }\n />\n </section>\n </div>\n );\n}\n\nfunction TraceTitle({ trace: { summary }, compact }: { trace: Trace; compact?: boolean }) {\n const status = summary.errors === 0 ? <Badge tone=\"success\" variant=\"soft\">no errors</Badge> : <Badge tone=\"danger\" variant=\"soft\">{summary.errors} errors</Badge>;\n const meta = (\n <>\n <code>{summary.traceId}</code>\n <CopyButton value={summary.traceId} label=\"Copy trace ID\" />\n <span>· {summary.services.join(\", \")} · {new Date(summary.startedAt).toLocaleString()}</span>\n </>\n );\n if (compact)\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-density-2\">\n <h1 className=\"flex min-w-0 items-center gap-2 text-base font-semibold tracking-tight\" title={summary.operation}>\n <Tinted icon={UiRobotAi} color={CATEGORY_COLOR.agent} />\n <span className=\"min-w-0 truncate\">{shortOperation(summary.operation)}</span>\n </h1>\n {status}\n <p className=\"hidden min-w-0 items-center gap-2 truncate text-xs text-muted-foreground lg:flex\">{meta}</p>\n </div>\n );\n return (\n <div className=\"min-w-0 space-y-1\">\n <h2 className=\"flex items-center gap-2 text-xl font-semibold tracking-tight\">\n <Tinted icon={UiRobotAi} color={CATEGORY_COLOR.agent} />\n {shortOperation(summary.operation)}\n {status}\n </h2>\n <p className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">{meta}</p>\n </div>\n );\n}\n\nfunction TraceStats({ index, trace: TRACE }: { index: TraceIndex; trace: Trace }) {\n const { summary } = TRACE;\n const by = (c: Category) => TRACE.spans.filter(span => category(span) === c);\n const llm = by(\"llm\");\n const db = by(\"db\");\n const sum = (spans: Span[], key: string) => { const values = spans.map(span => num(span.attributes?.[key])).filter(value => value !== undefined); return values.length ? values.reduce((total, value) => total + value, 0) : undefined; };\n const root = index.roots[0]!;\n const cost = num(root.attributes?.[\"captain.cost_usd\"]);\n const budget = num(root.attributes?.[\"captain.budget.cost_usd\"]);\n const tokensIn = sum(llm, \"gen_ai.usage.input_tokens\");\n const tokensOut = sum(llm, \"gen_ai.usage.output_tokens\");\n const ms = (spans: Span[]) => spans.reduce((total, span) => total + span.durationMs, 0);\n return (\n <StatStrip\n items={[\n { label: \"Duration\", value: duration(summary.durationMs), sub: `${summary.spanCount} spans`, icon: UiClock },\n { label: \"LLM\", value: duration(ms(llm)), sub: `${llm.length} calls · ${metric(tokensIn)} in / ${metric(tokensOut)} out`, icon: UiSparkles },\n { label: \"Database\", value: duration(ms(db)), sub: `${db.length} calls · ${new Set(db.map(span => span.attributes?.[\"db.sql.table\"])).size} tables`, icon: UiDatabase },\n { label: \"Cost\", value: metric(cost, value => `$${value.toFixed(4)}`), sub: budget ? `of $${budget} budget` : \"budget unavailable\", icon: UiCoins },\n { label: \"Root self-time\", value: duration(selfTimeMs(index, root)), sub: \"not covered by any child span\", icon: UiRobotAi, tone: \"warning\" },\n ]}\n />\n );\n}\n\nfunction Toolbar(props: {\n trace: Trace;\n query: string; setQuery: (q: string) => void;\n categories: Set<Category>; toggleCategory: (c: Category) => void;\n group: boolean; setGroup: (on: boolean) => void;\n expandAll: () => void; collapseAll: () => void; shown: number;\n}) {\n const counts = props.trace.spans.reduce((acc, span) => ({ ...acc, [category(span)]: (acc[category(span)] ?? 0) + 1 }), {} as Partial<Record<Category, number>>);\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <SearchInput className=\"w-72\" placeholder=\"Filter by name, table or attribute\" value={props.query} onChange={props.setQuery} />\n {(Object.keys(counts) as Category[]).map(c => {\n const on = props.categories.has(c);\n return (\n <Button key={c} size=\"sm\" variant={on ? \"default\" : \"outline\"} aria-pressed={on} onClick={() => props.toggleCategory(c)}>\n <span className=\"mr-1.5 inline-block size-2 rounded-full\" style={{ background: CATEGORY_COLOR[c] }} />\n {CATEGORY_LABEL[c]} <span className=\"ml-1 text-muted-foreground\">{counts[c]}</span>\n </Button>\n );\n })}\n <label className=\"ml-2 inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <Switch checked={props.group} aria-label=\"Group repeated database calls\" onChange={props.setGroup} />\n Group repeated DB calls\n </label>\n <div className=\"ml-auto flex items-center gap-1\">\n <span className=\"mr-2 text-xs text-muted-foreground\">{props.shown} rows</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.expandAll}><Icon icon={UiExpandAll} className=\"mr-1\" />Expand all</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={props.collapseAll}><Icon icon={UiCollapseAll} className=\"mr-1\" />Collapse</Button>\n </div>\n </div>\n );\n}\n\nfunction Waterfall(props: {\n index: TraceIndex; rows: Row[]; selected: string; onSelect: (id: string) => void; suspects: Map<string, Span>;\n onToggleSpan: (id: string) => void; onToggleGroup: (id: string) => void; expanded: Set<string>; collapsed: Set<string>;\n}) {\n const { index, rows, selected, onSelect } = props;\n const total = Math.max(index.totalMs, 0.001);\n const step = niceStep(total);\n const ticks = Array.from({ length: Math.floor(total / step) + 1 }, (_, i) => i * step);\n const scroller = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n scroller.current?.querySelector<HTMLElement>(`[data-row-id=\"${CSS.escape(selected)}\"]`)?.scrollIntoView?.({ block: \"nearest\" });\n }, [selected]);\n\n const onKey = (event: KeyboardEvent) => {\n const at = rows.findIndex(row => row.id === selected);\n const next = event.key === \"ArrowDown\" ? rows[at + 1] : event.key === \"ArrowUp\" ? rows[at - 1] : undefined;\n const row = rows[at];\n if (next) onSelect(next.id);\n else if (row && (event.key === \"ArrowRight\" || event.key === \"ArrowLeft\")) {\n const open = row.type === \"group\" ? props.expanded.has(row.id) : !props.collapsed.has(row.id);\n const want = event.key === \"ArrowRight\";\n if (open !== want && (row.type === \"group\" || row.childCount > 0)) (row.type === \"group\" ? props.onToggleGroup : props.onToggleSpan)(row.id);\n } else return;\n event.preventDefault();\n };\n\n const pct = (ms: number) => `${(ms / total) * 100}%`;\n return (\n <div ref={scroller} tabIndex={0} onKeyDown={onKey} aria-label=\"Span waterfall\" className=\"h-72 overflow-auto text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring md:h-[calc(100dvh-14rem)] md:min-h-[30rem]\">\n <div className=\"min-w-[40rem]\">\n <div className=\"sticky top-0 z-10 grid border-b border-border bg-muted text-muted-foreground\" style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }}>\n <div className=\"flex items-center px-density-2 font-medium\">Span</div>\n <div className=\"relative mr-12\">\n {ticks.map(t => <span key={t} className=\"absolute top-1.5 -translate-x-1/2 tabular-nums\" style={{ left: pct(t) }}>{t === 0 ? \"0\" : duration(t)}</span>)}\n </div>\n </div>\n <div className=\"relative\">\n <div aria-hidden className=\"pointer-events-none absolute inset-y-0 grid\" style={{ gridTemplateColumns: NAME_COLUMN, left: 0, right: 0 }}>\n <div />\n <div className=\"relative mr-12\">{ticks.map(t => <span key={t} className=\"absolute inset-y-0 border-l border-border\" style={{ left: pct(t), opacity: 0.6 }} />)}</div>\n </div>\n {rows.map(row => <WaterfallRow key={row.id} {...props} row={row} pct={pct} active={row.id === selected} />)}\n {rows.length === 0 && <p className=\"p-density-4 text-sm text-muted-foreground\">No spans match these filters.</p>}\n </div>\n </div>\n </div>\n );\n}\n\nfunction WaterfallRow({ index, row, active, pct, onSelect, suspects, onToggleSpan, onToggleGroup, expanded, collapsed }: Parameters<typeof Waterfall>[0] & { row: Row; active: boolean; pct: (ms: number) => string }) {\n const indent = { paddingLeft: `${row.depth * 14 + 4}px` };\n const toggleButton = (open: boolean, onClick: () => void, label: string) => (\n <button type=\"button\" aria-label={`${open ? \"Collapse\" : \"Expand\"} ${label}`} className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted\" onClick={event => { event.stopPropagation(); onClick(); }}>\n <Icon icon={open ? UiChevronDown : UiChevronRight} />\n </button>\n );\n const rowClass = `relative grid w-full cursor-pointer items-center text-left ${active ? \"bg-accent\" : \"hover:bg-muted\"}`;\n\n if (row.type === \"group\") {\n const open = expanded.has(row.id);\n const ops = Object.entries(row.spans.reduce<Record<string, number>>((acc, span) => ({ ...acc, [span.operation.replace(\"gorm.\", \"\")]: (acc[span.operation.replace(\"gorm.\", \"\")] ?? 0) + 1 }), {}));\n const first = index.offsetMs(row.spans[0]!);\n const last = row.spans.at(-1)!;\n const end = index.offsetMs(last) + last.durationMs;\n const busy = row.spans.reduce((total, span) => total + span.durationMs, 0);\n const suspectCount = row.spans.filter(span => suspects.has(span.spanId)).length;\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {toggleButton(open, () => onToggleGroup(row.id), \"database group\")}\n <Tinted icon={UiDatabase} color={CATEGORY_COLOR.db} />\n <span className=\"truncate\"><span className=\"font-medium\">{row.spans.length} DB calls</span> <span className=\"text-muted-foreground\">{ops.map(([op, n]) => `${op} ×${n}`).join(\", \")}</span></span>\n {suspectCount > 0 && <><Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label={`${suspectCount} calls run inside a nested agent but are parented elsewhere`} /><span className=\"text-muted-foreground\">{suspectCount}</span></>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: pct(first), width: pct(end - first), top: 11, height: 6, background: CATEGORY_COLOR.db, opacity: 0.18 }} />\n {row.spans.map(span => <span key={span.spanId} className=\"absolute rounded-sm\" style={{ left: pct(index.offsetMs(span)), width: pct(span.durationMs), minWidth: 2, top: 8, height: 12, background: CATEGORY_COLOR.db }} />)}\n <BarLabel start={(first / Math.max(index.totalMs, 0.001)) * 100} end={(end / Math.max(index.totalMs, 0.001)) * 100} text={`${duration(busy)} busy`} />\n </div>\n </div>\n );\n }\n\n const { span } = row;\n const c = category(span);\n const parent = span.parentId ? index.byId.get(span.parentId) : undefined;\n const left = (index.offsetMs(span) / Math.max(index.totalMs, 0.001)) * 100;\n const width = (span.durationMs / Math.max(index.totalMs, 0.001)) * 100;\n const error = isError(span);\n const label = shortOperation(span.operation);\n const table = span.attributes?.[\"db.sql.table\"];\n return (\n <div role=\"button\" tabIndex={-1} data-row-id={row.id} aria-selected={active} className={rowClass} style={{ gridTemplateColumns: NAME_COLUMN, height: ROW_HEIGHT }} onClick={() => onSelect(row.id)} title={span.operation}>\n <div className=\"flex min-w-0 items-center gap-1 pr-2\" style={indent}>\n {row.childCount > 0 ? toggleButton(!collapsed.has(span.spanId), () => onToggleSpan(span.spanId), label) : <span className=\"size-5 shrink-0\" />}\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n {parent && parent.service !== span.service && <Badge size=\"sm\" variant=\"outline\">{span.service}</Badge>}\n <span className={`truncate ${c === \"db\" ? \"\" : \"font-medium\"}`}>{label}</span>\n {typeof table === \"string\" && <span className=\"truncate text-muted-foreground\">{table}</span>}\n {row.childCount > 0 && collapsed.has(span.spanId) && <span className=\"text-muted-foreground\">+{row.childCount}</span>}\n {suspects.has(span.spanId) && <Tinted icon={UiWarningTriangle} color=\"var(--fs-warning)\" label=\"Runs inside a nested agent but is parented elsewhere\" />}\n {error && <Badge size=\"sm\" tone=\"danger\" variant=\"soft\">error</Badge>}\n </div>\n <div className=\"relative mr-12 h-full\">\n <span className=\"absolute rounded-sm\" style={{ left: `${left}%`, width: `${width}%`, minWidth: 2, top: 7, height: 14, background: error ? \"var(--destructive)\" : CATEGORY_COLOR[c], opacity: c === \"agent\" ? 0.85 : 1 }} />\n <BarLabel start={left} end={left + width} inside={width > 14} text={duration(span.durationMs)} />\n </div>\n </div>\n );\n}\n\n/** Duration next to the bar's end — or inside a wide bar — and flipped left of the start near the right edge. */\nfunction BarLabel({ start, end, inside, text }: { start: number; end: number; inside?: boolean; text: string }) {\n if (inside) return <span className=\"absolute top-1.5 px-1.5 font-medium text-white tabular-nums\" style={{ left: `${start}%` }}>{text}</span>;\n const position = end > 90 ? { right: `${100 - start}%`, paddingRight: 4 } : { left: `${end}%`, paddingLeft: 4 };\n return <span className=\"absolute top-1.5 whitespace-nowrap tabular-nums text-muted-foreground\" style={position}>{text}</span>;\n}\n\nfunction SpanDetail({ index, span, host, onSelect }: { index: TraceIndex; span: Span; host: Span | undefined; onSelect: (id: string) => void }) {\n const c = category(span);\n const ancestors: Span[] = [];\n for (let p = span.parentId ? index.byId.get(span.parentId) : undefined; p; p = p.parentId ? index.byId.get(p.parentId) : undefined) ancestors.unshift(p);\n const attributes = Object.entries(span.attributes ?? {});\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n {ancestors.length > 0 && (\n <p className=\"flex flex-wrap items-center gap-1 text-xs text-muted-foreground\">\n {ancestors.map(a => (\n <span key={a.spanId} className=\"inline-flex items-center gap-1\">\n <button type=\"button\" className=\"hover:underline\" onClick={() => onSelect(a.spanId)}>{shortOperation(a.operation)}</button>\n <Icon icon={UiChevronRight} />\n </span>\n ))}\n </p>\n )}\n <h3 className=\"flex items-center gap-2 text-base font-semibold\" title={span.operation}>\n <Tinted icon={CATEGORY_ICON[c]} color={CATEGORY_COLOR[c]} />\n <span className=\"truncate\">{shortOperation(span.operation)}</span>\n </h3>\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs\">\n <Badge variant=\"soft\" size=\"sm\">{CATEGORY_LABEL[c]}</Badge>\n {span.kind && <Badge variant=\"outline\" size=\"sm\">{span.kind}</Badge>}\n {isError(span) && <Badge tone=\"danger\" variant=\"soft\" size=\"sm\">error</Badge>}\n <span className=\"tabular-nums text-muted-foreground\">{duration(span.durationMs)} · starts at +{duration(index.offsetMs(span))}</span>\n <span className=\"ml-auto inline-flex items-center gap-1 text-muted-foreground\"><code>{span.spanId}</code><CopyButton value={span.spanId} label=\"Copy span ID\" /></span>\n </div>\n </div>\n {host && (\n <Callout variant=\"warning\" title=\"Likely mis-parented\">\n <p className=\"text-sm\">Runs entirely inside <button type=\"button\" className=\"underline\" onClick={() => onSelect(host.spanId)}>{shortOperation(host.operation)}</button> but its parent is {span.parentId ? shortOperation(index.byId.get(span.parentId)?.operation ?? span.parentId) : \"missing\"}.</p>\n </Callout>\n )}\n {c === \"agent\" && <AgentCard index={index} span={span} />}\n {c === \"llm\" && <LlmCard span={span} />}\n {c === \"db\" && <DbCard span={span} />}\n <Section title={`All attributes (${attributes.length})`} defaultOpen={c === \"other\"}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={attributes.map(([key, value]) => ({ key, value }))} />\n </Section>\n {span.otlp && <Section title=\"OpenTelemetry metadata\" defaultOpen={false}><CodeBlock language=\"json\" source={JSON.stringify(span.otlp, null, 2)} jsonDefaultOpenDepth={4} copyable /></Section>}\n <Section title={`Resource (${Object.keys(span.resource ?? {}).length})`} defaultOpen={false}>\n <Properties renderLabel={key => <code className=\"text-xs\">{key}</code>} items={Object.entries(span.resource ?? {}).map(([key, value]) => ({ key, value }))} />\n </Section>\n </div>\n );\n}\n\n"],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { Trace } from './model.js';
|
|
2
|
-
export
|
|
3
|
+
export type OtelTraceDetailProps = {
|
|
3
4
|
trace: Trace;
|
|
4
5
|
selectedSpanId?: string;
|
|
5
6
|
onSelectSpan: (id: string) => void;
|
|
6
|
-
|
|
7
|
+
/** Places the trace title elsewhere, e.g. an app shell's top bar; rendered inline when unset. */
|
|
8
|
+
renderTitle?: (title: ReactNode) => ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare function OtelTraceDetail({ trace: TRACE, selectedSpanId, onSelectSpan, renderTitle }: OtelTraceDetailProps): import("react").JSX.Element;
|
|
7
11
|
//# sourceMappingURL=OtelTraceDetail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelTraceDetail.d.ts","sourceRoot":"","sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OtelTraceDetail.d.ts","sourceRoot":"","sources":["../../../../src/data/traces/otel/OtelTraceDetail.tsx"],"names":[],"mappings":"AASA;;GAEG;AACH,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAuBjG,OAAO,EAkBL,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAQjB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iGAAiG;IACjG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;CAC/C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,oBAAoB,+BA4FhH"}
|