@flanksource/clicky-ui 0.3.48 → 0.3.50
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/connections/ConnectionsPage.cjs +219 -0
- package/dist/connections/ConnectionsPage.cjs.map +1 -0
- package/dist/connections/ConnectionsPage.d.ts +23 -0
- package/dist/connections/ConnectionsPage.d.ts.map +1 -0
- package/dist/connections/ConnectionsPage.js +219 -0
- package/dist/connections/ConnectionsPage.js.map +1 -0
- package/dist/connections/connectionActionStatus.cjs +43 -0
- package/dist/connections/connectionActionStatus.cjs.map +1 -0
- package/dist/connections/connectionActionStatus.d.ts +5 -0
- package/dist/connections/connectionActionStatus.d.ts.map +1 -0
- package/dist/connections/connectionActionStatus.js +43 -0
- package/dist/connections/connectionActionStatus.js.map +1 -0
- package/dist/connections/connectionActionTypes.cjs +24 -0
- package/dist/connections/connectionActionTypes.cjs.map +1 -0
- package/dist/connections/connectionActionTypes.d.ts +36 -0
- package/dist/connections/connectionActionTypes.d.ts.map +1 -0
- package/dist/connections/connectionActionTypes.js +24 -0
- package/dist/connections/connectionActionTypes.js.map +1 -0
- package/dist/connections/connectionActions.cjs +11 -0
- package/dist/connections/connectionActions.cjs.map +1 -0
- package/dist/connections/connectionActions.d.ts +15 -0
- package/dist/connections/connectionActions.d.ts.map +1 -0
- package/dist/connections/connectionActions.js +11 -0
- package/dist/connections/connectionActions.js.map +1 -0
- package/dist/connections/connectionDashboard.cjs +185 -0
- package/dist/connections/connectionDashboard.cjs.map +1 -0
- package/dist/connections/connectionDashboard.d.ts +25 -0
- package/dist/connections/connectionDashboard.d.ts.map +1 -0
- package/dist/connections/connectionDashboard.js +185 -0
- package/dist/connections/connectionDashboard.js.map +1 -0
- package/dist/connections/connectionDashboardModel.cjs +43 -0
- package/dist/connections/connectionDashboardModel.cjs.map +1 -0
- package/dist/connections/connectionDashboardModel.d.ts +75 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -0
- package/dist/connections/connectionDashboardModel.js +43 -0
- package/dist/connections/connectionDashboardModel.js.map +1 -0
- package/dist/connections/connectionDashboardRenderer.cjs +21 -0
- package/dist/connections/connectionDashboardRenderer.cjs.map +1 -0
- package/dist/connections/connectionDashboardRenderer.d.ts +15 -0
- package/dist/connections/connectionDashboardRenderer.d.ts.map +1 -0
- package/dist/connections/connectionDashboardRenderer.js +21 -0
- package/dist/connections/connectionDashboardRenderer.js.map +1 -0
- package/dist/connections/connectionDashboardRow.cjs +169 -0
- package/dist/connections/connectionDashboardRow.cjs.map +1 -0
- package/dist/connections/connectionDashboardRow.d.ts +12 -0
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -0
- package/dist/connections/connectionDashboardRow.js +169 -0
- package/dist/connections/connectionDashboardRow.js.map +1 -0
- package/dist/connections/connectionErrorView.cjs +8 -0
- package/dist/connections/connectionErrorView.cjs.map +1 -0
- package/dist/connections/connectionErrorView.d.ts +4 -0
- package/dist/connections/connectionErrorView.d.ts.map +1 -0
- package/dist/connections/connectionErrorView.js +8 -0
- package/dist/connections/connectionErrorView.js.map +1 -0
- package/dist/connections/connectionHealth.cjs +82 -0
- package/dist/connections/connectionHealth.cjs.map +1 -0
- package/dist/connections/connectionHealth.d.ts +33 -0
- package/dist/connections/connectionHealth.d.ts.map +1 -0
- package/dist/connections/connectionHealth.js +82 -0
- package/dist/connections/connectionHealth.js.map +1 -0
- package/dist/connections/connectionLogging.cjs +29 -0
- package/dist/connections/connectionLogging.cjs.map +1 -0
- package/dist/connections/connectionLogging.d.ts +11 -0
- package/dist/connections/connectionLogging.d.ts.map +1 -0
- package/dist/connections/connectionLogging.js +29 -0
- package/dist/connections/connectionLogging.js.map +1 -0
- package/dist/connections/connectionLoggingField.cjs +37 -0
- package/dist/connections/connectionLoggingField.cjs.map +1 -0
- package/dist/connections/connectionLoggingField.d.ts +12 -0
- package/dist/connections/connectionLoggingField.d.ts.map +1 -0
- package/dist/connections/connectionLoggingField.js +37 -0
- package/dist/connections/connectionLoggingField.js.map +1 -0
- package/dist/connections/connectionLoggingModel.cjs +16 -0
- package/dist/connections/connectionLoggingModel.cjs.map +1 -0
- package/dist/connections/connectionLoggingModel.d.ts +6 -0
- package/dist/connections/connectionLoggingModel.d.ts.map +1 -0
- package/dist/connections/connectionLoggingModel.js +16 -0
- package/dist/connections/connectionLoggingModel.js.map +1 -0
- package/dist/connections/connectionResolveView.cjs +24 -0
- package/dist/connections/connectionResolveView.cjs.map +1 -0
- package/dist/connections/connectionResolveView.d.ts +5 -0
- package/dist/connections/connectionResolveView.d.ts.map +1 -0
- package/dist/connections/connectionResolveView.js +24 -0
- package/dist/connections/connectionResolveView.js.map +1 -0
- package/dist/connections/connectionTestButton.cjs +58 -0
- package/dist/connections/connectionTestButton.cjs.map +1 -0
- package/dist/connections/connectionTestButton.d.ts +6 -0
- package/dist/connections/connectionTestButton.d.ts.map +1 -0
- package/dist/connections/connectionTestButton.js +58 -0
- package/dist/connections/connectionTestButton.js.map +1 -0
- package/dist/connections/connectionTestView.cjs +12 -0
- package/dist/connections/connectionTestView.cjs.map +1 -0
- package/dist/connections/connectionTestView.d.ts +5 -0
- package/dist/connections/connectionTestView.d.ts.map +1 -0
- package/dist/connections/connectionTestView.js +12 -0
- package/dist/connections/connectionTestView.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +33 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -0
- package/dist/connections/connectionsPageModel.d.ts +24 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -0
- package/dist/connections/connectionsPageModel.js +33 -0
- package/dist/connections/connectionsPageModel.js.map +1 -0
- package/dist/connections/iconProvider.cjs +20 -0
- package/dist/connections/iconProvider.cjs.map +1 -0
- package/dist/connections/iconProvider.d.ts +7 -0
- package/dist/connections/iconProvider.d.ts.map +1 -0
- package/dist/connections/iconProvider.js +20 -0
- package/dist/connections/iconProvider.js.map +1 -0
- package/dist/connections.cjs +45 -0
- package/dist/connections.cjs.map +1 -0
- package/dist/connections.d.ts +34 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +45 -0
- package/dist/connections.js.map +1 -0
- package/dist/data/DataTable.cjs +18 -8
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +4 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +18 -8
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/TaskManager.cjs +183 -159
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts +3 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +185 -161
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +1 -0
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.js +1 -0
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProgress.cjs +13 -7
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +3 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +13 -7
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
- package/dist/data/diagnostics/MetricTile.cjs +44 -0
- package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
- package/dist/data/diagnostics/MetricTile.d.ts +13 -0
- package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
- package/dist/data/diagnostics/MetricTile.js +44 -0
- package/dist/data/diagnostics/MetricTile.js.map +1 -0
- package/dist/data/diagnostics/StackDumpView.cjs +227 -0
- package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
- package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
- package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
- package/dist/data/diagnostics/StackDumpView.js +227 -0
- package/dist/data/diagnostics/StackDumpView.js.map +1 -0
- package/dist/data/diagnostics/fixtures.d.ts +1 -0
- package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
- package/dist/data/diagnostics/metric-tone.cjs +18 -0
- package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
- package/dist/data/diagnostics/metric-tone.d.ts +6 -0
- package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
- package/dist/data/diagnostics/metric-tone.js +18 -0
- package/dist/data/diagnostics/metric-tone.js.map +1 -0
- package/dist/data/diagnostics/stacktrace.cjs +44 -0
- package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
- package/dist/data/diagnostics/stacktrace.d.ts +7 -0
- package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
- package/dist/data/diagnostics/stacktrace.js +44 -0
- package/dist/data/diagnostics/stacktrace.js.map +1 -1
- package/dist/data/diagnostics/types.d.ts +2 -8
- package/dist/data/diagnostics/types.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.cjs +339 -0
- package/dist/data/lint/LintDetail.cjs.map +1 -0
- package/dist/data/lint/LintDetail.d.ts +17 -0
- package/dist/data/lint/LintDetail.d.ts.map +1 -0
- package/dist/data/lint/LintDetail.js +339 -0
- package/dist/data/lint/LintDetail.js.map +1 -0
- package/dist/data/lint/LintFilterBar.cjs +103 -0
- package/dist/data/lint/LintFilterBar.cjs.map +1 -0
- package/dist/data/lint/LintFilterBar.d.ts +16 -0
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
- package/dist/data/lint/LintFilterBar.js +103 -0
- package/dist/data/lint/LintFilterBar.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +144 -0
- package/dist/data/lint/LintResults.cjs.map +1 -0
- package/dist/data/lint/LintResults.d.ts +39 -0
- package/dist/data/lint/LintResults.d.ts.map +1 -0
- package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
- package/dist/data/lint/LintResults.js +144 -0
- package/dist/data/lint/LintResults.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +66 -0
- package/dist/data/lint/LintTreeNode.cjs.map +1 -0
- package/dist/data/lint/LintTreeNode.d.ts +7 -0
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
- package/dist/data/lint/LintTreeNode.js +66 -0
- package/dist/data/lint/LintTreeNode.js.map +1 -0
- package/dist/data/lint/actions.cjs +195 -0
- package/dist/data/lint/actions.cjs.map +1 -0
- package/dist/data/lint/actions.d.ts +29 -0
- package/dist/data/lint/actions.d.ts.map +1 -0
- package/dist/data/lint/actions.js +195 -0
- package/dist/data/lint/actions.js.map +1 -0
- package/dist/data/lint/grouping-options.cjs +14 -0
- package/dist/data/lint/grouping-options.cjs.map +1 -0
- package/dist/data/lint/grouping-options.d.ts +9 -0
- package/dist/data/lint/grouping-options.d.ts.map +1 -0
- package/dist/data/lint/grouping-options.js +14 -0
- package/dist/data/lint/grouping-options.js.map +1 -0
- package/dist/data/lint/grouping.cjs +450 -0
- package/dist/data/lint/grouping.cjs.map +1 -0
- package/dist/data/lint/grouping.d.ts +10 -0
- package/dist/data/lint/grouping.d.ts.map +1 -0
- package/dist/data/lint/grouping.js +450 -0
- package/dist/data/lint/grouping.js.map +1 -0
- package/dist/data/lint/index.d.ts +10 -0
- package/dist/data/lint/index.d.ts.map +1 -0
- package/dist/data/lint/paths.cjs +35 -0
- package/dist/data/lint/paths.cjs.map +1 -0
- package/dist/data/lint/paths.d.ts +13 -0
- package/dist/data/lint/paths.d.ts.map +1 -0
- package/dist/data/lint/paths.js +35 -0
- package/dist/data/lint/paths.js.map +1 -0
- package/dist/data/lint/stats.cjs +76 -0
- package/dist/data/lint/stats.cjs.map +1 -0
- package/dist/data/lint/stats.d.ts +19 -0
- package/dist/data/lint/stats.d.ts.map +1 -0
- package/dist/data/lint/stats.js +76 -0
- package/dist/data/lint/stats.js.map +1 -0
- package/dist/data/lint/types.cjs +16 -0
- package/dist/data/lint/types.cjs.map +1 -0
- package/dist/data/lint/types.d.ts +93 -0
- package/dist/data/lint/types.d.ts.map +1 -0
- package/dist/data/lint/types.js +16 -0
- package/dist/data/lint/types.js.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
- package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
- package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.js +113 -0
- package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
- package/dist/data/test-runner/TestAttempts.cjs +36 -0
- package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
- package/dist/data/test-runner/TestAttempts.d.ts +5 -0
- package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
- package/dist/data/test-runner/TestAttempts.js +36 -0
- package/dist/data/test-runner/TestAttempts.js.map +1 -0
- package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +14 -4
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
- package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
- package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.js +9 -29
- package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +33 -0
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +34 -1
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -0
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +8 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -0
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +3 -1
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +3 -1
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +9 -1
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +5 -0
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +9 -1
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/attempts.cjs +62 -0
- package/dist/data/test-runner/attempts.cjs.map +1 -0
- package/dist/data/test-runner/attempts.d.ts +13 -0
- package/dist/data/test-runner/attempts.d.ts.map +1 -0
- package/dist/data/test-runner/attempts.js +62 -0
- package/dist/data/test-runner/attempts.js.map +1 -0
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +6 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +5 -1
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +2 -0
- package/dist/data/test-runner/marks.cjs.map +1 -1
- package/dist/data/test-runner/marks.d.ts.map +1 -1
- package/dist/data/test-runner/marks.js +2 -0
- package/dist/data/test-runner/marks.js.map +1 -1
- package/dist/data/test-runner/process-metrics.cjs +15 -0
- package/dist/data/test-runner/process-metrics.cjs.map +1 -0
- package/dist/data/test-runner/process-metrics.d.ts +22 -0
- package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
- package/dist/data/test-runner/process-metrics.js +15 -0
- package/dist/data/test-runner/process-metrics.js.map +1 -0
- package/dist/data/test-runner/status.cjs +11 -3
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.d.ts +3 -1
- package/dist/data/test-runner/status.d.ts.map +1 -1
- package/dist/data/test-runner/status.js +11 -3
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +14 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/traces/GoProfileView.cjs +176 -0
- package/dist/data/traces/GoProfileView.cjs.map +1 -0
- package/dist/data/traces/GoProfileView.d.ts +30 -0
- package/dist/data/traces/GoProfileView.d.ts.map +1 -0
- package/dist/data/traces/GoProfileView.js +176 -0
- package/dist/data/traces/GoProfileView.js.map +1 -0
- package/dist/data/traces/ProcessFacetTable.cjs +79 -0
- package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
- package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
- package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
- package/dist/data/traces/ProcessFacetTable.js +79 -0
- package/dist/data/traces/ProcessFacetTable.js.map +1 -0
- package/dist/data/traces/ProcessRecordViews.cjs +41 -0
- package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
- package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
- package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
- package/dist/data/traces/ProcessRecordViews.js +41 -0
- package/dist/data/traces/ProcessRecordViews.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
- package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
- package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.js +316 -0
- package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
- package/dist/data/traces/ProcessTraceTree.cjs +135 -0
- package/dist/data/traces/ProcessTraceTree.cjs.map +1 -0
- package/dist/data/traces/ProcessTraceTree.d.ts +41 -0
- package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -0
- package/dist/data/traces/ProcessTraceTree.js +135 -0
- package/dist/data/traces/ProcessTraceTree.js.map +1 -0
- package/dist/data/traces/Sparkline.cjs +45 -0
- package/dist/data/traces/Sparkline.cjs.map +1 -0
- package/dist/data/traces/Sparkline.d.ts +29 -0
- package/dist/data/traces/Sparkline.d.ts.map +1 -0
- package/dist/data/traces/Sparkline.js +45 -0
- package/dist/data/traces/Sparkline.js.map +1 -0
- package/dist/data/traces/SqlTraceTable.cjs +104 -0
- package/dist/data/traces/SqlTraceTable.cjs.map +1 -0
- package/dist/data/traces/SqlTraceTable.d.ts +19 -0
- package/dist/data/traces/SqlTraceTable.d.ts.map +1 -0
- package/dist/data/traces/SqlTraceTable.js +104 -0
- package/dist/data/traces/SqlTraceTable.js.map +1 -0
- package/dist/data/traces/TerminalCastPlayer.cjs +162 -0
- package/dist/data/traces/TerminalCastPlayer.cjs.map +1 -0
- package/dist/data/traces/TerminalCastPlayer.js +162 -0
- package/dist/data/traces/TerminalCastPlayer.js.map +1 -0
- package/dist/data/traces/TraceHarView.cjs +15 -0
- package/dist/data/traces/TraceHarView.cjs.map +1 -0
- package/dist/data/traces/TraceHarView.js +15 -0
- package/dist/data/traces/TraceHarView.js.map +1 -0
- package/dist/data/traces/TraceView.cjs +63 -0
- package/dist/data/traces/TraceView.cjs.map +1 -0
- package/dist/data/traces/TraceView.d.ts +20 -0
- package/dist/data/traces/TraceView.d.ts.map +1 -0
- package/dist/data/traces/TraceView.js +63 -0
- package/dist/data/traces/TraceView.js.map +1 -0
- package/dist/data/traces/TraceWindowList.cjs +117 -0
- package/dist/data/traces/TraceWindowList.cjs.map +1 -0
- package/dist/data/traces/TraceWindowList.d.ts +48 -0
- package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
- package/dist/data/traces/TraceWindowList.js +117 -0
- package/dist/data/traces/TraceWindowList.js.map +1 -0
- package/dist/data/traces/cast.cjs +81 -0
- package/dist/data/traces/cast.cjs.map +1 -0
- package/dist/data/traces/cast.js +81 -0
- package/dist/data/traces/cast.js.map +1 -0
- package/dist/data/traces/fixtures.d.ts +25 -1
- package/dist/data/traces/fixtures.d.ts.map +1 -1
- package/dist/data/traces/har-adapter.cjs +83 -0
- package/dist/data/traces/har-adapter.cjs.map +1 -0
- package/dist/data/traces/har-adapter.js +83 -0
- package/dist/data/traces/har-adapter.js.map +1 -0
- package/dist/data/traces/index.d.ts +19 -0
- package/dist/data/traces/index.d.ts.map +1 -0
- package/dist/data/traces/process-facets.cjs +48 -0
- package/dist/data/traces/process-facets.cjs.map +1 -0
- package/dist/data/traces/process-facets.d.ts +38 -0
- package/dist/data/traces/process-facets.d.ts.map +1 -0
- package/dist/data/traces/process-facets.js +48 -0
- package/dist/data/traces/process-facets.js.map +1 -0
- package/dist/data/traces/process-tree.cjs +85 -0
- package/dist/data/traces/process-tree.cjs.map +1 -0
- package/dist/data/traces/process-tree.d.ts +40 -0
- package/dist/data/traces/process-tree.d.ts.map +1 -0
- package/dist/data/traces/process-tree.js +85 -0
- package/dist/data/traces/process-tree.js.map +1 -0
- package/dist/data/traces/profile-aggregate.cjs +78 -0
- package/dist/data/traces/profile-aggregate.cjs.map +1 -0
- package/dist/data/traces/profile-aggregate.d.ts +41 -0
- package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
- package/dist/data/traces/profile-aggregate.js +78 -0
- package/dist/data/traces/profile-aggregate.js.map +1 -0
- package/dist/data/traces/sql-trace.cjs +39 -0
- package/dist/data/traces/sql-trace.cjs.map +1 -0
- package/dist/data/traces/sql-trace.d.ts +31 -0
- package/dist/data/traces/sql-trace.d.ts.map +1 -0
- package/dist/data/traces/sql-trace.js +39 -0
- package/dist/data/traces/sql-trace.js.map +1 -0
- package/dist/data/traces/stack-checkpoints.cjs +22 -0
- package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
- package/dist/data/traces/stack-checkpoints.d.ts +18 -0
- package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
- package/dist/data/traces/stack-checkpoints.js +22 -0
- package/dist/data/traces/stack-checkpoints.js.map +1 -0
- package/dist/data/traces/terminal-screen.cjs +270 -0
- package/dist/data/traces/terminal-screen.cjs.map +1 -0
- package/dist/data/traces/terminal-screen.js +270 -0
- package/dist/data/traces/terminal-screen.js.map +1 -0
- package/dist/data/traces/terminal-timeline.cjs +48 -0
- package/dist/data/traces/terminal-timeline.cjs.map +1 -0
- package/dist/data/traces/terminal-timeline.js +48 -0
- package/dist/data/traces/terminal-timeline.js.map +1 -0
- package/dist/data/traces/types.d.ts +121 -8
- package/dist/data/traces/types.d.ts.map +1 -1
- package/dist/data/verification/adapters.cjs +1 -0
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +1 -0
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.cjs.map +1 -1
- package/dist/data/version-info.js +3 -3
- package/dist/data/version-info.js.map +1 -1
- package/dist/data.cjs +105 -5
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +5 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +101 -1
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +107 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +101 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessTraceTree.cjs","sources":["../../../src/data/traces/ProcessTraceTree.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { UiDebug, UiLoader, UiServerProcess } from \"../../icons\";\nimport { formatBytes, formatDuration } from \"../../lib/format\";\nimport { cn } from \"../../lib/utils\";\nimport { processLabel, processStateColor, processStateIcon } from \"../diagnostics/utils\";\nimport { Icon } from \"../Icon\";\nimport { Tree } from \"../Tree\";\nimport {\n buildProcessForest,\n cpuSeriesByKey,\n flattenForest,\n formatCpuPercent,\n processLifetimeMs,\n pruneExitedProcesses,\n type ProcessTreeNode,\n} from \"./process-tree\";\nimport { Sparkline } from \"./Sparkline\";\nimport type { ProcessNodeRow, ProcessSampleRow } from \"./types\";\n\n/** Roots and their direct children start open; deeper levels open on demand or to reveal the selection. */\nconst OPEN_DEPTH = 2;\n\nexport type ProcessTraceTreeProps = {\n /** `process_tree` trace records, one per process. */\n nodes: ProcessNodeRow[];\n /** `process_samples` records; a process with at least two shows a CPU sparkline. */\n samples?: ProcessSampleRow[];\n /** Called with the `key` of the clicked process. */\n onSelect: (key: string) => void;\n /** `key` of the selected process. */\n selectedKey?: string | null;\n /** Shown when there are no processes. */\n emptyLabel?: string;\n /** Classes applied to the tree root. */\n className?: string;\n /**\n * Tri-state expand-all: true opens every process, false closes them, null\n * restores the default depth. Without `onExpandAllChange` the host owns the\n * state and the tree's own Expand / Collapse buttons are hidden.\n */\n expandAll?: boolean | null;\n /** Called when the tree's Expand all / Collapse all buttons change the state. */\n onExpandAllChange?: (next: boolean | null) => void;\n /** Drop exited processes, keeping an exited one only while a live descendant hangs off it. */\n hideExited?: boolean;\n /** Called with the checkbox state; providing it shows the \"N processes / Hide exited\" toolbar. */\n onHideExitedChange?: (hide: boolean) => void;\n /** No trace has arrived yet: with no processes, show a waiting spinner instead of the empty label. */\n loading?: boolean;\n /** A load failure, shown as a banner above the tree. */\n error?: string;\n};\n\n/** The tree is controlled by a host that owns the expand-all buttons, so the tree never changes it. */\nconst hostOwnedExpandAll = () => {};\n\nfunction ProcessRow({ node, selected, series }: { node: ProcessTreeNode; selected: boolean; series: number[] | undefined }) {\n const { row, exited } = node;\n return (\n <div\n data-process-key={row.key}\n {...(exited ? { \"data-exited\": \"true\" } : {})}\n className={cn(\"flex min-w-0 flex-1 items-center gap-1.5\", exited && \"opacity-60\")}\n title={row.command}\n >\n <Icon\n icon={row.isRoot ? UiServerProcess : UiDebug}\n className={row.isRoot ? \"text-base text-blue-600\" : \"text-base text-muted-foreground\"}\n />\n <span className={cn(\"truncate\", selected ? \"font-semibold text-primary\" : \"font-medium text-foreground\")}>\n {processLabel({ pid: row.pid, name: row.name, command: row.command })}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">pid {row.pid}</span>\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground\" title={row.command} data-process-command=\"\">\n {row.command}\n </span>\n {series ? <Sparkline values={series} label={`CPU % over ${series.length} samples`} /> : null}\n <span className={cn(\"inline-flex shrink-0 items-center gap-1 text-xs\", processStateColor(row.status))}>\n <Icon icon={processStateIcon(row.status)} />\n {row.status}\n </span>\n {exited ? (\n <>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title=\"Lifetime\">\n {formatDuration(processLifetimeMs(row))}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title=\"Peak CPU\">\n {`peak ${formatCpuPercent(row.peakCpuPercent)}`}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title=\"Peak RSS\">\n {`peak ${formatBytes(row.peakRssBytes)}`}\n </span>\n </>\n ) : (\n <>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title={`Peak ${formatCpuPercent(row.peakCpuPercent)}`}>\n {formatCpuPercent(row.cpuPercent)}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title={`Peak ${formatBytes(row.peakRssBytes)}`}>\n {formatBytes(row.rssBytes)}\n </span>\n </>\n )}\n </div>\n );\n}\n\n/**\n * The process tree of a `process_tree` trace: a forest keyed by `key` /\n * `parentKey`, where a process whose parent was never recorded is a root.\n * Each row shows the process, its truncated command, state and usage; exited\n * processes are dimmed and show their lifetime and peak usage. It is built on\n * the same `Tree` primitive and process helpers as `DiagnosticsTree`, which\n * cannot take a forest, key selection or exit information.\n */\nexport function ProcessTraceTree({\n nodes,\n samples,\n onSelect,\n selectedKey,\n emptyLabel = \"No processes recorded\",\n className,\n expandAll,\n onExpandAllChange,\n hideExited = false,\n onHideExitedChange,\n loading = false,\n error,\n}: ProcessTraceTreeProps) {\n const full = useMemo(() => buildProcessForest(nodes), [nodes]);\n const roots = useMemo(() => (hideExited ? pruneExitedProcesses(full) : full), [full, hideExited]);\n const series = useMemo(() => cpuSeriesByKey(samples ?? []), [samples]);\n const selected = useMemo(\n () => (selectedKey ? (flattenForest(roots).find((node) => node.row.key === selectedKey) ?? null) : null),\n [roots, selectedKey],\n );\n\n const empty =\n nodes.length === 0 ? (\n error ? null : loading ? (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\" role=\"status\">\n <Icon icon={UiLoader} className=\"animate-spin text-3xl text-blue-500\" />\n <p className=\"mt-2\">Waiting for process trace…</p>\n </div>\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">{emptyLabel}</div>\n )\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">Every process has exited</div>\n );\n\n const hostOwnsExpandAll = expandAll !== undefined && onExpandAllChange === undefined;\n\n return (\n <div className={cn(\"flex min-h-0 flex-col\", className)}>\n {onHideExitedChange && (\n <div\n className=\"flex items-center justify-between gap-2 border-b border-border bg-background px-3 py-1.5 text-xs text-muted-foreground\"\n data-process-toolbar=\"\"\n >\n <span>\n {nodes.length} {nodes.length === 1 ? \"process\" : \"processes\"}\n </span>\n <label className=\"inline-flex cursor-pointer items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={hideExited}\n onChange={(event) => onHideExitedChange(event.target.checked)}\n />\n Hide exited\n </label>\n </div>\n )}\n {error && (\n <div className=\"whitespace-pre-wrap px-3 py-2 text-xs text-red-700 dark:text-red-400\" role=\"alert\">\n {error}\n </div>\n )}\n <Tree<ProcessTreeNode>\n roots={roots}\n className=\"min-h-0 flex-1\"\n ariaLabel=\"Process tree\"\n empty={empty}\n showControls={!hostOwnsExpandAll}\n {...(expandAll !== undefined ? { expandAll, onExpandAllChange: onExpandAllChange ?? hostOwnedExpandAll } : {})}\n {...(expandAll === undefined && onExpandAllChange ? { onExpandAllChange } : {})}\n getChildren={(node) => node.children}\n getKey={(node) => node.row.key}\n getSearchText={(node) => `${node.row.name} ${node.row.command} ${node.row.pid}`}\n selected={selected}\n revealSelected\n defaultOpen={(_node, depth) => depth < OPEN_DEPTH}\n onSelect={(node) => onSelect(node.row.key)}\n renderRow={({ node, selected: isSelected }) => (\n <ProcessRow node={node} selected={isSelected} series={series.get(node.row.key)} />\n )}\n rowClass={(_node, isSelected) =>\n isSelected ? \"bg-primary/10 border-l-2 border-primary\" : \"hover:bg-accent\"\n }\n />\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx","Icon","UiServerProcess","UiDebug","processLabel","Sparkline","processStateColor","processStateIcon","Fragment","formatDuration","processLifetimeMs","formatCpuPercent","formatBytes","useMemo","buildProcessForest","pruneExitedProcesses","cpuSeriesByKey","flattenForest","UiLoader","Tree"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ProcessNodeRow, ProcessSampleRow } from './types.js';
|
|
2
|
+
export type ProcessTraceTreeProps = {
|
|
3
|
+
/** `process_tree` trace records, one per process. */
|
|
4
|
+
nodes: ProcessNodeRow[];
|
|
5
|
+
/** `process_samples` records; a process with at least two shows a CPU sparkline. */
|
|
6
|
+
samples?: ProcessSampleRow[];
|
|
7
|
+
/** Called with the `key` of the clicked process. */
|
|
8
|
+
onSelect: (key: string) => void;
|
|
9
|
+
/** `key` of the selected process. */
|
|
10
|
+
selectedKey?: string | null;
|
|
11
|
+
/** Shown when there are no processes. */
|
|
12
|
+
emptyLabel?: string;
|
|
13
|
+
/** Classes applied to the tree root. */
|
|
14
|
+
className?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Tri-state expand-all: true opens every process, false closes them, null
|
|
17
|
+
* restores the default depth. Without `onExpandAllChange` the host owns the
|
|
18
|
+
* state and the tree's own Expand / Collapse buttons are hidden.
|
|
19
|
+
*/
|
|
20
|
+
expandAll?: boolean | null;
|
|
21
|
+
/** Called when the tree's Expand all / Collapse all buttons change the state. */
|
|
22
|
+
onExpandAllChange?: (next: boolean | null) => void;
|
|
23
|
+
/** Drop exited processes, keeping an exited one only while a live descendant hangs off it. */
|
|
24
|
+
hideExited?: boolean;
|
|
25
|
+
/** Called with the checkbox state; providing it shows the "N processes / Hide exited" toolbar. */
|
|
26
|
+
onHideExitedChange?: (hide: boolean) => void;
|
|
27
|
+
/** No trace has arrived yet: with no processes, show a waiting spinner instead of the empty label. */
|
|
28
|
+
loading?: boolean;
|
|
29
|
+
/** A load failure, shown as a banner above the tree. */
|
|
30
|
+
error?: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The process tree of a `process_tree` trace: a forest keyed by `key` /
|
|
34
|
+
* `parentKey`, where a process whose parent was never recorded is a root.
|
|
35
|
+
* Each row shows the process, its truncated command, state and usage; exited
|
|
36
|
+
* processes are dimmed and show their lifetime and peak usage. It is built on
|
|
37
|
+
* the same `Tree` primitive and process helpers as `DiagnosticsTree`, which
|
|
38
|
+
* cannot take a forest, key selection or exit information.
|
|
39
|
+
*/
|
|
40
|
+
export declare function ProcessTraceTree({ nodes, samples, onSelect, selectedKey, emptyLabel, className, expandAll, onExpandAllChange, hideExited, onHideExitedChange, loading, error, }: ProcessTraceTreeProps): import("react").JSX.Element;
|
|
41
|
+
//# sourceMappingURL=ProcessTraceTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessTraceTree.d.ts","sourceRoot":"","sources":["../../../src/data/traces/ProcessTraceTree.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,qDAAqD;IACrD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,oFAAoF;IACpF,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,8FAA8F;IAC9F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,sGAAsG;IACtG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAwDF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,UAAoC,EACpC,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,UAAkB,EAClB,kBAAkB,EAClB,OAAe,EACf,KAAK,GACN,EAAE,qBAAqB,+BA0EvB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { formatDuration, formatBytes } from "../../lib/format.js";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
import { processLabel, processStateIcon, processStateColor } from "../diagnostics/utils.js";
|
|
6
|
+
import { Icon } from "../Icon.js";
|
|
7
|
+
import { Tree } from "../Tree.js";
|
|
8
|
+
import { buildProcessForest, pruneExitedProcesses, cpuSeriesByKey, flattenForest, processLifetimeMs, formatCpuPercent } from "./process-tree.js";
|
|
9
|
+
import { Sparkline } from "./Sparkline.js";
|
|
10
|
+
import { UiLoader } from "../../icons/components/UiLoader.js";
|
|
11
|
+
import { UiServerProcess } from "../../icons/components/UiServerProcess.js";
|
|
12
|
+
import { UiDebug } from "../../icons/components/UiDebug.js";
|
|
13
|
+
const OPEN_DEPTH = 2;
|
|
14
|
+
const hostOwnedExpandAll = () => {
|
|
15
|
+
};
|
|
16
|
+
function ProcessRow({ node, selected, series }) {
|
|
17
|
+
const { row, exited } = node;
|
|
18
|
+
return /* @__PURE__ */ jsxs(
|
|
19
|
+
"div",
|
|
20
|
+
{
|
|
21
|
+
"data-process-key": row.key,
|
|
22
|
+
...exited ? { "data-exited": "true" } : {},
|
|
23
|
+
className: cn("flex min-w-0 flex-1 items-center gap-1.5", exited && "opacity-60"),
|
|
24
|
+
title: row.command,
|
|
25
|
+
children: [
|
|
26
|
+
/* @__PURE__ */ jsx(
|
|
27
|
+
Icon,
|
|
28
|
+
{
|
|
29
|
+
icon: row.isRoot ? UiServerProcess : UiDebug,
|
|
30
|
+
className: row.isRoot ? "text-base text-blue-600" : "text-base text-muted-foreground"
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: cn("truncate", selected ? "font-semibold text-primary" : "font-medium text-foreground"), children: processLabel({ pid: row.pid, name: row.name, command: row.command }) }),
|
|
34
|
+
/* @__PURE__ */ jsxs("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
|
|
35
|
+
"pid ",
|
|
36
|
+
row.pid
|
|
37
|
+
] }),
|
|
38
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground", title: row.command, "data-process-command": "", children: row.command }),
|
|
39
|
+
series ? /* @__PURE__ */ jsx(Sparkline, { values: series, label: `CPU % over ${series.length} samples` }) : null,
|
|
40
|
+
/* @__PURE__ */ jsxs("span", { className: cn("inline-flex shrink-0 items-center gap-1 text-xs", processStateColor(row.status)), children: [
|
|
41
|
+
/* @__PURE__ */ jsx(Icon, { icon: processStateIcon(row.status) }),
|
|
42
|
+
row.status
|
|
43
|
+
] }),
|
|
44
|
+
exited ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", title: "Lifetime", children: formatDuration(processLifetimeMs(row)) }),
|
|
46
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", title: "Peak CPU", children: `peak ${formatCpuPercent(row.peakCpuPercent)}` }),
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", title: "Peak RSS", children: `peak ${formatBytes(row.peakRssBytes)}` })
|
|
48
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
49
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", title: `Peak ${formatCpuPercent(row.peakCpuPercent)}`, children: formatCpuPercent(row.cpuPercent) }),
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", title: `Peak ${formatBytes(row.peakRssBytes)}`, children: formatBytes(row.rssBytes) })
|
|
51
|
+
] })
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function ProcessTraceTree({
|
|
57
|
+
nodes,
|
|
58
|
+
samples,
|
|
59
|
+
onSelect,
|
|
60
|
+
selectedKey,
|
|
61
|
+
emptyLabel = "No processes recorded",
|
|
62
|
+
className,
|
|
63
|
+
expandAll,
|
|
64
|
+
onExpandAllChange,
|
|
65
|
+
hideExited = false,
|
|
66
|
+
onHideExitedChange,
|
|
67
|
+
loading = false,
|
|
68
|
+
error
|
|
69
|
+
}) {
|
|
70
|
+
const full = useMemo(() => buildProcessForest(nodes), [nodes]);
|
|
71
|
+
const roots = useMemo(() => hideExited ? pruneExitedProcesses(full) : full, [full, hideExited]);
|
|
72
|
+
const series = useMemo(() => cpuSeriesByKey(samples ?? []), [samples]);
|
|
73
|
+
const selected = useMemo(
|
|
74
|
+
() => selectedKey ? flattenForest(roots).find((node) => node.row.key === selectedKey) ?? null : null,
|
|
75
|
+
[roots, selectedKey]
|
|
76
|
+
);
|
|
77
|
+
const empty = nodes.length === 0 ? error ? null : loading ? /* @__PURE__ */ jsxs("div", { className: "p-density-6 text-center text-sm text-muted-foreground", role: "status", children: [
|
|
78
|
+
/* @__PURE__ */ jsx(Icon, { icon: UiLoader, className: "animate-spin text-3xl text-blue-500" }),
|
|
79
|
+
/* @__PURE__ */ jsx("p", { className: "mt-2", children: "Waiting for process trace…" })
|
|
80
|
+
] }) : /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-sm text-muted-foreground", children: emptyLabel }) : /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-sm text-muted-foreground", children: "Every process has exited" });
|
|
81
|
+
const hostOwnsExpandAll = expandAll !== void 0 && onExpandAllChange === void 0;
|
|
82
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex min-h-0 flex-col", className), children: [
|
|
83
|
+
onHideExitedChange && /* @__PURE__ */ jsxs(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
className: "flex items-center justify-between gap-2 border-b border-border bg-background px-3 py-1.5 text-xs text-muted-foreground",
|
|
87
|
+
"data-process-toolbar": "",
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
90
|
+
nodes.length,
|
|
91
|
+
" ",
|
|
92
|
+
nodes.length === 1 ? "process" : "processes"
|
|
93
|
+
] }),
|
|
94
|
+
/* @__PURE__ */ jsxs("label", { className: "inline-flex cursor-pointer items-center gap-1.5", children: [
|
|
95
|
+
/* @__PURE__ */ jsx(
|
|
96
|
+
"input",
|
|
97
|
+
{
|
|
98
|
+
type: "checkbox",
|
|
99
|
+
checked: hideExited,
|
|
100
|
+
onChange: (event) => onHideExitedChange(event.target.checked)
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
"Hide exited"
|
|
104
|
+
] })
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
error && /* @__PURE__ */ jsx("div", { className: "whitespace-pre-wrap px-3 py-2 text-xs text-red-700 dark:text-red-400", role: "alert", children: error }),
|
|
109
|
+
/* @__PURE__ */ jsx(
|
|
110
|
+
Tree,
|
|
111
|
+
{
|
|
112
|
+
roots,
|
|
113
|
+
className: "min-h-0 flex-1",
|
|
114
|
+
ariaLabel: "Process tree",
|
|
115
|
+
empty,
|
|
116
|
+
showControls: !hostOwnsExpandAll,
|
|
117
|
+
...expandAll !== void 0 ? { expandAll, onExpandAllChange: onExpandAllChange ?? hostOwnedExpandAll } : {},
|
|
118
|
+
...expandAll === void 0 && onExpandAllChange ? { onExpandAllChange } : {},
|
|
119
|
+
getChildren: (node) => node.children,
|
|
120
|
+
getKey: (node) => node.row.key,
|
|
121
|
+
getSearchText: (node) => `${node.row.name} ${node.row.command} ${node.row.pid}`,
|
|
122
|
+
selected,
|
|
123
|
+
revealSelected: true,
|
|
124
|
+
defaultOpen: (_node, depth) => depth < OPEN_DEPTH,
|
|
125
|
+
onSelect: (node) => onSelect(node.row.key),
|
|
126
|
+
renderRow: ({ node, selected: isSelected }) => /* @__PURE__ */ jsx(ProcessRow, { node, selected: isSelected, series: series.get(node.row.key) }),
|
|
127
|
+
rowClass: (_node, isSelected) => isSelected ? "bg-primary/10 border-l-2 border-primary" : "hover:bg-accent"
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
] });
|
|
131
|
+
}
|
|
132
|
+
export {
|
|
133
|
+
ProcessTraceTree
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=ProcessTraceTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessTraceTree.js","sources":["../../../src/data/traces/ProcessTraceTree.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { UiDebug, UiLoader, UiServerProcess } from \"../../icons\";\nimport { formatBytes, formatDuration } from \"../../lib/format\";\nimport { cn } from \"../../lib/utils\";\nimport { processLabel, processStateColor, processStateIcon } from \"../diagnostics/utils\";\nimport { Icon } from \"../Icon\";\nimport { Tree } from \"../Tree\";\nimport {\n buildProcessForest,\n cpuSeriesByKey,\n flattenForest,\n formatCpuPercent,\n processLifetimeMs,\n pruneExitedProcesses,\n type ProcessTreeNode,\n} from \"./process-tree\";\nimport { Sparkline } from \"./Sparkline\";\nimport type { ProcessNodeRow, ProcessSampleRow } from \"./types\";\n\n/** Roots and their direct children start open; deeper levels open on demand or to reveal the selection. */\nconst OPEN_DEPTH = 2;\n\nexport type ProcessTraceTreeProps = {\n /** `process_tree` trace records, one per process. */\n nodes: ProcessNodeRow[];\n /** `process_samples` records; a process with at least two shows a CPU sparkline. */\n samples?: ProcessSampleRow[];\n /** Called with the `key` of the clicked process. */\n onSelect: (key: string) => void;\n /** `key` of the selected process. */\n selectedKey?: string | null;\n /** Shown when there are no processes. */\n emptyLabel?: string;\n /** Classes applied to the tree root. */\n className?: string;\n /**\n * Tri-state expand-all: true opens every process, false closes them, null\n * restores the default depth. Without `onExpandAllChange` the host owns the\n * state and the tree's own Expand / Collapse buttons are hidden.\n */\n expandAll?: boolean | null;\n /** Called when the tree's Expand all / Collapse all buttons change the state. */\n onExpandAllChange?: (next: boolean | null) => void;\n /** Drop exited processes, keeping an exited one only while a live descendant hangs off it. */\n hideExited?: boolean;\n /** Called with the checkbox state; providing it shows the \"N processes / Hide exited\" toolbar. */\n onHideExitedChange?: (hide: boolean) => void;\n /** No trace has arrived yet: with no processes, show a waiting spinner instead of the empty label. */\n loading?: boolean;\n /** A load failure, shown as a banner above the tree. */\n error?: string;\n};\n\n/** The tree is controlled by a host that owns the expand-all buttons, so the tree never changes it. */\nconst hostOwnedExpandAll = () => {};\n\nfunction ProcessRow({ node, selected, series }: { node: ProcessTreeNode; selected: boolean; series: number[] | undefined }) {\n const { row, exited } = node;\n return (\n <div\n data-process-key={row.key}\n {...(exited ? { \"data-exited\": \"true\" } : {})}\n className={cn(\"flex min-w-0 flex-1 items-center gap-1.5\", exited && \"opacity-60\")}\n title={row.command}\n >\n <Icon\n icon={row.isRoot ? UiServerProcess : UiDebug}\n className={row.isRoot ? \"text-base text-blue-600\" : \"text-base text-muted-foreground\"}\n />\n <span className={cn(\"truncate\", selected ? \"font-semibold text-primary\" : \"font-medium text-foreground\")}>\n {processLabel({ pid: row.pid, name: row.name, command: row.command })}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">pid {row.pid}</span>\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground\" title={row.command} data-process-command=\"\">\n {row.command}\n </span>\n {series ? <Sparkline values={series} label={`CPU % over ${series.length} samples`} /> : null}\n <span className={cn(\"inline-flex shrink-0 items-center gap-1 text-xs\", processStateColor(row.status))}>\n <Icon icon={processStateIcon(row.status)} />\n {row.status}\n </span>\n {exited ? (\n <>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title=\"Lifetime\">\n {formatDuration(processLifetimeMs(row))}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title=\"Peak CPU\">\n {`peak ${formatCpuPercent(row.peakCpuPercent)}`}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title=\"Peak RSS\">\n {`peak ${formatBytes(row.peakRssBytes)}`}\n </span>\n </>\n ) : (\n <>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title={`Peak ${formatCpuPercent(row.peakCpuPercent)}`}>\n {formatCpuPercent(row.cpuPercent)}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" title={`Peak ${formatBytes(row.peakRssBytes)}`}>\n {formatBytes(row.rssBytes)}\n </span>\n </>\n )}\n </div>\n );\n}\n\n/**\n * The process tree of a `process_tree` trace: a forest keyed by `key` /\n * `parentKey`, where a process whose parent was never recorded is a root.\n * Each row shows the process, its truncated command, state and usage; exited\n * processes are dimmed and show their lifetime and peak usage. It is built on\n * the same `Tree` primitive and process helpers as `DiagnosticsTree`, which\n * cannot take a forest, key selection or exit information.\n */\nexport function ProcessTraceTree({\n nodes,\n samples,\n onSelect,\n selectedKey,\n emptyLabel = \"No processes recorded\",\n className,\n expandAll,\n onExpandAllChange,\n hideExited = false,\n onHideExitedChange,\n loading = false,\n error,\n}: ProcessTraceTreeProps) {\n const full = useMemo(() => buildProcessForest(nodes), [nodes]);\n const roots = useMemo(() => (hideExited ? pruneExitedProcesses(full) : full), [full, hideExited]);\n const series = useMemo(() => cpuSeriesByKey(samples ?? []), [samples]);\n const selected = useMemo(\n () => (selectedKey ? (flattenForest(roots).find((node) => node.row.key === selectedKey) ?? null) : null),\n [roots, selectedKey],\n );\n\n const empty =\n nodes.length === 0 ? (\n error ? null : loading ? (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\" role=\"status\">\n <Icon icon={UiLoader} className=\"animate-spin text-3xl text-blue-500\" />\n <p className=\"mt-2\">Waiting for process trace…</p>\n </div>\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">{emptyLabel}</div>\n )\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">Every process has exited</div>\n );\n\n const hostOwnsExpandAll = expandAll !== undefined && onExpandAllChange === undefined;\n\n return (\n <div className={cn(\"flex min-h-0 flex-col\", className)}>\n {onHideExitedChange && (\n <div\n className=\"flex items-center justify-between gap-2 border-b border-border bg-background px-3 py-1.5 text-xs text-muted-foreground\"\n data-process-toolbar=\"\"\n >\n <span>\n {nodes.length} {nodes.length === 1 ? \"process\" : \"processes\"}\n </span>\n <label className=\"inline-flex cursor-pointer items-center gap-1.5\">\n <input\n type=\"checkbox\"\n checked={hideExited}\n onChange={(event) => onHideExitedChange(event.target.checked)}\n />\n Hide exited\n </label>\n </div>\n )}\n {error && (\n <div className=\"whitespace-pre-wrap px-3 py-2 text-xs text-red-700 dark:text-red-400\" role=\"alert\">\n {error}\n </div>\n )}\n <Tree<ProcessTreeNode>\n roots={roots}\n className=\"min-h-0 flex-1\"\n ariaLabel=\"Process tree\"\n empty={empty}\n showControls={!hostOwnsExpandAll}\n {...(expandAll !== undefined ? { expandAll, onExpandAllChange: onExpandAllChange ?? hostOwnedExpandAll } : {})}\n {...(expandAll === undefined && onExpandAllChange ? { onExpandAllChange } : {})}\n getChildren={(node) => node.children}\n getKey={(node) => node.row.key}\n getSearchText={(node) => `${node.row.name} ${node.row.command} ${node.row.pid}`}\n selected={selected}\n revealSelected\n defaultOpen={(_node, depth) => depth < OPEN_DEPTH}\n onSelect={(node) => onSelect(node.row.key)}\n renderRow={({ node, selected: isSelected }) => (\n <ProcessRow node={node} selected={isSelected} series={series.get(node.row.key)} />\n )}\n rowClass={(_node, isSelected) =>\n isSelected ? \"bg-primary/10 border-l-2 border-primary\" : \"hover:bg-accent\"\n }\n />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../../lib/utils.cjs");
|
|
5
|
+
const processTree = require("./process-tree.cjs");
|
|
6
|
+
function Sparkline({ values, label, width = 64, height = 16, fill = false, className }) {
|
|
7
|
+
const points = processTree.sparklinePoints(values, width, height);
|
|
8
|
+
if (!points) return null;
|
|
9
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10
|
+
"svg",
|
|
11
|
+
{
|
|
12
|
+
role: "img",
|
|
13
|
+
"aria-label": label,
|
|
14
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
15
|
+
...fill ? { preserveAspectRatio: "none" } : { width, height },
|
|
16
|
+
className: utils.cn(fill ? "w-full" : "shrink-0", "overflow-visible text-primary", className),
|
|
17
|
+
style: fill ? { height } : void 0,
|
|
18
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
19
|
+
"polyline",
|
|
20
|
+
{
|
|
21
|
+
points,
|
|
22
|
+
fill: "none",
|
|
23
|
+
stroke: "currentColor",
|
|
24
|
+
strokeWidth: 1.25,
|
|
25
|
+
strokeLinejoin: "round",
|
|
26
|
+
...fill ? { vectorEffect: "non-scaling-stroke" } : {}
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
function LabeledSparkline({ label, values, format, className }) {
|
|
33
|
+
const max = Math.max(...values, 0);
|
|
34
|
+
const only = values[0];
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("rounded-lg border border-border bg-muted/50 px-2.5 py-density-2", className), "data-sparkline": label, children: [
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-[10px] uppercase tracking-wide text-muted-foreground", children: [
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: values.length > 0 ? `max ${format(max)}` : "" })
|
|
39
|
+
] }),
|
|
40
|
+
values.length < 2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-[11px] text-muted-foreground", children: only === void 0 ? "No samples" : `${format(only)} (1 sample)` }) : /* @__PURE__ */ jsxRuntime.jsx(Sparkline, { fill: true, values, label: `${label} over time`, width: 160, height: 36, className: "mt-1" })
|
|
41
|
+
] });
|
|
42
|
+
}
|
|
43
|
+
exports.LabeledSparkline = LabeledSparkline;
|
|
44
|
+
exports.Sparkline = Sparkline;
|
|
45
|
+
//# sourceMappingURL=Sparkline.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sparkline.cjs","sources":["../../../src/data/traces/Sparkline.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport { sparklinePoints } from \"./process-tree\";\n\nexport type SparklineProps = {\n /** Values in order; at least two are needed to draw a line. */\n values: number[];\n /** Accessible description of what the line plots. */\n label: string;\n width?: number;\n height?: number;\n /** Stretch to the width of the container instead of the fixed pixel width. */\n fill?: boolean;\n /** Classes applied to the svg; the stroke follows the text colour. */\n className?: string;\n};\n\n/** A dependency-free inline SVG line, scaled so the largest value touches the top. */\nexport function Sparkline({ values, label, width = 64, height = 16, fill = false, className }: SparklineProps) {\n const points = sparklinePoints(values, width, height);\n if (!points) return null;\n return (\n <svg\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${width} ${height}`}\n {...(fill ? { preserveAspectRatio: \"none\" } : { width, height })}\n className={cn(fill ? \"w-full\" : \"shrink-0\", \"overflow-visible text-primary\", className)}\n style={fill ? { height } : undefined}\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.25}\n strokeLinejoin=\"round\"\n {...(fill ? { vectorEffect: \"non-scaling-stroke\" } : {})}\n />\n </svg>\n );\n}\n\nexport type LabeledSparklineProps = {\n /** What the line plots, for example \"CPU %\". */\n label: string;\n values: number[];\n /** Formats a value for the max label and the single-sample text. */\n format: (value: number) => string;\n className?: string;\n};\n\n/**\n * A sparkline in a labelled tile: the label and the series maximum above the\n * line, \"No samples\" for none and \"<value> (1 sample)\" for one, since a line\n * needs two points.\n */\nexport function LabeledSparkline({ label, values, format, className }: LabeledSparklineProps) {\n const max = Math.max(...values, 0);\n const only = values[0];\n return (\n <div className={cn(\"rounded-lg border border-border bg-muted/50 px-2.5 py-density-2\", className)} data-sparkline={label}>\n <div className=\"flex items-center justify-between text-[10px] uppercase tracking-wide text-muted-foreground\">\n <span>{label}</span>\n <span>{values.length > 0 ? `max ${format(max)}` : \"\"}</span>\n </div>\n {values.length < 2 ? (\n <div className=\"mt-1 text-[11px] text-muted-foreground\">\n {only === undefined ? \"No samples\" : `${format(only)} (1 sample)`}\n </div>\n ) : (\n <Sparkline fill values={values} label={`${label} over time`} width={160} height={36} className=\"mt-1\" />\n )}\n </div>\n );\n}\n"],"names":["sparklinePoints","jsx","cn","jsxs"],"mappings":";;;;;AAiBO,SAAS,UAAU,EAAE,QAAQ,OAAO,QAAQ,IAAI,SAAS,IAAI,OAAO,OAAO,UAAA,GAA6B;AAC7G,QAAM,SAASA,YAAAA,gBAAgB,QAAQ,OAAO,MAAM;AACpD,MAAI,CAAC,OAAQ,QAAO;AACpB,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAC9B,GAAI,OAAO,EAAE,qBAAqB,WAAW,EAAE,OAAO,OAAA;AAAA,MACvD,WAAWC,MAAAA,GAAG,OAAO,WAAW,YAAY,iCAAiC,SAAS;AAAA,MACtF,OAAO,OAAO,EAAE,OAAA,IAAW;AAAA,MAE3B,UAAAD,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAa;AAAA,UACb,gBAAe;AAAA,UACd,GAAI,OAAO,EAAE,cAAc,yBAAyB,CAAA;AAAA,QAAC;AAAA,MAAA;AAAA,IACxD;AAAA,EAAA;AAGN;AAgBO,SAAS,iBAAiB,EAAE,OAAO,QAAQ,QAAQ,aAAoC;AAC5F,QAAM,MAAM,KAAK,IAAI,GAAG,QAAQ,CAAC;AACjC,QAAM,OAAO,OAAO,CAAC;AACrB,SACEE,gCAAC,SAAI,WAAWD,MAAAA,GAAG,mEAAmE,SAAS,GAAG,kBAAgB,OAChH,UAAA;AAAA,IAAAC,2BAAAA,KAAC,OAAA,EAAI,WAAU,+FACb,UAAA;AAAA,MAAAF,2BAAAA,IAAC,UAAM,UAAA,MAAA,CAAM;AAAA,MACbA,2BAAAA,IAAC,QAAA,EAAM,UAAA,OAAO,SAAS,IAAI,OAAO,OAAO,GAAG,CAAC,KAAK,GAAA,CAAG;AAAA,IAAA,GACvD;AAAA,IACC,OAAO,SAAS,IACfA,2BAAAA,IAAC,OAAA,EAAI,WAAU,0CACZ,UAAA,SAAS,SAAY,eAAe,GAAG,OAAO,IAAI,CAAC,cAAA,CACtD,IAEAA,2BAAAA,IAAC,WAAA,EAAU,MAAI,MAAC,QAAgB,OAAO,GAAG,KAAK,cAAc,OAAO,KAAK,QAAQ,IAAI,WAAU,OAAA,CAAO;AAAA,EAAA,GAE1G;AAEJ;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type SparklineProps = {
|
|
2
|
+
/** Values in order; at least two are needed to draw a line. */
|
|
3
|
+
values: number[];
|
|
4
|
+
/** Accessible description of what the line plots. */
|
|
5
|
+
label: string;
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
/** Stretch to the width of the container instead of the fixed pixel width. */
|
|
9
|
+
fill?: boolean;
|
|
10
|
+
/** Classes applied to the svg; the stroke follows the text colour. */
|
|
11
|
+
className?: string;
|
|
12
|
+
};
|
|
13
|
+
/** A dependency-free inline SVG line, scaled so the largest value touches the top. */
|
|
14
|
+
export declare function Sparkline({ values, label, width, height, fill, className }: SparklineProps): import("react").JSX.Element | null;
|
|
15
|
+
export type LabeledSparklineProps = {
|
|
16
|
+
/** What the line plots, for example "CPU %". */
|
|
17
|
+
label: string;
|
|
18
|
+
values: number[];
|
|
19
|
+
/** Formats a value for the max label and the single-sample text. */
|
|
20
|
+
format: (value: number) => string;
|
|
21
|
+
className?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A sparkline in a labelled tile: the label and the series maximum above the
|
|
25
|
+
* line, "No samples" for none and "<value> (1 sample)" for one, since a line
|
|
26
|
+
* needs two points.
|
|
27
|
+
*/
|
|
28
|
+
export declare function LabeledSparkline({ label, values, format, className }: LabeledSparklineProps): import("react").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=Sparkline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sparkline.d.ts","sourceRoot":"","sources":["../../../src/data/traces/Sparkline.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAU,EAAE,MAAW,EAAE,IAAY,EAAE,SAAS,EAAE,EAAE,cAAc,sCAsB5G;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oEAAoE;IACpE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,qBAAqB,+BAkB3F"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { sparklinePoints } from "./process-tree.js";
|
|
4
|
+
function Sparkline({ values, label, width = 64, height = 16, fill = false, className }) {
|
|
5
|
+
const points = sparklinePoints(values, width, height);
|
|
6
|
+
if (!points) return null;
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"svg",
|
|
9
|
+
{
|
|
10
|
+
role: "img",
|
|
11
|
+
"aria-label": label,
|
|
12
|
+
viewBox: `0 0 ${width} ${height}`,
|
|
13
|
+
...fill ? { preserveAspectRatio: "none" } : { width, height },
|
|
14
|
+
className: cn(fill ? "w-full" : "shrink-0", "overflow-visible text-primary", className),
|
|
15
|
+
style: fill ? { height } : void 0,
|
|
16
|
+
children: /* @__PURE__ */ jsx(
|
|
17
|
+
"polyline",
|
|
18
|
+
{
|
|
19
|
+
points,
|
|
20
|
+
fill: "none",
|
|
21
|
+
stroke: "currentColor",
|
|
22
|
+
strokeWidth: 1.25,
|
|
23
|
+
strokeLinejoin: "round",
|
|
24
|
+
...fill ? { vectorEffect: "non-scaling-stroke" } : {}
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function LabeledSparkline({ label, values, format, className }) {
|
|
31
|
+
const max = Math.max(...values, 0);
|
|
32
|
+
const only = values[0];
|
|
33
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border border-border bg-muted/50 px-2.5 py-density-2", className), "data-sparkline": label, children: [
|
|
34
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-[10px] uppercase tracking-wide text-muted-foreground", children: [
|
|
35
|
+
/* @__PURE__ */ jsx("span", { children: label }),
|
|
36
|
+
/* @__PURE__ */ jsx("span", { children: values.length > 0 ? `max ${format(max)}` : "" })
|
|
37
|
+
] }),
|
|
38
|
+
values.length < 2 ? /* @__PURE__ */ jsx("div", { className: "mt-1 text-[11px] text-muted-foreground", children: only === void 0 ? "No samples" : `${format(only)} (1 sample)` }) : /* @__PURE__ */ jsx(Sparkline, { fill: true, values, label: `${label} over time`, width: 160, height: 36, className: "mt-1" })
|
|
39
|
+
] });
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
LabeledSparkline,
|
|
43
|
+
Sparkline
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=Sparkline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sparkline.js","sources":["../../../src/data/traces/Sparkline.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport { sparklinePoints } from \"./process-tree\";\n\nexport type SparklineProps = {\n /** Values in order; at least two are needed to draw a line. */\n values: number[];\n /** Accessible description of what the line plots. */\n label: string;\n width?: number;\n height?: number;\n /** Stretch to the width of the container instead of the fixed pixel width. */\n fill?: boolean;\n /** Classes applied to the svg; the stroke follows the text colour. */\n className?: string;\n};\n\n/** A dependency-free inline SVG line, scaled so the largest value touches the top. */\nexport function Sparkline({ values, label, width = 64, height = 16, fill = false, className }: SparklineProps) {\n const points = sparklinePoints(values, width, height);\n if (!points) return null;\n return (\n <svg\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${width} ${height}`}\n {...(fill ? { preserveAspectRatio: \"none\" } : { width, height })}\n className={cn(fill ? \"w-full\" : \"shrink-0\", \"overflow-visible text-primary\", className)}\n style={fill ? { height } : undefined}\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.25}\n strokeLinejoin=\"round\"\n {...(fill ? { vectorEffect: \"non-scaling-stroke\" } : {})}\n />\n </svg>\n );\n}\n\nexport type LabeledSparklineProps = {\n /** What the line plots, for example \"CPU %\". */\n label: string;\n values: number[];\n /** Formats a value for the max label and the single-sample text. */\n format: (value: number) => string;\n className?: string;\n};\n\n/**\n * A sparkline in a labelled tile: the label and the series maximum above the\n * line, \"No samples\" for none and \"<value> (1 sample)\" for one, since a line\n * needs two points.\n */\nexport function LabeledSparkline({ label, values, format, className }: LabeledSparklineProps) {\n const max = Math.max(...values, 0);\n const only = values[0];\n return (\n <div className={cn(\"rounded-lg border border-border bg-muted/50 px-2.5 py-density-2\", className)} data-sparkline={label}>\n <div className=\"flex items-center justify-between text-[10px] uppercase tracking-wide text-muted-foreground\">\n <span>{label}</span>\n <span>{values.length > 0 ? `max ${format(max)}` : \"\"}</span>\n </div>\n {values.length < 2 ? (\n <div className=\"mt-1 text-[11px] text-muted-foreground\">\n {only === undefined ? \"No samples\" : `${format(only)} (1 sample)`}\n </div>\n ) : (\n <Sparkline fill values={values} label={`${label} over time`} width={160} height={36} className=\"mt-1\" />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;AAiBO,SAAS,UAAU,EAAE,QAAQ,OAAO,QAAQ,IAAI,SAAS,IAAI,OAAO,OAAO,UAAA,GAA6B;AAC7G,QAAM,SAAS,gBAAgB,QAAQ,OAAO,MAAM;AACpD,MAAI,CAAC,OAAQ,QAAO;AACpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAC9B,GAAI,OAAO,EAAE,qBAAqB,WAAW,EAAE,OAAO,OAAA;AAAA,MACvD,WAAW,GAAG,OAAO,WAAW,YAAY,iCAAiC,SAAS;AAAA,MACtF,OAAO,OAAO,EAAE,OAAA,IAAW;AAAA,MAE3B,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAa;AAAA,UACb,gBAAe;AAAA,UACd,GAAI,OAAO,EAAE,cAAc,yBAAyB,CAAA;AAAA,QAAC;AAAA,MAAA;AAAA,IACxD;AAAA,EAAA;AAGN;AAgBO,SAAS,iBAAiB,EAAE,OAAO,QAAQ,QAAQ,aAAoC;AAC5F,QAAM,MAAM,KAAK,IAAI,GAAG,QAAQ,CAAC;AACjC,QAAM,OAAO,OAAO,CAAC;AACrB,SACE,qBAAC,SAAI,WAAW,GAAG,mEAAmE,SAAS,GAAG,kBAAgB,OAChH,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,+FACb,UAAA;AAAA,MAAA,oBAAC,UAAM,UAAA,MAAA,CAAM;AAAA,MACb,oBAAC,QAAA,EAAM,UAAA,OAAO,SAAS,IAAI,OAAO,OAAO,GAAG,CAAC,KAAK,GAAA,CAAG;AAAA,IAAA,GACvD;AAAA,IACC,OAAO,SAAS,IACf,oBAAC,OAAA,EAAI,WAAU,0CACZ,UAAA,SAAS,SAAY,eAAe,GAAG,OAAO,IAAI,CAAC,cAAA,CACtD,IAEA,oBAAC,WAAA,EAAU,MAAI,MAAC,QAAgB,OAAO,GAAG,KAAK,cAAc,OAAO,KAAK,QAAQ,IAAI,WAAU,OAAA,CAAO;AAAA,EAAA,GAE1G;AAEJ;"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const Switch = require("../../components/Switch.cjs");
|
|
6
|
+
const utils = require("../../lib/utils.cjs");
|
|
7
|
+
const Badge = require("../Badge.cjs");
|
|
8
|
+
const CodeBlock = require("../CodeBlock.cjs");
|
|
9
|
+
const DataTable = require("../DataTable.cjs");
|
|
10
|
+
const JsonView = require("../JsonView.cjs");
|
|
11
|
+
const sqlTrace = require("./sql-trace.cjs");
|
|
12
|
+
const COLUMNS = [
|
|
13
|
+
{ key: "startedAt", label: "Time", kind: "timestamp", shrink: true },
|
|
14
|
+
{
|
|
15
|
+
key: "op",
|
|
16
|
+
label: "Op",
|
|
17
|
+
shrink: true,
|
|
18
|
+
filterable: true,
|
|
19
|
+
render: (value) => /* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { variant: "soft", tone: "neutral", size: "xs", className: "font-mono", children: String(value) })
|
|
20
|
+
},
|
|
21
|
+
{ key: "tables", label: "Tables", kind: "tags", shrink: true },
|
|
22
|
+
{
|
|
23
|
+
key: "sql",
|
|
24
|
+
label: "SQL",
|
|
25
|
+
grow: true,
|
|
26
|
+
render: (_value, row) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-center gap-density-2", children: [
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { inline: true, language: "sql", source: row.sql }),
|
|
28
|
+
row.count > 1 ? /* @__PURE__ */ jsxRuntime.jsx("span", { title: `${row.count} executions`, children: /* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { variant: "soft", tone: "info", size: "xs", children: `×${row.count}` }) }) : null
|
|
29
|
+
] })
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: "durationMs",
|
|
33
|
+
label: "Duration",
|
|
34
|
+
align: "right",
|
|
35
|
+
shrink: true,
|
|
36
|
+
render: (value, row) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", title: row.count > 1 ? `${row.count} executions in total` : void 0, children: sqlTrace.formatStatementDuration(Number(value)) }),
|
|
37
|
+
sortValue: (value) => Number(value)
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "rows",
|
|
41
|
+
label: "Rows",
|
|
42
|
+
align: "right",
|
|
43
|
+
shrink: true,
|
|
44
|
+
render: (value) => Number(value) < 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "—" }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: String(value) }),
|
|
45
|
+
sortValue: (value) => Number(value)
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "error",
|
|
49
|
+
label: "Error",
|
|
50
|
+
grow: true,
|
|
51
|
+
render: (value, row) => value ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate text-destructive", title: String(value), children: [
|
|
52
|
+
String(value),
|
|
53
|
+
row.count > 1 ? ` (${row.failed} of ${row.count} failed)` : ""
|
|
54
|
+
] }) : null
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
function StatementDetails({ row }) {
|
|
58
|
+
var _a;
|
|
59
|
+
const [first] = row.occurrences;
|
|
60
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-3", children: [
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { language: "sql", source: row.sql, copyable: true }),
|
|
62
|
+
row.error ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 font-semibold text-foreground", children: "Error" }),
|
|
64
|
+
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap break-all text-destructive", children: row.error })
|
|
65
|
+
] }) : null,
|
|
66
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground", children: [
|
|
67
|
+
first.connection,
|
|
68
|
+
" · ",
|
|
69
|
+
first.driver,
|
|
70
|
+
((_a = first.truncated) == null ? void 0 : _a.length) ? ` · truncated: ${first.truncated.join(", ")}` : ""
|
|
71
|
+
] }),
|
|
72
|
+
row.count > 1 ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-1 text-xs", "aria-label": "Executions", children: row.occurrences.map((occurrence, index) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: utils.cn("flex items-baseline gap-density-3", occurrence.error && "text-destructive"), children: [
|
|
73
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums text-muted-foreground", children: occurrence.startedAt }),
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: sqlTrace.formatStatementDuration(occurrence.durationMs) }),
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: occurrence.rows < 0 ? "— rows" : `${occurrence.rows} rows` }),
|
|
76
|
+
occurrence.args ? /* @__PURE__ */ jsxRuntime.jsx("code", { className: "font-mono", children: JSON.stringify(occurrence.args) }) : null,
|
|
77
|
+
occurrence.error ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: occurrence.error }) : null
|
|
78
|
+
] }, index)) }) : first.args ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 font-semibold text-foreground", children: "Arguments" }),
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: first.args })
|
|
81
|
+
] }) : null
|
|
82
|
+
] });
|
|
83
|
+
}
|
|
84
|
+
function SqlTraceTable({ rows, groupRepeated = true, emptyLabel = "No SQL statements recorded", className }) {
|
|
85
|
+
const [group, setGroup] = react.useState(groupRepeated);
|
|
86
|
+
const displayRows = react.useMemo(() => sqlTrace.groupStatements(rows, { group }), [rows, group]);
|
|
87
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex h-full min-h-0 flex-col gap-density-2", className), children: [
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(Switch.Switch, { checked: group, onChange: setGroup, label: "Group repeated statements", className: "self-start px-density-2" }),
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
90
|
+
DataTable.DataTable,
|
|
91
|
+
{
|
|
92
|
+
data: displayRows,
|
|
93
|
+
columns: COLUMNS,
|
|
94
|
+
autoFilter: true,
|
|
95
|
+
emptyMessage: emptyLabel,
|
|
96
|
+
globalFilterPlaceholder: "Filter SQL, table, or error…",
|
|
97
|
+
getRowId: (row) => row.id,
|
|
98
|
+
renderExpandedRow: (row) => /* @__PURE__ */ jsxRuntime.jsx(StatementDetails, { row })
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
] });
|
|
102
|
+
}
|
|
103
|
+
exports.SqlTraceTable = SqlTraceTable;
|
|
104
|
+
//# sourceMappingURL=SqlTraceTable.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlTraceTable.cjs","sources":["../../../src/data/traces/SqlTraceTable.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { Switch } from \"../../components/Switch\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"../Badge\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { DataTable, type DataTableColumn } from \"../DataTable\";\nimport { JsonView } from \"../JsonView\";\nimport { formatStatementDuration, groupStatements, type SqlDisplayRow } from \"./sql-trace\";\nimport type { SqlStatementRow } from \"./types\";\n\nexport type SqlTraceTableProps = {\n /** `pg_proxy` / `sql_statements` trace records. */\n rows: SqlStatementRow[];\n /** Start with statements sharing a `repeatKey` collapsed into one counted row. Defaults to true. */\n groupRepeated?: boolean;\n /** Shown when there are no statements. */\n emptyLabel?: string;\n /** Classes applied to the table root. */\n className?: string;\n};\n\nconst COLUMNS: DataTableColumn<SqlDisplayRow>[] = [\n { key: \"startedAt\", label: \"Time\", kind: \"timestamp\", shrink: true },\n {\n key: \"op\",\n label: \"Op\",\n shrink: true,\n filterable: true,\n render: (value) => (\n <Badge variant=\"soft\" tone=\"neutral\" size=\"xs\" className=\"font-mono\">\n {String(value)}\n </Badge>\n ),\n },\n { key: \"tables\", label: \"Tables\", kind: \"tags\", shrink: true },\n {\n key: \"sql\",\n label: \"SQL\",\n grow: true,\n render: (_value, row) => (\n <span className=\"flex min-w-0 items-center gap-density-2\">\n <CodeBlock inline language=\"sql\" source={row.sql} />\n {row.count > 1 ? (\n <span title={`${row.count} executions`}>\n <Badge variant=\"soft\" tone=\"info\" size=\"xs\">\n {`×${row.count}`}\n </Badge>\n </span>\n ) : null}\n </span>\n ),\n },\n {\n key: \"durationMs\",\n label: \"Duration\",\n align: \"right\",\n shrink: true,\n render: (value, row) => (\n <span className=\"tabular-nums\" title={row.count > 1 ? `${row.count} executions in total` : undefined}>\n {formatStatementDuration(Number(value))}\n </span>\n ),\n sortValue: (value) => Number(value),\n },\n {\n key: \"rows\",\n label: \"Rows\",\n align: \"right\",\n shrink: true,\n render: (value) => (Number(value) < 0 ? <span className=\"text-muted-foreground\">—</span> : <span className=\"tabular-nums\">{String(value)}</span>),\n sortValue: (value) => Number(value),\n },\n {\n key: \"error\",\n label: \"Error\",\n grow: true,\n render: (value, row) =>\n value ? (\n <span className=\"truncate text-destructive\" title={String(value)}>\n {String(value)}\n {row.count > 1 ? ` (${row.failed} of ${row.count} failed)` : \"\"}\n </span>\n ) : null,\n },\n];\n\nfunction StatementDetails({ row }: { row: SqlDisplayRow }) {\n const [first] = row.occurrences as [SqlStatementRow, ...SqlStatementRow[]];\n return (\n <div className=\"space-y-density-3\">\n <CodeBlock language=\"sql\" source={row.sql} copyable />\n {row.error ? (\n <div>\n <div className=\"mb-1 font-semibold text-foreground\">Error</div>\n <pre className=\"whitespace-pre-wrap break-all text-destructive\">{row.error}</pre>\n </div>\n ) : null}\n <div className=\"text-xs text-muted-foreground\">\n {first.connection} · {first.driver}\n {first.truncated?.length ? ` · truncated: ${first.truncated.join(\", \")}` : \"\"}\n </div>\n {row.count > 1 ? (\n <ul className=\"space-y-1 text-xs\" aria-label=\"Executions\">\n {row.occurrences.map((occurrence, index) => (\n <li key={index} className={cn(\"flex items-baseline gap-density-3\", occurrence.error && \"text-destructive\")}>\n <span className=\"tabular-nums text-muted-foreground\">{occurrence.startedAt}</span>\n <span className=\"tabular-nums\">{formatStatementDuration(occurrence.durationMs)}</span>\n <span className=\"tabular-nums\">{occurrence.rows < 0 ? \"— rows\" : `${occurrence.rows} rows`}</span>\n {occurrence.args ? <code className=\"font-mono\">{JSON.stringify(occurrence.args)}</code> : null}\n {occurrence.error ? <span>{occurrence.error}</span> : null}\n </li>\n ))}\n </ul>\n ) : first.args ? (\n <div>\n <div className=\"mb-1 font-semibold text-foreground\">Arguments</div>\n <JsonView data={first.args} />\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * `pg_proxy` / `sql_statements` records as a DataTable: time, op, tables, SQL,\n * duration, rows and error. Statements that differ only by their values share a\n * `repeatKey` and collapse into one row with a count badge and their total\n * duration; the switch above the table shows each execution instead.\n */\nexport function SqlTraceTable({ rows, groupRepeated = true, emptyLabel = \"No SQL statements recorded\", className }: SqlTraceTableProps) {\n const [group, setGroup] = useState(groupRepeated);\n const displayRows = useMemo(() => groupStatements(rows, { group }), [rows, group]);\n return (\n <div className={cn(\"flex h-full min-h-0 flex-col gap-density-2\", className)}>\n <Switch checked={group} onChange={setGroup} label=\"Group repeated statements\" className=\"self-start px-density-2\" />\n <DataTable\n data={displayRows}\n columns={COLUMNS}\n autoFilter\n emptyMessage={emptyLabel}\n globalFilterPlaceholder=\"Filter SQL, table, or error…\"\n getRowId={(row) => row.id}\n renderExpandedRow={(row) => <StatementDetails row={row} />}\n />\n </div>\n );\n}\n"],"names":["jsx","Badge","jsxs","CodeBlock","formatStatementDuration","cn","JsonView","useState","useMemo","groupStatements","Switch","DataTable"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SqlStatementRow } from './types.js';
|
|
2
|
+
export type SqlTraceTableProps = {
|
|
3
|
+
/** `pg_proxy` / `sql_statements` trace records. */
|
|
4
|
+
rows: SqlStatementRow[];
|
|
5
|
+
/** Start with statements sharing a `repeatKey` collapsed into one counted row. Defaults to true. */
|
|
6
|
+
groupRepeated?: boolean;
|
|
7
|
+
/** Shown when there are no statements. */
|
|
8
|
+
emptyLabel?: string;
|
|
9
|
+
/** Classes applied to the table root. */
|
|
10
|
+
className?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* `pg_proxy` / `sql_statements` records as a DataTable: time, op, tables, SQL,
|
|
14
|
+
* duration, rows and error. Statements that differ only by their values share a
|
|
15
|
+
* `repeatKey` and collapse into one row with a count badge and their total
|
|
16
|
+
* duration; the switch above the table shows each execution instead.
|
|
17
|
+
*/
|
|
18
|
+
export declare function SqlTraceTable({ rows, groupRepeated, emptyLabel, className }: SqlTraceTableProps): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=SqlTraceTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlTraceTable.d.ts","sourceRoot":"","sources":["../../../src/data/traces/SqlTraceTable.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mDAAmD;IACnD,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,oGAAoG;IACpG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAwGF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,aAAoB,EAAE,UAAyC,EAAE,SAAS,EAAE,EAAE,kBAAkB,+BAiBrI"}
|