@flanksource/clicky-ui 0.3.49 → 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/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 +76 -34
- package/dist/data/traces/ProcessTraceTree.cjs.map +1 -1
- package/dist/data/traces/ProcessTraceTree.d.ts +21 -4
- package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -1
- package/dist/data/traces/ProcessTraceTree.js +72 -30
- package/dist/data/traces/ProcessTraceTree.js.map +1 -1
- package/dist/data/traces/Sparkline.cjs +27 -5
- package/dist/data/traces/Sparkline.cjs.map +1 -1
- package/dist/data/traces/Sparkline.d.ts +17 -1
- package/dist/data/traces/Sparkline.d.ts.map +1 -1
- package/dist/data/traces/Sparkline.js +28 -6
- package/dist/data/traces/Sparkline.js.map +1 -1
- package/dist/data/traces/TraceView.cjs +9 -0
- package/dist/data/traces/TraceView.cjs.map +1 -1
- package/dist/data/traces/TraceView.d.ts +4 -2
- package/dist/data/traces/TraceView.d.ts.map +1 -1
- package/dist/data/traces/TraceView.js +9 -0
- package/dist/data/traces/TraceView.js.map +1 -1
- 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/fixtures.d.ts +25 -1
- package/dist/data/traces/fixtures.d.ts.map +1 -1
- package/dist/data/traces/index.d.ts +10 -3
- package/dist/data/traces/index.d.ts.map +1 -1
- 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 +36 -4
- package/dist/data/traces/process-tree.cjs.map +1 -1
- package/dist/data/traces/process-tree.d.ts +20 -1
- package/dist/data/traces/process-tree.d.ts.map +1 -1
- package/dist/data/traces/process-tree.js +36 -4
- package/dist/data/traces/process-tree.js.map +1 -1
- 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/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/types.d.ts +120 -5
- 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.js +3 -3
- package/dist/data.cjs +85 -7
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +81 -3
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +87 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -3
- 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":"metric-tone.cjs","sources":["../../../src/data/diagnostics/metric-tone.ts"],"sourcesContent":["import type { GaugeTone } from \"../Gauge\";\n\n/** Tone of a CPU percentage: green while busy, amber from 60, red from 90. */\nexport function cpuTone(pct: number): GaugeTone {\n if (pct >= 90) return \"danger\";\n if (pct >= 60) return \"warning\";\n if (pct > 0) return \"success\";\n return \"neutral\";\n}\n\n/** Tone of resident memory against virtual size; neutral when either is unknown. */\nexport function memoryTone(rss: number | undefined, vms: number | undefined): GaugeTone {\n if (!rss || !vms) return \"neutral\";\n const ratio = rss / vms;\n if (ratio >= 0.9) return \"danger\";\n if (ratio >= 0.6) return \"warning\";\n return \"info\";\n}\n"],"names":[],"mappings":";;AAGO,SAAS,QAAQ,KAAwB;AAC9C,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO;AACT;AAGO,SAAS,WAAW,KAAyB,KAAoC;AACtF,MAAI,CAAC,OAAO,CAAC,IAAK,QAAO;AACzB,QAAM,QAAQ,MAAM;AACpB,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,SAAS,IAAK,QAAO;AACzB,SAAO;AACT;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GaugeTone } from '../Gauge.js';
|
|
2
|
+
/** Tone of a CPU percentage: green while busy, amber from 60, red from 90. */
|
|
3
|
+
export declare function cpuTone(pct: number): GaugeTone;
|
|
4
|
+
/** Tone of resident memory against virtual size; neutral when either is unknown. */
|
|
5
|
+
export declare function memoryTone(rss: number | undefined, vms: number | undefined): GaugeTone;
|
|
6
|
+
//# sourceMappingURL=metric-tone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-tone.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/metric-tone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAK9C;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMtF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function cpuTone(pct) {
|
|
2
|
+
if (pct >= 90) return "danger";
|
|
3
|
+
if (pct >= 60) return "warning";
|
|
4
|
+
if (pct > 0) return "success";
|
|
5
|
+
return "neutral";
|
|
6
|
+
}
|
|
7
|
+
function memoryTone(rss, vms) {
|
|
8
|
+
if (!rss || !vms) return "neutral";
|
|
9
|
+
const ratio = rss / vms;
|
|
10
|
+
if (ratio >= 0.9) return "danger";
|
|
11
|
+
if (ratio >= 0.6) return "warning";
|
|
12
|
+
return "info";
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
cpuTone,
|
|
16
|
+
memoryTone
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=metric-tone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-tone.js","sources":["../../../src/data/diagnostics/metric-tone.ts"],"sourcesContent":["import type { GaugeTone } from \"../Gauge\";\n\n/** Tone of a CPU percentage: green while busy, amber from 60, red from 90. */\nexport function cpuTone(pct: number): GaugeTone {\n if (pct >= 90) return \"danger\";\n if (pct >= 60) return \"warning\";\n if (pct > 0) return \"success\";\n return \"neutral\";\n}\n\n/** Tone of resident memory against virtual size; neutral when either is unknown. */\nexport function memoryTone(rss: number | undefined, vms: number | undefined): GaugeTone {\n if (!rss || !vms) return \"neutral\";\n const ratio = rss / vms;\n if (ratio >= 0.9) return \"danger\";\n if (ratio >= 0.6) return \"warning\";\n return \"info\";\n}\n"],"names":[],"mappings":"AAGO,SAAS,QAAQ,KAAwB;AAC9C,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO;AACT;AAGO,SAAS,WAAW,KAAyB,KAAoC;AACtF,MAAI,CAAC,OAAO,CAAC,IAAK,QAAO;AACzB,QAAM,QAAQ,MAAM;AACpB,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,SAAS,IAAK,QAAO;AACzB,SAAO;AACT;"}
|
|
@@ -84,6 +84,49 @@ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}
|
|
|
84
84
|
}
|
|
85
85
|
return goroutines;
|
|
86
86
|
}
|
|
87
|
+
function recordFrame(frame, kind) {
|
|
88
|
+
const file = frame.file ? normalizeFilePath(frame.file) : void 0;
|
|
89
|
+
return {
|
|
90
|
+
functionName: frame.func,
|
|
91
|
+
// A record's func carries no argument list, so only the package path is stripped.
|
|
92
|
+
displayName: stripPackageQualifier(frame.func),
|
|
93
|
+
kind,
|
|
94
|
+
runtime: isRuntimeFrame(frame.func),
|
|
95
|
+
...file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : ""}` } : {}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function goroutinesFromRecords(records) {
|
|
99
|
+
return records.map((record) => {
|
|
100
|
+
var _a;
|
|
101
|
+
if (record.format !== "go" || record.error || record.goroutineId === void 0) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format "${record.format}"${record.error ? `, error "${record.error}"` : ""})`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
const frames = [
|
|
107
|
+
...(record.frames ?? []).map((frame) => recordFrame(frame, "frame")),
|
|
108
|
+
...record.createdBy ? [recordFrame(record.createdBy, "created_by")] : []
|
|
109
|
+
];
|
|
110
|
+
const state = record.state ?? "";
|
|
111
|
+
const rawState = [
|
|
112
|
+
state,
|
|
113
|
+
...record.waitMinutes ? [`${record.waitMinutes} minutes`] : [],
|
|
114
|
+
...record.lockedToThread ? ["locked to thread"] : []
|
|
115
|
+
].join(", ");
|
|
116
|
+
const topFunction = (_a = frames.find((frame) => frame.kind === "frame")) == null ? void 0 : _a.functionName;
|
|
117
|
+
return {
|
|
118
|
+
id: record.goroutineId,
|
|
119
|
+
state: normalizeState(state),
|
|
120
|
+
rawState,
|
|
121
|
+
frames,
|
|
122
|
+
raw: record.raw,
|
|
123
|
+
userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === "frame").length,
|
|
124
|
+
searchText: `goroutine ${record.goroutineId} [${rawState}]
|
|
125
|
+
${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}`.toLowerCase(),
|
|
126
|
+
...topFunction !== void 0 ? { topFunction } : {}
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
}
|
|
87
130
|
function countGoroutinesByState(goroutines) {
|
|
88
131
|
const counts = /* @__PURE__ */ new Map();
|
|
89
132
|
for (const goroutine of goroutines) {
|
|
@@ -157,6 +200,7 @@ function normalizeFilePath(path) {
|
|
|
157
200
|
exports.countGoroutinesByState = countGoroutinesByState;
|
|
158
201
|
exports.countStackByState = countStackByState;
|
|
159
202
|
exports.detectDumpFormat = detectDumpFormat;
|
|
203
|
+
exports.goroutinesFromRecords = goroutinesFromRecords;
|
|
160
204
|
exports.parseGoroutineDump = parseGoroutineDump;
|
|
161
205
|
exports.parseStackDump = parseStackDump;
|
|
162
206
|
//# sourceMappingURL=stacktrace.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stacktrace.cjs","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import { parseJvmThreadDump, countThreadsByState, type ParsedThread } from \"./jvm-stacktrace\";\n\nexport type DumpFormat = \"go\" | \"jvm\" | \"unknown\";\n\nexport type ParsedStack =\n | { format: \"go\"; goroutines: ParsedGoroutine[] }\n | { format: \"jvm\"; threads: ParsedThread[] }\n | { format: \"unknown\"; goroutines: []; threads: [] };\n\nexport function detectDumpFormat(text: string): DumpFormat {\n const trimmed = text.trim();\n if (!trimmed) return \"unknown\";\n // JVM header: `\"name\" ... prio=` OR `\"name\" ... tid=`\n if (/^\"[^\"]*\"[^\\n]*\\b(prio=|tid=|nid=)/m.test(trimmed)) return \"jvm\";\n // Go header: `goroutine N [state]:`\n if (/^goroutine\\s+\\d+\\s+\\[[^\\]]+\\]:/m.test(trimmed)) return \"go\";\n return \"unknown\";\n}\n\nexport function parseStackDump(text: string): ParsedStack {\n const format = detectDumpFormat(text);\n if (format === \"jvm\") {\n return { format: \"jvm\", threads: parseJvmThreadDump(text) };\n }\n if (format === \"go\") {\n return { format: \"go\", goroutines: parseGoroutineDump(text) };\n }\n return { format: \"unknown\", goroutines: [], threads: [] };\n}\n\nexport function countStackByState(stack: ParsedStack): Map<string, number> {\n if (stack.format === \"jvm\") return countThreadsByState(stack.threads);\n if (stack.format === \"go\") return countGoroutinesByState(stack.goroutines);\n return new Map();\n}\n\nexport interface ParsedGoroutineFrame {\n functionName: string;\n displayName: string;\n file?: string;\n location?: string;\n line?: number;\n kind: \"frame\" | \"created_by\";\n runtime: boolean;\n}\n\nexport interface ParsedGoroutine {\n id: number;\n state: string;\n rawState: string;\n frames: ParsedGoroutineFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^goroutine\\s+(\\d+)\\s+\\[(.+?)\\]:$/;\nconst goSrcPrefixRe = /^\\/usr\\/local\\/go[\\d.]+\\/src\\//;\nconst goWorkspacePrefixRe = /^.*?\\/go\\/src\\//;\nconst goPkgModPrefixRe = /^.*?\\/go\\/pkg\\/mod\\//;\n\nexport function parseGoroutineDump(text: string): ParsedGoroutine[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n const blocks = splitGoroutineBlocks(trimmed);\n const goroutines: ParsedGoroutine[] = [];\n\n for (const block of blocks) {\n const lines = block.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const header = lines[0]?.trim();\n const match = headerRe.exec(header || \"\");\n if (!match) continue;\n\n const id = Number(match[1] ?? 0);\n const rawState = match[2] ?? \"\";\n const state = normalizeState(rawState);\n const frames: ParsedGoroutineFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n const trimmedLine = line.trim();\n if (!trimmedLine) continue;\n\n const fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\n continue;\n }\n\n const kind = trimmedLine.startsWith(\"created by \") ? \"created_by\" : \"frame\";\n const functionName =\n kind === \"created_by\" ? trimmedLine.slice(\"created by \".length) : trimmedLine;\n frames.push({\n functionName,\n displayName: sanitizeFunctionName(functionName),\n kind,\n runtime: isRuntimeFrame(functionName),\n });\n }\n\n for (const frame of frames) {\n if (frame.file) {\n frame.file = normalizeFilePath(frame.file);\n frame.location = `${frame.file}${frame.line ? `:${frame.line}` : \"\"}`;\n }\n }\n\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n\n goroutines.push({\n id,\n state,\n rawState,\n frames,\n raw: block,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `${header}\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n });\n }\n\n return goroutines;\n}\n\nexport function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const goroutine of goroutines) {\n counts.set(goroutine.state, (counts.get(goroutine.state) || 0) + 1);\n }\n return counts;\n}\n\nfunction normalizeState(value: string): string {\n return (value.split(\",\")[0] ?? \"\").trim().toLowerCase();\n}\n\nfunction isRuntimeFrame(functionName: string): boolean {\n return (\n functionName.startsWith(\"runtime.\") ||\n functionName.startsWith(\"runtime/\") ||\n functionName.startsWith(\"internal/\") ||\n functionName.startsWith(\"runtime/internal/\") ||\n functionName.startsWith(\"syscall.\") ||\n functionName.startsWith(\"reflect.\")\n );\n}\n\nfunction parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\n}\n\nfunction sanitizeFunctionName(functionName: string): string {\n let name = functionName.trim();\n const paren = name.indexOf(\"(\");\n if (paren !== -1) name = name.slice(0, paren);\n return stripPackageQualifier(name);\n}\n\nfunction stripPackageQualifier(name: string): string {\n return name.replace(/^((?:[^./\\s]+\\/)+)([^./\\s]+)\\./, \"$2.\");\n}\n\nfunction normalizeFilePath(path: string): string {\n return path\n .replace(goSrcPrefixRe, \"\")\n .replace(goWorkspacePrefixRe, \"\")\n .replace(goPkgModPrefixRe, \"\");\n}\n"],"names":["parseJvmThreadDump","countThreadsByState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stacktrace.cjs","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import type { StackFrame, StackRecord } from \"../traces/types\";\nimport { parseJvmThreadDump, countThreadsByState, type ParsedThread } from \"./jvm-stacktrace\";\n\nexport type DumpFormat = \"go\" | \"jvm\" | \"unknown\";\n\nexport type ParsedStack =\n | { format: \"go\"; goroutines: ParsedGoroutine[] }\n | { format: \"jvm\"; threads: ParsedThread[] }\n | { format: \"unknown\"; goroutines: []; threads: [] };\n\nexport function detectDumpFormat(text: string): DumpFormat {\n const trimmed = text.trim();\n if (!trimmed) return \"unknown\";\n // JVM header: `\"name\" ... prio=` OR `\"name\" ... tid=`\n if (/^\"[^\"]*\"[^\\n]*\\b(prio=|tid=|nid=)/m.test(trimmed)) return \"jvm\";\n // Go header: `goroutine N [state]:`\n if (/^goroutine\\s+\\d+\\s+\\[[^\\]]+\\]:/m.test(trimmed)) return \"go\";\n return \"unknown\";\n}\n\nexport function parseStackDump(text: string): ParsedStack {\n const format = detectDumpFormat(text);\n if (format === \"jvm\") {\n return { format: \"jvm\", threads: parseJvmThreadDump(text) };\n }\n if (format === \"go\") {\n return { format: \"go\", goroutines: parseGoroutineDump(text) };\n }\n return { format: \"unknown\", goroutines: [], threads: [] };\n}\n\nexport function countStackByState(stack: ParsedStack): Map<string, number> {\n if (stack.format === \"jvm\") return countThreadsByState(stack.threads);\n if (stack.format === \"go\") return countGoroutinesByState(stack.goroutines);\n return new Map();\n}\n\nexport interface ParsedGoroutineFrame {\n functionName: string;\n displayName: string;\n file?: string;\n location?: string;\n line?: number;\n kind: \"frame\" | \"created_by\";\n runtime: boolean;\n}\n\nexport interface ParsedGoroutine {\n id: number;\n state: string;\n rawState: string;\n frames: ParsedGoroutineFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^goroutine\\s+(\\d+)\\s+\\[(.+?)\\]:$/;\nconst goSrcPrefixRe = /^\\/usr\\/local\\/go[\\d.]+\\/src\\//;\nconst goWorkspacePrefixRe = /^.*?\\/go\\/src\\//;\nconst goPkgModPrefixRe = /^.*?\\/go\\/pkg\\/mod\\//;\n\nexport function parseGoroutineDump(text: string): ParsedGoroutine[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n const blocks = splitGoroutineBlocks(trimmed);\n const goroutines: ParsedGoroutine[] = [];\n\n for (const block of blocks) {\n const lines = block.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const header = lines[0]?.trim();\n const match = headerRe.exec(header || \"\");\n if (!match) continue;\n\n const id = Number(match[1] ?? 0);\n const rawState = match[2] ?? \"\";\n const state = normalizeState(rawState);\n const frames: ParsedGoroutineFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n const trimmedLine = line.trim();\n if (!trimmedLine) continue;\n\n const fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\n continue;\n }\n\n const kind = trimmedLine.startsWith(\"created by \") ? \"created_by\" : \"frame\";\n const functionName =\n kind === \"created_by\" ? trimmedLine.slice(\"created by \".length) : trimmedLine;\n frames.push({\n functionName,\n displayName: sanitizeFunctionName(functionName),\n kind,\n runtime: isRuntimeFrame(functionName),\n });\n }\n\n for (const frame of frames) {\n if (frame.file) {\n frame.file = normalizeFilePath(frame.file);\n frame.location = `${frame.file}${frame.line ? `:${frame.line}` : \"\"}`;\n }\n }\n\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n\n goroutines.push({\n id,\n state,\n rawState,\n frames,\n raw: block,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `${header}\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n });\n }\n\n return goroutines;\n}\n\nfunction recordFrame(frame: StackFrame, kind: ParsedGoroutineFrame[\"kind\"]): ParsedGoroutineFrame {\n const file = frame.file ? normalizeFilePath(frame.file) : undefined;\n return {\n functionName: frame.func,\n // A record's func carries no argument list, so only the package path is stripped.\n displayName: stripPackageQualifier(frame.func),\n kind,\n runtime: isRuntimeFrame(frame.func),\n ...(file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : \"\"}` } : {}),\n };\n}\n\n/**\n * Goroutines from `stacks` records of Go format, already parsed server side:\n * no text is parsed. A record of another format or one that failed is a caller\n * error and throws.\n */\nexport function goroutinesFromRecords(records: StackRecord[]): ParsedGoroutine[] {\n return records.map((record) => {\n if (record.format !== \"go\" || record.error || record.goroutineId === undefined) {\n throw new Error(\n `stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format \"${record.format}\"${record.error ? `, error \"${record.error}\"` : \"\"})`,\n );\n }\n const frames = [\n ...(record.frames ?? []).map((frame) => recordFrame(frame, \"frame\")),\n ...(record.createdBy ? [recordFrame(record.createdBy, \"created_by\")] : []),\n ];\n const state = record.state ?? \"\";\n const rawState = [\n state,\n ...(record.waitMinutes ? [`${record.waitMinutes} minutes`] : []),\n ...(record.lockedToThread ? [\"locked to thread\"] : []),\n ].join(\", \");\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n return {\n id: record.goroutineId,\n state: normalizeState(state),\n rawState,\n frames,\n raw: record.raw,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `goroutine ${record.goroutineId} [${rawState}]\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n };\n });\n}\n\nexport function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const goroutine of goroutines) {\n counts.set(goroutine.state, (counts.get(goroutine.state) || 0) + 1);\n }\n return counts;\n}\n\nfunction normalizeState(value: string): string {\n return (value.split(\",\")[0] ?? \"\").trim().toLowerCase();\n}\n\nfunction isRuntimeFrame(functionName: string): boolean {\n return (\n functionName.startsWith(\"runtime.\") ||\n functionName.startsWith(\"runtime/\") ||\n functionName.startsWith(\"internal/\") ||\n functionName.startsWith(\"runtime/internal/\") ||\n functionName.startsWith(\"syscall.\") ||\n functionName.startsWith(\"reflect.\")\n );\n}\n\nfunction parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\n}\n\nfunction sanitizeFunctionName(functionName: string): string {\n let name = functionName.trim();\n const paren = name.indexOf(\"(\");\n if (paren !== -1) name = name.slice(0, paren);\n return stripPackageQualifier(name);\n}\n\nfunction stripPackageQualifier(name: string): string {\n return name.replace(/^((?:[^./\\s]+\\/)+)([^./\\s]+)\\./, \"$2.\");\n}\n\nfunction normalizeFilePath(path: string): string {\n return path\n .replace(goSrcPrefixRe, \"\")\n .replace(goWorkspacePrefixRe, \"\")\n .replace(goPkgModPrefixRe, \"\");\n}\n"],"names":["parseJvmThreadDump","countThreadsByState"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StackRecord } from '../traces/types.js';
|
|
1
2
|
import { ParsedThread } from './jvm-stacktrace.js';
|
|
2
3
|
export type DumpFormat = "go" | "jvm" | "unknown";
|
|
3
4
|
export type ParsedStack = {
|
|
@@ -34,5 +35,11 @@ export interface ParsedGoroutine {
|
|
|
34
35
|
searchText: string;
|
|
35
36
|
}
|
|
36
37
|
export declare function parseGoroutineDump(text: string): ParsedGoroutine[];
|
|
38
|
+
/**
|
|
39
|
+
* Goroutines from `stacks` records of Go format, already parsed server side:
|
|
40
|
+
* no text is parsed. A record of another format or one that failed is a caller
|
|
41
|
+
* error and throws.
|
|
42
|
+
*/
|
|
43
|
+
export declare function goroutinesFromRecords(records: StackRecord[]): ParsedGoroutine[];
|
|
37
44
|
export declare function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number>;
|
|
38
45
|
//# sourceMappingURL=stacktrace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stacktrace.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/stacktrace.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;AAElD,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,eAAe,EAAE,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC;IAAC,OAAO,EAAE,EAAE,CAAA;CAAE,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQzD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CASxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzE;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAmElE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMzF"}
|
|
1
|
+
{"version":3,"file":"stacktrace.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/stacktrace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;AAElD,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,eAAe,EAAE,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC;IAAC,OAAO,EAAE,EAAE,CAAA;CAAE,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQzD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CASxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzE;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAmElE;AAcD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CA+B/E;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMzF"}
|
|
@@ -82,6 +82,49 @@ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}
|
|
|
82
82
|
}
|
|
83
83
|
return goroutines;
|
|
84
84
|
}
|
|
85
|
+
function recordFrame(frame, kind) {
|
|
86
|
+
const file = frame.file ? normalizeFilePath(frame.file) : void 0;
|
|
87
|
+
return {
|
|
88
|
+
functionName: frame.func,
|
|
89
|
+
// A record's func carries no argument list, so only the package path is stripped.
|
|
90
|
+
displayName: stripPackageQualifier(frame.func),
|
|
91
|
+
kind,
|
|
92
|
+
runtime: isRuntimeFrame(frame.func),
|
|
93
|
+
...file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : ""}` } : {}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function goroutinesFromRecords(records) {
|
|
97
|
+
return records.map((record) => {
|
|
98
|
+
var _a;
|
|
99
|
+
if (record.format !== "go" || record.error || record.goroutineId === void 0) {
|
|
100
|
+
throw new Error(
|
|
101
|
+
`stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format "${record.format}"${record.error ? `, error "${record.error}"` : ""})`
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
const frames = [
|
|
105
|
+
...(record.frames ?? []).map((frame) => recordFrame(frame, "frame")),
|
|
106
|
+
...record.createdBy ? [recordFrame(record.createdBy, "created_by")] : []
|
|
107
|
+
];
|
|
108
|
+
const state = record.state ?? "";
|
|
109
|
+
const rawState = [
|
|
110
|
+
state,
|
|
111
|
+
...record.waitMinutes ? [`${record.waitMinutes} minutes`] : [],
|
|
112
|
+
...record.lockedToThread ? ["locked to thread"] : []
|
|
113
|
+
].join(", ");
|
|
114
|
+
const topFunction = (_a = frames.find((frame) => frame.kind === "frame")) == null ? void 0 : _a.functionName;
|
|
115
|
+
return {
|
|
116
|
+
id: record.goroutineId,
|
|
117
|
+
state: normalizeState(state),
|
|
118
|
+
rawState,
|
|
119
|
+
frames,
|
|
120
|
+
raw: record.raw,
|
|
121
|
+
userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === "frame").length,
|
|
122
|
+
searchText: `goroutine ${record.goroutineId} [${rawState}]
|
|
123
|
+
${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}`.toLowerCase(),
|
|
124
|
+
...topFunction !== void 0 ? { topFunction } : {}
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
85
128
|
function countGoroutinesByState(goroutines) {
|
|
86
129
|
const counts = /* @__PURE__ */ new Map();
|
|
87
130
|
for (const goroutine of goroutines) {
|
|
@@ -156,6 +199,7 @@ export {
|
|
|
156
199
|
countGoroutinesByState,
|
|
157
200
|
countStackByState,
|
|
158
201
|
detectDumpFormat,
|
|
202
|
+
goroutinesFromRecords,
|
|
159
203
|
parseGoroutineDump,
|
|
160
204
|
parseStackDump
|
|
161
205
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stacktrace.js","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import { parseJvmThreadDump, countThreadsByState, type ParsedThread } from \"./jvm-stacktrace\";\n\nexport type DumpFormat = \"go\" | \"jvm\" | \"unknown\";\n\nexport type ParsedStack =\n | { format: \"go\"; goroutines: ParsedGoroutine[] }\n | { format: \"jvm\"; threads: ParsedThread[] }\n | { format: \"unknown\"; goroutines: []; threads: [] };\n\nexport function detectDumpFormat(text: string): DumpFormat {\n const trimmed = text.trim();\n if (!trimmed) return \"unknown\";\n // JVM header: `\"name\" ... prio=` OR `\"name\" ... tid=`\n if (/^\"[^\"]*\"[^\\n]*\\b(prio=|tid=|nid=)/m.test(trimmed)) return \"jvm\";\n // Go header: `goroutine N [state]:`\n if (/^goroutine\\s+\\d+\\s+\\[[^\\]]+\\]:/m.test(trimmed)) return \"go\";\n return \"unknown\";\n}\n\nexport function parseStackDump(text: string): ParsedStack {\n const format = detectDumpFormat(text);\n if (format === \"jvm\") {\n return { format: \"jvm\", threads: parseJvmThreadDump(text) };\n }\n if (format === \"go\") {\n return { format: \"go\", goroutines: parseGoroutineDump(text) };\n }\n return { format: \"unknown\", goroutines: [], threads: [] };\n}\n\nexport function countStackByState(stack: ParsedStack): Map<string, number> {\n if (stack.format === \"jvm\") return countThreadsByState(stack.threads);\n if (stack.format === \"go\") return countGoroutinesByState(stack.goroutines);\n return new Map();\n}\n\nexport interface ParsedGoroutineFrame {\n functionName: string;\n displayName: string;\n file?: string;\n location?: string;\n line?: number;\n kind: \"frame\" | \"created_by\";\n runtime: boolean;\n}\n\nexport interface ParsedGoroutine {\n id: number;\n state: string;\n rawState: string;\n frames: ParsedGoroutineFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^goroutine\\s+(\\d+)\\s+\\[(.+?)\\]:$/;\nconst goSrcPrefixRe = /^\\/usr\\/local\\/go[\\d.]+\\/src\\//;\nconst goWorkspacePrefixRe = /^.*?\\/go\\/src\\//;\nconst goPkgModPrefixRe = /^.*?\\/go\\/pkg\\/mod\\//;\n\nexport function parseGoroutineDump(text: string): ParsedGoroutine[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n const blocks = splitGoroutineBlocks(trimmed);\n const goroutines: ParsedGoroutine[] = [];\n\n for (const block of blocks) {\n const lines = block.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const header = lines[0]?.trim();\n const match = headerRe.exec(header || \"\");\n if (!match) continue;\n\n const id = Number(match[1] ?? 0);\n const rawState = match[2] ?? \"\";\n const state = normalizeState(rawState);\n const frames: ParsedGoroutineFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n const trimmedLine = line.trim();\n if (!trimmedLine) continue;\n\n const fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\n continue;\n }\n\n const kind = trimmedLine.startsWith(\"created by \") ? \"created_by\" : \"frame\";\n const functionName =\n kind === \"created_by\" ? trimmedLine.slice(\"created by \".length) : trimmedLine;\n frames.push({\n functionName,\n displayName: sanitizeFunctionName(functionName),\n kind,\n runtime: isRuntimeFrame(functionName),\n });\n }\n\n for (const frame of frames) {\n if (frame.file) {\n frame.file = normalizeFilePath(frame.file);\n frame.location = `${frame.file}${frame.line ? `:${frame.line}` : \"\"}`;\n }\n }\n\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n\n goroutines.push({\n id,\n state,\n rawState,\n frames,\n raw: block,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `${header}\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n });\n }\n\n return goroutines;\n}\n\nexport function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const goroutine of goroutines) {\n counts.set(goroutine.state, (counts.get(goroutine.state) || 0) + 1);\n }\n return counts;\n}\n\nfunction normalizeState(value: string): string {\n return (value.split(\",\")[0] ?? \"\").trim().toLowerCase();\n}\n\nfunction isRuntimeFrame(functionName: string): boolean {\n return (\n functionName.startsWith(\"runtime.\") ||\n functionName.startsWith(\"runtime/\") ||\n functionName.startsWith(\"internal/\") ||\n functionName.startsWith(\"runtime/internal/\") ||\n functionName.startsWith(\"syscall.\") ||\n functionName.startsWith(\"reflect.\")\n );\n}\n\nfunction parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\n}\n\nfunction sanitizeFunctionName(functionName: string): string {\n let name = functionName.trim();\n const paren = name.indexOf(\"(\");\n if (paren !== -1) name = name.slice(0, paren);\n return stripPackageQualifier(name);\n}\n\nfunction stripPackageQualifier(name: string): string {\n return name.replace(/^((?:[^./\\s]+\\/)+)([^./\\s]+)\\./, \"$2.\");\n}\n\nfunction normalizeFilePath(path: string): string {\n return path\n .replace(goSrcPrefixRe, \"\")\n .replace(goWorkspacePrefixRe, \"\")\n .replace(goPkgModPrefixRe, \"\");\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stacktrace.js","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import type { StackFrame, StackRecord } from \"../traces/types\";\nimport { parseJvmThreadDump, countThreadsByState, type ParsedThread } from \"./jvm-stacktrace\";\n\nexport type DumpFormat = \"go\" | \"jvm\" | \"unknown\";\n\nexport type ParsedStack =\n | { format: \"go\"; goroutines: ParsedGoroutine[] }\n | { format: \"jvm\"; threads: ParsedThread[] }\n | { format: \"unknown\"; goroutines: []; threads: [] };\n\nexport function detectDumpFormat(text: string): DumpFormat {\n const trimmed = text.trim();\n if (!trimmed) return \"unknown\";\n // JVM header: `\"name\" ... prio=` OR `\"name\" ... tid=`\n if (/^\"[^\"]*\"[^\\n]*\\b(prio=|tid=|nid=)/m.test(trimmed)) return \"jvm\";\n // Go header: `goroutine N [state]:`\n if (/^goroutine\\s+\\d+\\s+\\[[^\\]]+\\]:/m.test(trimmed)) return \"go\";\n return \"unknown\";\n}\n\nexport function parseStackDump(text: string): ParsedStack {\n const format = detectDumpFormat(text);\n if (format === \"jvm\") {\n return { format: \"jvm\", threads: parseJvmThreadDump(text) };\n }\n if (format === \"go\") {\n return { format: \"go\", goroutines: parseGoroutineDump(text) };\n }\n return { format: \"unknown\", goroutines: [], threads: [] };\n}\n\nexport function countStackByState(stack: ParsedStack): Map<string, number> {\n if (stack.format === \"jvm\") return countThreadsByState(stack.threads);\n if (stack.format === \"go\") return countGoroutinesByState(stack.goroutines);\n return new Map();\n}\n\nexport interface ParsedGoroutineFrame {\n functionName: string;\n displayName: string;\n file?: string;\n location?: string;\n line?: number;\n kind: \"frame\" | \"created_by\";\n runtime: boolean;\n}\n\nexport interface ParsedGoroutine {\n id: number;\n state: string;\n rawState: string;\n frames: ParsedGoroutineFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^goroutine\\s+(\\d+)\\s+\\[(.+?)\\]:$/;\nconst goSrcPrefixRe = /^\\/usr\\/local\\/go[\\d.]+\\/src\\//;\nconst goWorkspacePrefixRe = /^.*?\\/go\\/src\\//;\nconst goPkgModPrefixRe = /^.*?\\/go\\/pkg\\/mod\\//;\n\nexport function parseGoroutineDump(text: string): ParsedGoroutine[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n const blocks = splitGoroutineBlocks(trimmed);\n const goroutines: ParsedGoroutine[] = [];\n\n for (const block of blocks) {\n const lines = block.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const header = lines[0]?.trim();\n const match = headerRe.exec(header || \"\");\n if (!match) continue;\n\n const id = Number(match[1] ?? 0);\n const rawState = match[2] ?? \"\";\n const state = normalizeState(rawState);\n const frames: ParsedGoroutineFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n const trimmedLine = line.trim();\n if (!trimmedLine) continue;\n\n const fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\n continue;\n }\n\n const kind = trimmedLine.startsWith(\"created by \") ? \"created_by\" : \"frame\";\n const functionName =\n kind === \"created_by\" ? trimmedLine.slice(\"created by \".length) : trimmedLine;\n frames.push({\n functionName,\n displayName: sanitizeFunctionName(functionName),\n kind,\n runtime: isRuntimeFrame(functionName),\n });\n }\n\n for (const frame of frames) {\n if (frame.file) {\n frame.file = normalizeFilePath(frame.file);\n frame.location = `${frame.file}${frame.line ? `:${frame.line}` : \"\"}`;\n }\n }\n\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n\n goroutines.push({\n id,\n state,\n rawState,\n frames,\n raw: block,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `${header}\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n });\n }\n\n return goroutines;\n}\n\nfunction recordFrame(frame: StackFrame, kind: ParsedGoroutineFrame[\"kind\"]): ParsedGoroutineFrame {\n const file = frame.file ? normalizeFilePath(frame.file) : undefined;\n return {\n functionName: frame.func,\n // A record's func carries no argument list, so only the package path is stripped.\n displayName: stripPackageQualifier(frame.func),\n kind,\n runtime: isRuntimeFrame(frame.func),\n ...(file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : \"\"}` } : {}),\n };\n}\n\n/**\n * Goroutines from `stacks` records of Go format, already parsed server side:\n * no text is parsed. A record of another format or one that failed is a caller\n * error and throws.\n */\nexport function goroutinesFromRecords(records: StackRecord[]): ParsedGoroutine[] {\n return records.map((record) => {\n if (record.format !== \"go\" || record.error || record.goroutineId === undefined) {\n throw new Error(\n `stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format \"${record.format}\"${record.error ? `, error \"${record.error}\"` : \"\"})`,\n );\n }\n const frames = [\n ...(record.frames ?? []).map((frame) => recordFrame(frame, \"frame\")),\n ...(record.createdBy ? [recordFrame(record.createdBy, \"created_by\")] : []),\n ];\n const state = record.state ?? \"\";\n const rawState = [\n state,\n ...(record.waitMinutes ? [`${record.waitMinutes} minutes`] : []),\n ...(record.lockedToThread ? [\"locked to thread\"] : []),\n ].join(\", \");\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n return {\n id: record.goroutineId,\n state: normalizeState(state),\n rawState,\n frames,\n raw: record.raw,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `goroutine ${record.goroutineId} [${rawState}]\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n };\n });\n}\n\nexport function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const goroutine of goroutines) {\n counts.set(goroutine.state, (counts.get(goroutine.state) || 0) + 1);\n }\n return counts;\n}\n\nfunction normalizeState(value: string): string {\n return (value.split(\",\")[0] ?? \"\").trim().toLowerCase();\n}\n\nfunction isRuntimeFrame(functionName: string): boolean {\n return (\n functionName.startsWith(\"runtime.\") ||\n functionName.startsWith(\"runtime/\") ||\n functionName.startsWith(\"internal/\") ||\n functionName.startsWith(\"runtime/internal/\") ||\n functionName.startsWith(\"syscall.\") ||\n functionName.startsWith(\"reflect.\")\n );\n}\n\nfunction parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\n}\n\nfunction sanitizeFunctionName(functionName: string): string {\n let name = functionName.trim();\n const paren = name.indexOf(\"(\");\n if (paren !== -1) name = name.slice(0, paren);\n return stripPackageQualifier(name);\n}\n\nfunction stripPackageQualifier(name: string): string {\n return name.replace(/^((?:[^./\\s]+\\/)+)([^./\\s]+)\\./, \"$2.\");\n}\n\nfunction normalizeFilePath(path: string): string {\n return path\n .replace(goSrcPrefixRe, \"\")\n .replace(goWorkspacePrefixRe, \"\")\n .replace(goPkgModPrefixRe, \"\");\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -19,12 +19,6 @@ export interface StackCapture {
|
|
|
19
19
|
error?: string;
|
|
20
20
|
collected_at?: string;
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
sequence: number;
|
|
25
|
-
kind?: "initial" | "rerun" | string;
|
|
26
|
-
started?: string;
|
|
27
|
-
ended?: string;
|
|
28
|
-
args?: Record<string, unknown>;
|
|
29
|
-
}
|
|
22
|
+
/** The test-runner run metadata; diagnostics shares it rather than keeping a duplicate. */
|
|
23
|
+
export type { RunMeta } from '../test-runner/types.js';
|
|
30
24
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,2FAA2F;AAC3F,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
|