@dudousxd/nestjs-telescope-ui 1.0.0
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/CHANGELOG.md +349 -0
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/telescope-client.d.ts +63 -0
- package/dist/client/telescope-client.d.ts.map +1 -0
- package/dist/client/telescope-client.js +87 -0
- package/dist/client/telescope-client.js.map +1 -0
- package/dist/client/types.d.ts +267 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/react/components/batch-timeline.d.ts +7 -0
- package/dist/react/components/batch-timeline.d.ts.map +1 -0
- package/dist/react/components/batch-timeline.js +10 -0
- package/dist/react/components/batch-timeline.js.map +1 -0
- package/dist/react/components/cache-badge.d.ts +20 -0
- package/dist/react/components/cache-badge.d.ts.map +1 -0
- package/dist/react/components/cache-badge.js +42 -0
- package/dist/react/components/cache-badge.js.map +1 -0
- package/dist/react/components/charts/area-chart-card.d.ts +16 -0
- package/dist/react/components/charts/area-chart-card.d.ts.map +1 -0
- package/dist/react/components/charts/area-chart-card.js +12 -0
- package/dist/react/components/charts/area-chart-card.js.map +1 -0
- package/dist/react/components/charts/bar-chart-card.d.ts +26 -0
- package/dist/react/components/charts/bar-chart-card.d.ts.map +1 -0
- package/dist/react/components/charts/bar-chart-card.js +27 -0
- package/dist/react/components/charts/bar-chart-card.js.map +1 -0
- package/dist/react/components/charts/chart-card.d.ts +11 -0
- package/dist/react/components/charts/chart-card.d.ts.map +1 -0
- package/dist/react/components/charts/chart-card.js +9 -0
- package/dist/react/components/charts/chart-card.js.map +1 -0
- package/dist/react/components/charts/chart-theme.d.ts +41 -0
- package/dist/react/components/charts/chart-theme.d.ts.map +1 -0
- package/dist/react/components/charts/chart-theme.js +53 -0
- package/dist/react/components/charts/chart-theme.js.map +1 -0
- package/dist/react/components/charts/index.d.ts +6 -0
- package/dist/react/components/charts/index.d.ts.map +1 -0
- package/dist/react/components/charts/index.js +6 -0
- package/dist/react/components/charts/index.js.map +1 -0
- package/dist/react/components/charts/stacked-area-chart-card.d.ts +14 -0
- package/dist/react/components/charts/stacked-area-chart-card.d.ts.map +1 -0
- package/dist/react/components/charts/stacked-area-chart-card.js +13 -0
- package/dist/react/components/charts/stacked-area-chart-card.js.map +1 -0
- package/dist/react/components/entries-table.d.ts +11 -0
- package/dist/react/components/entries-table.d.ts.map +1 -0
- package/dist/react/components/entries-table.js +68 -0
- package/dist/react/components/entries-table.js.map +1 -0
- package/dist/react/components/entry-detail.d.ts +6 -0
- package/dist/react/components/entry-detail.d.ts.map +1 -0
- package/dist/react/components/entry-detail.js +110 -0
- package/dist/react/components/entry-detail.js.map +1 -0
- package/dist/react/components/entry-insights.d.ts +5 -0
- package/dist/react/components/entry-insights.d.ts.map +1 -0
- package/dist/react/components/entry-insights.js +107 -0
- package/dist/react/components/entry-insights.js.map +1 -0
- package/dist/react/components/entry-types.d.ts +40 -0
- package/dist/react/components/entry-types.d.ts.map +1 -0
- package/dist/react/components/entry-types.js +44 -0
- package/dist/react/components/entry-types.js.map +1 -0
- package/dist/react/components/export-json-toolbar.d.ts +9 -0
- package/dist/react/components/export-json-toolbar.d.ts.map +1 -0
- package/dist/react/components/export-json-toolbar.js +21 -0
- package/dist/react/components/export-json-toolbar.js.map +1 -0
- package/dist/react/components/export-json.d.ts +14 -0
- package/dist/react/components/export-json.d.ts.map +1 -0
- package/dist/react/components/export-json.js +44 -0
- package/dist/react/components/export-json.js.map +1 -0
- package/dist/react/components/pulse-panel.d.ts +9 -0
- package/dist/react/components/pulse-panel.d.ts.map +1 -0
- package/dist/react/components/pulse-panel.js +20 -0
- package/dist/react/components/pulse-panel.js.map +1 -0
- package/dist/react/components/queue-sparkline.d.ts +5 -0
- package/dist/react/components/queue-sparkline.d.ts.map +1 -0
- package/dist/react/components/queue-sparkline.js +8 -0
- package/dist/react/components/queue-sparkline.js.map +1 -0
- package/dist/react/components/queues/EnqueueJobForm.d.ts +14 -0
- package/dist/react/components/queues/EnqueueJobForm.d.ts.map +1 -0
- package/dist/react/components/queues/EnqueueJobForm.js +61 -0
- package/dist/react/components/queues/EnqueueJobForm.js.map +1 -0
- package/dist/react/components/queues/JobActions.d.ts +38 -0
- package/dist/react/components/queues/JobActions.d.ts.map +1 -0
- package/dist/react/components/queues/JobActions.js +106 -0
- package/dist/react/components/queues/JobActions.js.map +1 -0
- package/dist/react/components/queues/JobDetailDrawer.d.ts +11 -0
- package/dist/react/components/queues/JobDetailDrawer.d.ts.map +1 -0
- package/dist/react/components/queues/JobDetailDrawer.js +45 -0
- package/dist/react/components/queues/JobDetailDrawer.js.map +1 -0
- package/dist/react/components/queues/JobTable.d.ts +13 -0
- package/dist/react/components/queues/JobTable.d.ts.map +1 -0
- package/dist/react/components/queues/JobTable.js +0 -0
- package/dist/react/components/queues/JobTable.js.map +1 -0
- package/dist/react/components/queues/QueueList.d.ts +8 -0
- package/dist/react/components/queues/QueueList.d.ts.map +1 -0
- package/dist/react/components/queues/QueueList.js +27 -0
- package/dist/react/components/queues/QueueList.js.map +1 -0
- package/dist/react/components/queues/QueueStateTabs.d.ts +7 -0
- package/dist/react/components/queues/QueueStateTabs.d.ts.map +1 -0
- package/dist/react/components/queues/QueueStateTabs.js +12 -0
- package/dist/react/components/queues/QueueStateTabs.js.map +1 -0
- package/dist/react/components/queues/index.d.ts +8 -0
- package/dist/react/components/queues/index.d.ts.map +1 -0
- package/dist/react/components/queues/index.js +8 -0
- package/dist/react/components/queues/index.js.map +1 -0
- package/dist/react/components/queues/queue-format.d.ts +8 -0
- package/dist/react/components/queues/queue-format.d.ts.map +1 -0
- package/dist/react/components/queues/queue-format.js +51 -0
- package/dist/react/components/queues/queue-format.js.map +1 -0
- package/dist/react/components/queues-panel.d.ts +6 -0
- package/dist/react/components/queues-panel.d.ts.map +1 -0
- package/dist/react/components/queues-panel.js +8 -0
- package/dist/react/components/queues-panel.js.map +1 -0
- package/dist/react/components/request-timeline.d.ts +14 -0
- package/dist/react/components/request-timeline.d.ts.map +1 -0
- package/dist/react/components/request-timeline.js +30 -0
- package/dist/react/components/request-timeline.js.map +1 -0
- package/dist/react/components/retention-indicator.d.ts +10 -0
- package/dist/react/components/retention-indicator.d.ts.map +1 -0
- package/dist/react/components/retention-indicator.js +38 -0
- package/dist/react/components/retention-indicator.js.map +1 -0
- package/dist/react/components/sparkline.d.ts +7 -0
- package/dist/react/components/sparkline.d.ts.map +1 -0
- package/dist/react/components/sparkline.js +20 -0
- package/dist/react/components/sparkline.js.map +1 -0
- package/dist/react/components/stacked-bars.d.ts +21 -0
- package/dist/react/components/stacked-bars.d.ts.map +1 -0
- package/dist/react/components/stacked-bars.js +51 -0
- package/dist/react/components/stacked-bars.js.map +1 -0
- package/dist/react/components/tag-autocomplete.d.ts +12 -0
- package/dist/react/components/tag-autocomplete.d.ts.map +1 -0
- package/dist/react/components/tag-autocomplete.js +90 -0
- package/dist/react/components/tag-autocomplete.js.map +1 -0
- package/dist/react/components/trace-link.d.ts +6 -0
- package/dist/react/components/trace-link.d.ts.map +1 -0
- package/dist/react/components/trace-link.js +10 -0
- package/dist/react/components/trace-link.js.map +1 -0
- package/dist/react/components/type-tabs.d.ts +5 -0
- package/dist/react/components/type-tabs.d.ts.map +1 -0
- package/dist/react/components/type-tabs.js +8 -0
- package/dist/react/components/type-tabs.js.map +1 -0
- package/dist/react/components/window-select.d.ts +5 -0
- package/dist/react/components/window-select.d.ts.map +1 -0
- package/dist/react/components/window-select.js +6 -0
- package/dist/react/components/window-select.js.map +1 -0
- package/dist/react/index.d.ts +23 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +23 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/telescope-context.d.ts +14 -0
- package/dist/react/telescope-context.d.ts.map +1 -0
- package/dist/react/telescope-context.js +27 -0
- package/dist/react/telescope-context.js.map +1 -0
- package/dist/react/use-telescope-queries.d.ts +244 -0
- package/dist/react/use-telescope-queries.d.ts.map +1 -0
- package/dist/react/use-telescope-queries.js +216 -0
- package/dist/react/use-telescope-queries.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/telescope-ui.controller.d.ts +10 -0
- package/dist/server/telescope-ui.controller.d.ts.map +1 -0
- package/dist/server/telescope-ui.controller.js +105 -0
- package/dist/server/telescope-ui.controller.js.map +1 -0
- package/dist/server/telescope-ui.module.d.ts +6 -0
- package/dist/server/telescope-ui.module.d.ts.map +1 -0
- package/dist/server/telescope-ui.module.js +26 -0
- package/dist/server/telescope-ui.module.js.map +1 -0
- package/dist/server/telescope-ui.options.d.ts +12 -0
- package/dist/server/telescope-ui.options.d.ts.map +1 -0
- package/dist/server/telescope-ui.options.js +2 -0
- package/dist/server/telescope-ui.options.js.map +1 -0
- package/dist/spa/assets/index-BHS361H_.js +135 -0
- package/dist/spa/assets/index-DsBEgxHC.css +1 -0
- package/dist/spa/index.html +13 -0
- package/package.json +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/components/charts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Each row carries the x-axis `label` plus one numeric key per series. */
|
|
2
|
+
export type StackedAreaRow = {
|
|
3
|
+
label: string;
|
|
4
|
+
} & Record<string, string | number>;
|
|
5
|
+
/** Multi-series stacked area chart with a legend, colored per entry type. */
|
|
6
|
+
export declare function StackedAreaChartCard({ title, data, series, right, height, }: {
|
|
7
|
+
title: string;
|
|
8
|
+
data: StackedAreaRow[];
|
|
9
|
+
/** Ordered list of series keys (e.g. entry types) to stack. */
|
|
10
|
+
series: string[];
|
|
11
|
+
right?: React.ReactNode;
|
|
12
|
+
height?: number;
|
|
13
|
+
}): JSX.Element;
|
|
14
|
+
//# sourceMappingURL=stacked-area-chart-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacked-area-chart-card.d.ts","sourceRoot":"","sources":["../../../../src/react/components/charts/stacked-area-chart-card.tsx"],"names":[],"mappings":"AAoBA,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAEjF,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAY,GACb,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,GAAG,CAAC,OAAO,CAyDd"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Area, AreaChart, CartesianGrid, Legend, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
|
|
3
|
+
import { ChartCard, ChartEmptyState } from './chart-card.js';
|
|
4
|
+
import { axisTickStyle, chartTheme, hexForType, tooltipContentStyle, tooltipItemStyle, tooltipLabelStyle, } from './chart-theme.js';
|
|
5
|
+
/** Multi-series stacked area chart with a legend, colored per entry type. */
|
|
6
|
+
export function StackedAreaChartCard({ title, data, series, right, height = 240, }) {
|
|
7
|
+
const bodyHeight = height - 64;
|
|
8
|
+
return (_jsx(ChartCard, { title: title, right: right, height: bodyHeight, children: data.length === 0 || series.length === 0 ? (_jsx(ChartEmptyState, { height: bodyHeight })) : (_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(AreaChart, { data: data, margin: { top: 4, right: 8, bottom: 0, left: -16 }, children: [_jsx(CartesianGrid, { stroke: chartTheme.gridStroke, vertical: false }), _jsx(XAxis, { dataKey: "label", tick: axisTickStyle, stroke: chartTheme.axisStroke, tickLine: false, minTickGap: 24 }), _jsx(YAxis, { tick: axisTickStyle, stroke: chartTheme.axisStroke, tickLine: false, width: 40, allowDecimals: false }), _jsx(Tooltip, { contentStyle: tooltipContentStyle, labelStyle: tooltipLabelStyle, itemStyle: tooltipItemStyle, cursor: { stroke: chartTheme.axisStroke } }), _jsx(Legend, { iconType: "circle", iconSize: 8, wrapperStyle: { fontSize: 10, color: chartTheme.legendText } }), series.map((key, index) => {
|
|
9
|
+
const color = hexForType(key, index);
|
|
10
|
+
return (_jsx(Area, { type: "monotone", dataKey: key, name: key, stackId: "1", stroke: color, strokeWidth: 1.5, fill: color, fillOpacity: 0.25, isAnimationActive: false }, key));
|
|
11
|
+
})] }) })) }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=stacked-area-chart-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacked-area-chart-card.js","sourceRoot":"","sources":["../../../../src/react/components/charts/stacked-area-chart-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,IAAI,EACJ,SAAS,EACT,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,KAAK,GACN,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAK1B,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,GAAG,GAAG,GAQb;IACC,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;IAC/B,OAAO,CACL,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,YACtD,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1C,KAAC,eAAe,IAAC,MAAM,EAAE,UAAU,GAAI,CACxC,CAAC,CAAC,CAAC,CACF,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,MAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,aACvE,KAAC,aAAa,IAAC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAI,EACjE,KAAC,KAAK,IACJ,OAAO,EAAC,OAAO,EACf,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,UAAU,CAAC,UAAU,EAC7B,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,EAAE,GACd,EACF,KAAC,KAAK,IACJ,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,UAAU,CAAC,UAAU,EAC7B,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,EAAE,EACT,aAAa,EAAE,KAAK,GACpB,EACF,KAAC,OAAO,IACN,YAAY,EAAE,mBAAmB,EACjC,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,GACzC,EACF,KAAC,MAAM,IACL,QAAQ,EAAC,QAAQ,EACjB,QAAQ,EAAE,CAAC,EACX,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,GAC5D,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;wBACzB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACrC,OAAO,CACL,KAAC,IAAI,IAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,GAAG,EACT,OAAO,EAAC,GAAG,EACX,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,GAAG,EAChB,IAAI,EAAE,KAAK,EACX,WAAW,EAAE,IAAI,EACjB,iBAAiB,EAAE,KAAK,IATnB,GAAG,CAUR,CACH,CAAC;oBACJ,CAAC,CAAC,IACQ,GACQ,CACvB,GACS,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Entry } from '../../client/index.js';
|
|
2
|
+
export declare function entryLabel(entry: Entry): string;
|
|
3
|
+
/** A short, single-line preview of redis command args for table summaries. */
|
|
4
|
+
export declare function redisArgsPreview(args: unknown): string;
|
|
5
|
+
/** A short, single-line preview of a dump value for table summaries. */
|
|
6
|
+
export declare function dumpValuePreview(value: unknown): string;
|
|
7
|
+
export declare function EntriesTable({ entries, onSelect, }: {
|
|
8
|
+
entries: Entry[];
|
|
9
|
+
onSelect?: (id: string) => void;
|
|
10
|
+
}): JSX.Element;
|
|
11
|
+
//# sourceMappingURL=entries-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entries-table.d.ts","sourceRoot":"","sources":["../../../src/react/components/entries-table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAkC/C;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASvD;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,GACT,EAAE;IAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAuDrE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CacheBadge } from './cache-badge.js';
|
|
3
|
+
export function entryLabel(entry) {
|
|
4
|
+
const content = entry.content;
|
|
5
|
+
if (typeof content === 'object' && content !== null) {
|
|
6
|
+
const record = content;
|
|
7
|
+
if (typeof record.uri === 'string') {
|
|
8
|
+
return typeof record.method === 'string' ? `${record.method} ${record.uri}` : record.uri;
|
|
9
|
+
}
|
|
10
|
+
if (typeof record.sql === 'string')
|
|
11
|
+
return record.sql;
|
|
12
|
+
if (typeof record.queue === 'string' && typeof record.name === 'string') {
|
|
13
|
+
return `${record.queue}:${record.name}`;
|
|
14
|
+
}
|
|
15
|
+
if (entry.type === 'dump') {
|
|
16
|
+
if (typeof record.label === 'string' && record.label.length > 0)
|
|
17
|
+
return record.label;
|
|
18
|
+
return dumpValuePreview(record.value);
|
|
19
|
+
}
|
|
20
|
+
if (entry.type === 'event' && typeof record.name === 'string')
|
|
21
|
+
return record.name;
|
|
22
|
+
if (entry.type === 'model' && typeof record.action === 'string') {
|
|
23
|
+
const entity = typeof record.entity === 'string' ? record.entity : '';
|
|
24
|
+
const id = record.id === null || record.id === undefined ? '' : `#${String(record.id)}`;
|
|
25
|
+
return `${record.action} ${entity}${id}`;
|
|
26
|
+
}
|
|
27
|
+
if (entry.type === 'redis' && typeof record.command === 'string') {
|
|
28
|
+
return `${record.command} ${redisArgsPreview(record.args)}`.trim();
|
|
29
|
+
}
|
|
30
|
+
if (entry.type === 'log' && typeof record.message === 'string') {
|
|
31
|
+
const level = typeof record.level === 'string' ? record.level : 'log';
|
|
32
|
+
return `[${level}] ${record.message}`;
|
|
33
|
+
}
|
|
34
|
+
if (typeof record.message === 'string')
|
|
35
|
+
return record.message;
|
|
36
|
+
if (typeof record.url === 'string') {
|
|
37
|
+
return typeof record.method === 'string' ? `${record.method} ${record.url}` : record.url;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return entry.type;
|
|
41
|
+
}
|
|
42
|
+
/** A short, single-line preview of redis command args for table summaries. */
|
|
43
|
+
export function redisArgsPreview(args) {
|
|
44
|
+
if (!Array.isArray(args) || args.length === 0)
|
|
45
|
+
return '';
|
|
46
|
+
const text = args.map((arg) => (typeof arg === 'string' ? arg : String(arg))).join(' ');
|
|
47
|
+
return text.length > 60 ? `${text.slice(0, 60)}…` : text;
|
|
48
|
+
}
|
|
49
|
+
/** A short, single-line preview of a dump value for table summaries. */
|
|
50
|
+
export function dumpValuePreview(value) {
|
|
51
|
+
if (typeof value === 'string')
|
|
52
|
+
return value;
|
|
53
|
+
let text;
|
|
54
|
+
try {
|
|
55
|
+
text = JSON.stringify(value) ?? String(value);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
text = String(value);
|
|
59
|
+
}
|
|
60
|
+
return text.length > 80 ? `${text.slice(0, 80)}…` : text;
|
|
61
|
+
}
|
|
62
|
+
export function EntriesTable({ entries, onSelect, }) {
|
|
63
|
+
return (_jsxs("table", { className: "w-full text-left text-xs", children: [_jsx("thead", { className: "text-zinc-500", children: _jsxs("tr", { children: [_jsx("th", { className: "py-2 font-normal", children: "Time" }), _jsx("th", { className: "font-normal", children: "Type" }), _jsx("th", { className: "font-normal", children: "Summary" }), _jsx("th", { className: "font-normal", children: "Duration" }), _jsx("th", { className: "font-normal", children: "Tags" })] }) }), _jsx("tbody", { children: entries.map((entry) => (_jsxs("tr", { onClick: () => onSelect?.(entry.id), onKeyDown: (event) => {
|
|
64
|
+
if (event.key === 'Enter' || event.key === ' ')
|
|
65
|
+
onSelect?.(entry.id);
|
|
66
|
+
}, className: "cursor-pointer border-t border-zinc-900 hover:bg-zinc-900", children: [_jsx("td", { className: "py-1.5 text-zinc-500", children: new Date(entry.createdAt).toLocaleTimeString() }), _jsx("td", { className: "text-emerald-400", children: entry.type }), _jsx("td", { className: "max-w-md truncate text-zinc-300", children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [entry.type === 'cache' ? _jsx(CacheBadge, { content: entry.content }) : null, _jsx("span", { className: "truncate", children: entryLabel(entry) })] }) }), _jsx("td", { className: "text-zinc-400", children: entry.durationMs != null ? `${entry.durationMs}ms` : '—' }), _jsx("td", { className: "text-zinc-600", children: _jsxs("span", { className: "inline-flex items-center gap-1.5", children: [entry.traceId !== null && (_jsxs("a", { href: `#/traces/${entry.traceId}`, title: `View trace ${entry.traceId}`, onClick: (event) => event.stopPropagation(), className: "rounded bg-zinc-900 px-1.5 py-0.5 font-mono text-[10px] text-sky-400 hover:bg-zinc-800", children: ["trace:", entry.traceId.slice(0, 6)] })), entry.tags.length > 0 && _jsx("span", { children: entry.tags.join(' ') })] }) })] }, entry.id))) })] }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=entries-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entries-table.js","sourceRoot":"","sources":["../../../src/react/components/entries-table.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-detail.d.ts","sourceRoot":"","sources":["../../../src/react/components/entry-detail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,GACT,EAAE;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAuD1E"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMeta } from '../use-telescope-queries.js';
|
|
3
|
+
import { BatchTimeline } from './batch-timeline.js';
|
|
4
|
+
import { CacheBadge } from './cache-badge.js';
|
|
5
|
+
import { ExportJsonToolbar } from './export-json-toolbar.js';
|
|
6
|
+
import { RequestTimeline } from './request-timeline.js';
|
|
7
|
+
import { buildTraceHref } from './trace-link.js';
|
|
8
|
+
export function EntryDetail({ entry, onSelect, }) {
|
|
9
|
+
const { data: meta } = useMeta();
|
|
10
|
+
const showTimeline = entry.type === 'request' && entry.batch.length > 1;
|
|
11
|
+
return (_jsxs("div", { className: "grid grid-cols-3 gap-6", children: [_jsxs("section", { className: "col-span-2", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between gap-2", children: [_jsxs("h2", { className: "flex items-center gap-2 text-sm text-emerald-400", children: [entry.type, entry.type === 'cache' ? _jsx(CacheBadge, { content: entry.content }) : null] }), _jsx(ExportJsonToolbar, { value: entry, filename: `telescope-entry-${entry.id}.json` })] }), showTimeline ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-zinc-500", children: "Timeline" }), _jsx(RequestTimeline, { batch: entry.batch, requestId: entry.id, onSelect: onSelect })] })) : null, entry.type === 'dump' ? (_jsx(DumpBody, { content: entry.content })) : entry.type === 'event' ? (_jsx(EventBody, { content: entry.content })) : entry.type === 'log' ? (_jsx(LogBody, { content: entry.content })) : entry.type === 'model' ? (_jsx(ModelBody, { content: entry.content })) : entry.type === 'redis' ? (_jsx(RedisBody, { content: entry.content })) : entry.type === 'request' ? (_jsx(RequestBody, { content: entry.content })) : (_jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: JSON.stringify(entry.content, null, 2) }))] }), _jsxs("aside", { children: [entry.traceId ? (_jsxs("div", { className: "mb-4", children: [_jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-zinc-500", children: "Trace" }), _jsx(TraceRow, { traceId: entry.traceId, spanId: entry.spanId, traceLink: meta?.traceLink ?? null })] })) : null, _jsxs("h3", { className: "mb-2 text-xs uppercase tracking-wide text-zinc-500", children: ["Batch (", entry.batch.length, ")"] }), _jsx(BatchTimeline, { batch: entry.batch, currentId: entry.id, onSelect: onSelect })] })] }));
|
|
12
|
+
}
|
|
13
|
+
/** Pretty-print a dump value to JSON, falling back to String() if not serializable. */
|
|
14
|
+
function prettyJson(value) {
|
|
15
|
+
try {
|
|
16
|
+
return JSON.stringify(value, null, 2) ?? String(value);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return String(value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function DumpBody({ content }) {
|
|
23
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
24
|
+
const label = typeof record.label === 'string' ? record.label : null;
|
|
25
|
+
return (_jsxs("div", { children: [label ? _jsx("h3", { className: "mb-2 font-mono text-sm text-fuchsia-400", children: label }) : null, _jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: prettyJson(record.value) })] }));
|
|
26
|
+
}
|
|
27
|
+
/** Tailwind text color for a log level badge. */
|
|
28
|
+
function logLevelColor(level) {
|
|
29
|
+
switch (level) {
|
|
30
|
+
case 'error':
|
|
31
|
+
return 'text-red-400';
|
|
32
|
+
case 'warn':
|
|
33
|
+
return 'text-amber-400';
|
|
34
|
+
case 'debug':
|
|
35
|
+
case 'verbose':
|
|
36
|
+
return 'text-zinc-500';
|
|
37
|
+
default:
|
|
38
|
+
return 'text-zinc-300';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function EventBody({ content }) {
|
|
42
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
43
|
+
const name = typeof record.name === 'string' ? record.name : String(record.name ?? '');
|
|
44
|
+
const listenerCount = typeof record.listenerCount === 'number' ? record.listenerCount : null;
|
|
45
|
+
return (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 flex items-center gap-2 font-mono text-sm text-indigo-400", children: [name, listenerCount !== null ? (_jsxs("span", { className: "rounded bg-zinc-900 px-1.5 py-0.5 text-[10px] text-zinc-500", children: [listenerCount, " listener", listenerCount === 1 ? '' : 's'] })) : null] }), _jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: prettyJson(record.payload) })] }));
|
|
46
|
+
}
|
|
47
|
+
/** Tailwind text color for a model action badge. */
|
|
48
|
+
function modelActionColor(action) {
|
|
49
|
+
switch (action) {
|
|
50
|
+
case 'create':
|
|
51
|
+
return 'text-emerald-400';
|
|
52
|
+
case 'update':
|
|
53
|
+
return 'text-amber-400';
|
|
54
|
+
case 'delete':
|
|
55
|
+
return 'text-red-400';
|
|
56
|
+
default:
|
|
57
|
+
return 'text-zinc-300';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function ModelBody({ content }) {
|
|
61
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
62
|
+
const action = typeof record.action === 'string' ? record.action : 'update';
|
|
63
|
+
const entity = typeof record.entity === 'string' ? record.entity : String(record.entity ?? '');
|
|
64
|
+
const id = record.id === null || record.id === undefined ? null : String(record.id);
|
|
65
|
+
return (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 flex items-center gap-2 font-mono text-sm text-lime-400", children: [_jsx("span", { className: `rounded bg-zinc-900 px-1.5 py-0.5 text-[10px] uppercase ${modelActionColor(action)}`, children: action }), _jsx("span", { children: entity }), id !== null ? _jsxs("span", { className: "text-zinc-500", children: ["#", id] }) : null] }), _jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: prettyJson(record.changes) })] }));
|
|
66
|
+
}
|
|
67
|
+
function RedisBody({ content }) {
|
|
68
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
69
|
+
const command = typeof record.command === 'string' ? record.command : String(record.command ?? '');
|
|
70
|
+
const durationMs = typeof record.durationMs === 'number' ? record.durationMs : null;
|
|
71
|
+
return (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 flex items-center gap-2 font-mono text-sm text-rose-400", children: [command, durationMs !== null ? (_jsxs("span", { className: "rounded bg-zinc-900 px-1.5 py-0.5 text-[10px] text-zinc-500", children: [durationMs, " ms"] })) : null] }), _jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: prettyJson(record.args) })] }));
|
|
72
|
+
}
|
|
73
|
+
/** True when a value is a non-null object or non-empty array (worth rendering). */
|
|
74
|
+
function hasContent(value) {
|
|
75
|
+
if (value === null || value === undefined)
|
|
76
|
+
return false;
|
|
77
|
+
if (Array.isArray(value))
|
|
78
|
+
return value.length > 0;
|
|
79
|
+
if (typeof value === 'object')
|
|
80
|
+
return Object.keys(value).length > 0;
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
function RequestHeaders({ headers }) {
|
|
84
|
+
const entries = Object.entries(headers);
|
|
85
|
+
return (_jsxs("details", { className: "mb-4", children: [_jsxs("summary", { className: "cursor-pointer text-xs uppercase tracking-wide text-zinc-500", children: ["Headers (", entries.length, ")"] }), _jsx("dl", { className: "mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 rounded bg-zinc-900 p-3 text-xs", children: entries.map(([key, value]) => (_jsxs("div", { className: "contents", children: [_jsx("dt", { className: "font-mono text-zinc-500", children: key }), _jsx("dd", { className: "break-all font-mono text-zinc-300", children: typeof value === 'string' ? value : prettyJson(value) })] }, key))) })] }));
|
|
86
|
+
}
|
|
87
|
+
function RequestBody({ content }) {
|
|
88
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
89
|
+
const headers = typeof record.headers === 'object' && record.headers !== null
|
|
90
|
+
? record.headers
|
|
91
|
+
: {};
|
|
92
|
+
const method = typeof record.method === 'string' ? record.method : String(record.method ?? '');
|
|
93
|
+
const uri = typeof record.uri === 'string' ? record.uri : String(record.uri ?? '');
|
|
94
|
+
const statusCode = typeof record.statusCode === 'number' ? record.statusCode : null;
|
|
95
|
+
const ip = typeof record.ip === 'string' ? record.ip : null;
|
|
96
|
+
const hasUser = 'user' in record && record.user !== null && record.user !== undefined;
|
|
97
|
+
return (_jsxs("div", { children: [_jsxs("h3", { className: "mb-3 flex items-center gap-2 font-mono text-sm text-emerald-400", children: [_jsx("span", { className: "rounded bg-zinc-900 px-1.5 py-0.5 text-[10px] uppercase", children: method }), _jsx("span", { className: "text-zinc-300", children: uri }), statusCode !== null ? (_jsx("span", { className: "rounded bg-zinc-900 px-1.5 py-0.5 text-[10px] text-zinc-500", children: statusCode })) : null, ip ? _jsx("span", { className: "text-[10px] text-zinc-500", children: ip }) : null] }), _jsx(RequestHeaders, { headers: headers }), _jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-zinc-500", children: "Payload" }), hasContent(record.payload) ? (_jsx("pre", { className: "mb-4 overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: prettyJson(record.payload) })) : (_jsx("p", { className: "mb-4 text-xs text-zinc-600", children: "No payload" })), _jsx("h3", { className: "mb-2 text-xs uppercase tracking-wide text-zinc-500", children: "User" }), hasUser ? (_jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: prettyJson(record.user) })) : (_jsx("p", { className: "text-xs text-zinc-600", children: "anonymous" }))] }));
|
|
98
|
+
}
|
|
99
|
+
function LogBody({ content }) {
|
|
100
|
+
const record = typeof content === 'object' && content !== null ? content : {};
|
|
101
|
+
const level = typeof record.level === 'string' ? record.level : 'log';
|
|
102
|
+
const message = typeof record.message === 'string' ? record.message : String(record.message ?? '');
|
|
103
|
+
const context = typeof record.context === 'string' ? record.context : null;
|
|
104
|
+
return (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 flex items-center gap-2 text-sm", children: [_jsx("span", { className: `rounded bg-zinc-900 px-1.5 py-0.5 font-mono text-[10px] uppercase ${logLevelColor(level)}`, children: level }), context ? _jsx("span", { className: "font-mono text-xs text-zinc-500", children: context }) : null] }), _jsx("pre", { className: "overflow-auto rounded bg-zinc-900 p-3 text-xs text-zinc-300", children: message })] }));
|
|
105
|
+
}
|
|
106
|
+
function TraceRow({ traceId, spanId, traceLink, }) {
|
|
107
|
+
const href = buildTraceHref(traceLink, traceId, spanId ?? '');
|
|
108
|
+
return (_jsxs("div", { children: [href ? (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", className: "font-mono text-[11px] text-emerald-400 hover:underline", children: traceId })) : (_jsx("div", { className: "font-mono text-[11px] text-zinc-300", children: traceId })), spanId ? _jsx("div", { className: "font-mono text-[10px] text-zinc-500", children: spanId }) : null, _jsx("a", { href: `#/traces/${traceId}`, className: "mt-1 inline-block text-[11px] text-emerald-400 hover:underline", children: "View all in this trace" })] }));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=entry-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-detail.js","sourceRoot":"","sources":["../../../src/react/components/entry-detail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-insights.d.ts","sourceRoot":"","sources":["../../../src/react/components/entry-insights.tsx"],"names":[],"mappings":"AA4RA,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAa5E"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useNavigate } from 'react-router-dom';
|
|
3
|
+
import { useStats } from '../use-telescope-queries.js';
|
|
4
|
+
import { AreaChartCard, BarChartCard } from './charts/index.js';
|
|
5
|
+
import { relativeTime } from './queues/queue-format.js';
|
|
6
|
+
const DEFAULT_WINDOW = '1h';
|
|
7
|
+
function formatBucketTime(iso) {
|
|
8
|
+
const date = new Date(iso);
|
|
9
|
+
if (Number.isNaN(date.getTime()))
|
|
10
|
+
return iso;
|
|
11
|
+
return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
|
12
|
+
}
|
|
13
|
+
function toAreaSeries(report) {
|
|
14
|
+
return (report?.buckets ?? []).map((bucket) => ({
|
|
15
|
+
label: formatBucketTime(bucket.t),
|
|
16
|
+
value: bucket.total,
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
function StatCard({ label, value, accent = 'text-zinc-100', }) {
|
|
20
|
+
return (_jsxs("div", { className: "rounded-lg border border-zinc-800 bg-zinc-900/40 px-4 py-3", children: [_jsx("p", { className: "text-[10px] uppercase tracking-wide text-zinc-500", children: label }), _jsx("p", { className: `mt-1 text-2xl font-semibold tabular-nums ${accent}`, children: value })] }));
|
|
21
|
+
}
|
|
22
|
+
function StatRow({ children }) {
|
|
23
|
+
return _jsx("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-4", children: children });
|
|
24
|
+
}
|
|
25
|
+
function ChartRow({ children }) {
|
|
26
|
+
return _jsx("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: children });
|
|
27
|
+
}
|
|
28
|
+
function familyBars(families) {
|
|
29
|
+
return families.map((family) => ({
|
|
30
|
+
label: family.label !== '' ? family.label : family.familyHash.slice(0, 12),
|
|
31
|
+
value: family.p99,
|
|
32
|
+
id: family.familyHash,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
function statusBars(status) {
|
|
36
|
+
return [
|
|
37
|
+
{ label: '2xx', value: status['2xx'], color: '#34d399' },
|
|
38
|
+
{ label: '3xx', value: status['3xx'], color: '#38bdf8' },
|
|
39
|
+
{ label: '4xx', value: status['4xx'], color: '#fbbf24' },
|
|
40
|
+
{ label: '5xx', value: status['5xx'], color: '#f87171' },
|
|
41
|
+
{ label: 'other', value: status.other, color: '#71717a' },
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
function cacheKeyBars(cache) {
|
|
45
|
+
return cache.topKeys.map((entry) => ({ label: entry.key, value: entry.count }));
|
|
46
|
+
}
|
|
47
|
+
function QueryInsights({ stats }) {
|
|
48
|
+
const latency = stats.latency;
|
|
49
|
+
const navigate = useNavigate();
|
|
50
|
+
return (_jsxs(_Fragment, { children: [_jsxs(StatRow, { children: [_jsx(StatCard, { label: "Total", value: stats.total.toLocaleString() }), _jsx(StatCard, { label: "p50 ms", value: latency ? latency.p50.toLocaleString() : '—' }), _jsx(StatCard, { label: "p99 ms", value: latency ? latency.p99.toLocaleString() : '—', accent: "text-sky-400" }), _jsx(StatCard, { label: "Slow", value: latency ? latency.slow.toLocaleString() : '—', accent: latency && latency.slow > 0 ? 'text-amber-400' : 'text-zinc-100' })] }), _jsxs(ChartRow, { children: [stats.families ? (_jsx(BarChartCard, { title: "Slowest query shapes (p99)", valueLabel: "p99 ms", data: familyBars(stats.families), horizontal: true, truncateLabel: 40, onBarClick: (datum) => {
|
|
51
|
+
if (datum.id !== undefined) {
|
|
52
|
+
navigate(`/entries/query?familyHash=${encodeURIComponent(datum.id)}`);
|
|
53
|
+
}
|
|
54
|
+
} })) : null, _jsx(AreaChartCard, { title: "Queries over time", valueLabel: "queries", data: toAreaSeries(stats.overTime) })] })] }));
|
|
55
|
+
}
|
|
56
|
+
function CacheInsights({ stats }) {
|
|
57
|
+
const cache = stats.cache;
|
|
58
|
+
return (_jsxs(_Fragment, { children: [_jsxs(StatRow, { children: [_jsx(StatCard, { label: "Hit ratio", value: cache ? `${Math.round(cache.hitRatio * 100)}%` : '—', accent: "text-emerald-400" }), _jsx(StatCard, { label: "Hits", value: cache ? cache.hits.toLocaleString() : '—' }), _jsx(StatCard, { label: "Misses", value: cache ? cache.misses.toLocaleString() : '—' }), _jsx(StatCard, { label: "Sets", value: cache ? cache.sets.toLocaleString() : '—' })] }), _jsxs(ChartRow, { children: [cache ? (_jsx(BarChartCard, { title: "Hits vs misses", valueLabel: "count", data: [
|
|
59
|
+
{ label: 'hits', value: cache.hits, color: '#34d399' },
|
|
60
|
+
{ label: 'misses', value: cache.misses, color: '#f87171' },
|
|
61
|
+
] })) : null, _jsx(AreaChartCard, { title: "Cache over time", valueLabel: "ops", data: toAreaSeries(stats.overTime) })] }), cache ? (_jsx(BarChartCard, { title: "Top keys", valueLabel: "count", data: cacheKeyBars(cache) })) : null] }));
|
|
62
|
+
}
|
|
63
|
+
function RequestInsights({ stats }) {
|
|
64
|
+
const latency = stats.latency;
|
|
65
|
+
const status = stats.status;
|
|
66
|
+
const errors = status ? status['4xx'] + status['5xx'] : 0;
|
|
67
|
+
const errorPct = stats.total > 0 ? Math.round((errors / stats.total) * 100) : 0;
|
|
68
|
+
return (_jsxs(_Fragment, { children: [_jsxs(StatRow, { children: [_jsx(StatCard, { label: "Total", value: stats.total.toLocaleString() }), _jsx(StatCard, { label: "p99 ms", value: latency ? latency.p99.toLocaleString() : '—', accent: "text-sky-400" }), _jsx(StatCard, { label: "Error %", value: `${errorPct}%`, accent: errors > 0 ? 'text-red-400' : 'text-zinc-100' })] }), _jsxs(ChartRow, { children: [status ? (_jsx(BarChartCard, { title: "Status codes", valueLabel: "count", data: statusBars(status) })) : null, _jsx(AreaChartCard, { title: "Throughput", valueLabel: "requests", data: toAreaSeries(stats.overTime) })] })] }));
|
|
69
|
+
}
|
|
70
|
+
/** A tiny inline bar chart of per-bucket counts — no axes, no recharts. */
|
|
71
|
+
function Sparkline({ values }) {
|
|
72
|
+
if (values.length === 0)
|
|
73
|
+
return null;
|
|
74
|
+
const max = Math.max(1, ...values);
|
|
75
|
+
return (_jsx("div", { className: "flex h-6 items-end gap-px", "aria-hidden": "true", children: values.map((value, index) => (_jsx("div", { className: "w-1 rounded-sm bg-amber-500/60", style: { height: `${Math.max(2, Math.round((value / max) * 100))}%` } }, index))) }));
|
|
76
|
+
}
|
|
77
|
+
function ExceptionGroupRow({ group }) {
|
|
78
|
+
const lastAtMs = new Date(group.lastAt).getTime();
|
|
79
|
+
return (_jsxs(Link, { to: `/entries/exception?familyHash=${encodeURIComponent(group.key)}`, className: "flex items-center gap-3 rounded-lg border border-zinc-800 bg-zinc-900/40 px-4 py-3 transition hover:border-zinc-700 hover:bg-zinc-900/70", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate font-mono text-sm font-semibold text-red-300", children: group.class }), _jsx("p", { className: "truncate text-xs text-zinc-400", children: group.message })] }), _jsx(Sparkline, { values: group.overTime }), _jsxs("div", { className: "shrink-0 text-right", children: [_jsx("p", { className: "text-sm font-semibold tabular-nums text-zinc-100", children: group.count.toLocaleString() }), _jsx("p", { className: "text-[10px] text-zinc-500", children: relativeTime(Number.isNaN(lastAtMs) ? null : lastAtMs) })] })] }));
|
|
80
|
+
}
|
|
81
|
+
function ExceptionInsights({ stats }) {
|
|
82
|
+
const groups = stats.exceptions ?? [];
|
|
83
|
+
return (_jsxs(_Fragment, { children: [_jsxs(StatRow, { children: [_jsx(StatCard, { label: "Total", value: stats.total.toLocaleString() }), _jsx(StatCard, { label: "Groups", value: groups.length.toLocaleString(), accent: groups.length > 0 ? 'text-amber-400' : 'text-zinc-100' })] }), groups.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-[10px] uppercase tracking-wide text-zinc-500", children: "Exception groups" }), groups.map((group) => (_jsx(ExceptionGroupRow, { group: group }, group.key)))] })) : null, _jsx(AreaChartCard, { title: "Exceptions over time", valueLabel: "exceptions", data: toAreaSeries(stats.overTime) })] }));
|
|
84
|
+
}
|
|
85
|
+
function GenericInsights({ stats }) {
|
|
86
|
+
return (_jsxs(_Fragment, { children: [_jsx(StatRow, { children: _jsx(StatCard, { label: "Total", value: stats.total.toLocaleString() }) }), _jsx(AreaChartCard, { title: "Over time", valueLabel: "entries", data: toAreaSeries(stats.overTime) })] }));
|
|
87
|
+
}
|
|
88
|
+
function InsightsBody({ stats }) {
|
|
89
|
+
if (stats.type === 'query')
|
|
90
|
+
return _jsx(QueryInsights, { stats: stats });
|
|
91
|
+
if (stats.type === 'cache')
|
|
92
|
+
return _jsx(CacheInsights, { stats: stats });
|
|
93
|
+
if (stats.type === 'request')
|
|
94
|
+
return _jsx(RequestInsights, { stats: stats });
|
|
95
|
+
if (stats.type === 'exception')
|
|
96
|
+
return _jsx(ExceptionInsights, { stats: stats });
|
|
97
|
+
return _jsx(GenericInsights, { stats: stats });
|
|
98
|
+
}
|
|
99
|
+
/** Per-type analytics header (stat cards + charts) rendered above the entries table. */
|
|
100
|
+
export function EntryInsights({ type }) {
|
|
101
|
+
const { data } = useStats(type, DEFAULT_WINDOW);
|
|
102
|
+
if (!data) {
|
|
103
|
+
return (_jsx("div", { className: "mb-4 h-24 animate-pulse rounded-lg border border-zinc-800 bg-zinc-900/20" }));
|
|
104
|
+
}
|
|
105
|
+
return (_jsxs("div", { className: "mb-4 space-y-4", children: [_jsx(InsightsBody, { stats: data }), data.truncated ? _jsx("p", { className: "text-[10px] text-zinc-600", children: "sampled (window capped)" }) : null] }));
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=entry-insights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-insights.js","sourceRoot":"","sources":["../../../src/react/components/entry-insights.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the known telescope entry types: their stable
|
|
3
|
+
* id (the backend `type` filter value), a human label, and a Tailwind `bg-*`
|
|
4
|
+
* dot color. The dot palette mirrors the `fill-*` tokens in `stacked-bars`.
|
|
5
|
+
*/
|
|
6
|
+
export interface EntryTypeDef {
|
|
7
|
+
/** Backend filter value, e.g. passed as `entries({ type })`. */
|
|
8
|
+
id: string;
|
|
9
|
+
/** Human-facing nav / tab label. */
|
|
10
|
+
label: string;
|
|
11
|
+
/** Tailwind `bg-*` class for the per-type color dot. */
|
|
12
|
+
dot: string;
|
|
13
|
+
/**
|
|
14
|
+
* Optional override for the backend fetch filter. When set, the entries
|
|
15
|
+
* query uses this instead of `{ type: id }` — e.g. `schedule` is recorded
|
|
16
|
+
* as a tagged `job`, so it fetches `{ type: 'job', tag: 'schedule' }`.
|
|
17
|
+
*/
|
|
18
|
+
query?: {
|
|
19
|
+
type?: string;
|
|
20
|
+
tag?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const ENTRY_TYPES: EntryTypeDef[];
|
|
24
|
+
/** Dot color for a type id; unknown types get a neutral fallback. */
|
|
25
|
+
export declare function dotForType(typeId: string): string;
|
|
26
|
+
/** Human label for a type id; unknown types echo the raw id. */
|
|
27
|
+
export declare function labelForType(typeId: string): string;
|
|
28
|
+
/** True when `typeId` is a known, navigable entry type. */
|
|
29
|
+
export declare function isKnownType(typeId: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The backend fetch filter for a nav/route type id. Most types fetch
|
|
32
|
+
* `{ type: id }`, but a few (e.g. `schedule`) override via `query` — scheduled
|
|
33
|
+
* runs are stored as `job` entries tagged `schedule`, so the route id and the
|
|
34
|
+
* backend filter diverge. Unknown ids fall back to `{ type: id }`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveEntryQuery(typeId: string): {
|
|
37
|
+
type?: string;
|
|
38
|
+
tag?: string;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=entry-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-types.d.ts","sourceRoot":"","sources":["../../../src/react/components/entry-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,eAAO,MAAM,WAAW,EAAE,YAAY,EAmBrC,CAAC;AAQF,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAEjF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const ENTRY_TYPES = [
|
|
2
|
+
{ id: 'request', label: 'Requests', dot: 'bg-emerald-400' },
|
|
3
|
+
{ id: 'query', label: 'Queries', dot: 'bg-sky-400' },
|
|
4
|
+
{ id: 'exception', label: 'Exceptions', dot: 'bg-red-400' },
|
|
5
|
+
{ id: 'job', label: 'Jobs', dot: 'bg-violet-400' },
|
|
6
|
+
{ id: 'mail', label: 'Mail', dot: 'bg-pink-400' },
|
|
7
|
+
{ id: 'cache', label: 'Cache', dot: 'bg-teal-400' },
|
|
8
|
+
{
|
|
9
|
+
id: 'schedule',
|
|
10
|
+
label: 'Schedule',
|
|
11
|
+
dot: 'bg-orange-400',
|
|
12
|
+
query: { type: 'job', tag: 'schedule' },
|
|
13
|
+
},
|
|
14
|
+
{ id: 'http_client', label: 'HTTP Client', dot: 'bg-amber-400' },
|
|
15
|
+
{ id: 'dump', label: 'Dumps', dot: 'bg-fuchsia-400' },
|
|
16
|
+
{ id: 'event', label: 'Events', dot: 'bg-indigo-400' },
|
|
17
|
+
{ id: 'log', label: 'Logs', dot: 'bg-zinc-400' },
|
|
18
|
+
{ id: 'model', label: 'Models', dot: 'bg-lime-400' },
|
|
19
|
+
{ id: 'redis', label: 'Redis', dot: 'bg-rose-400' },
|
|
20
|
+
];
|
|
21
|
+
const FALLBACK_DOT = 'bg-zinc-500';
|
|
22
|
+
const BY_ID = Object.fromEntries(ENTRY_TYPES.map((type) => [type.id, type]));
|
|
23
|
+
/** Dot color for a type id; unknown types get a neutral fallback. */
|
|
24
|
+
export function dotForType(typeId) {
|
|
25
|
+
return BY_ID[typeId]?.dot ?? FALLBACK_DOT;
|
|
26
|
+
}
|
|
27
|
+
/** Human label for a type id; unknown types echo the raw id. */
|
|
28
|
+
export function labelForType(typeId) {
|
|
29
|
+
return BY_ID[typeId]?.label ?? typeId;
|
|
30
|
+
}
|
|
31
|
+
/** True when `typeId` is a known, navigable entry type. */
|
|
32
|
+
export function isKnownType(typeId) {
|
|
33
|
+
return typeId in BY_ID;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The backend fetch filter for a nav/route type id. Most types fetch
|
|
37
|
+
* `{ type: id }`, but a few (e.g. `schedule`) override via `query` — scheduled
|
|
38
|
+
* runs are stored as `job` entries tagged `schedule`, so the route id and the
|
|
39
|
+
* backend filter diverge. Unknown ids fall back to `{ type: id }`.
|
|
40
|
+
*/
|
|
41
|
+
export function resolveEntryQuery(typeId) {
|
|
42
|
+
return BY_ID[typeId]?.query ?? { type: typeId };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=entry-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-types.js","sourceRoot":"","sources":["../../../src/react/components/entry-types.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE;IAC3D,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE;IACpD,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;IAC3D,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE;IAClD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE;IACjD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE;IACnD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE;KACxC;IACD,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE;IAChE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE;IACrD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE;IACtD,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE;IAChD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE;IACpD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE;CACpD,CAAC;AAEF,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC,MAAM,KAAK,GAAiC,MAAM,CAAC,WAAW,CAC5D,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAC3C,CAAC;AAEF,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC;AAC5C,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC;AACxC,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,IAAI,KAAK,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small toolbar exposing "Copy JSON" / "Download JSON" actions for a value.
|
|
3
|
+
* Used on the entry-detail page to export the full `EntryWithBatch`.
|
|
4
|
+
*/
|
|
5
|
+
export declare function ExportJsonToolbar({ value, filename, }: {
|
|
6
|
+
value: unknown;
|
|
7
|
+
filename: string;
|
|
8
|
+
}): JSX.Element;
|
|
9
|
+
//# sourceMappingURL=export-json-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-json-toolbar.d.ts","sourceRoot":"","sources":["../../../src/react/components/export-json-toolbar.tsx"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,GACT,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAqBpD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { copyJson, downloadJson } from './export-json.js';
|
|
4
|
+
const BUTTON_CLASS = 'rounded border border-zinc-700 bg-zinc-900 px-2.5 py-1 text-[11px] text-zinc-300 ' +
|
|
5
|
+
'transition-colors hover:border-zinc-600 hover:bg-zinc-800 hover:text-zinc-100';
|
|
6
|
+
/**
|
|
7
|
+
* A small toolbar exposing "Copy JSON" / "Download JSON" actions for a value.
|
|
8
|
+
* Used on the entry-detail page to export the full `EntryWithBatch`.
|
|
9
|
+
*/
|
|
10
|
+
export function ExportJsonToolbar({ value, filename, }) {
|
|
11
|
+
const [copied, setCopied] = useState(false);
|
|
12
|
+
async function handleCopy() {
|
|
13
|
+
const ok = await copyJson(value);
|
|
14
|
+
if (ok) {
|
|
15
|
+
setCopied(true);
|
|
16
|
+
setTimeout(() => setCopied(false), 1500);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: handleCopy, className: BUTTON_CLASS, children: copied ? 'Copied' : 'Copy JSON' }), _jsx("button", { type: "button", onClick: () => downloadJson(filename, value), className: BUTTON_CLASS, children: "Download JSON" })] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=export-json-toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-json-toolbar.js","sourceRoot":"","sources":["../../../src/react/components/export-json-toolbar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,YAAY,GAChB,mFAAmF;IACnF,+EAA+E,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,GAC6B;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,KAAK,UAAU,UAAU;QACvB,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,EAAE,EAAE,CAAC;YACP,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,YAC/D,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,GACzB,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,YAAY,8BAElF,IACL,CACP,CAAC;AACJ,CAAC"}
|