sparkforensics-server 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/README.md +6 -0
  2. package/index.js +40 -49
  3. package/lib/static-files.js +10 -6
  4. package/package.json +20 -1
  5. package/public/assets/AutoscalingChurn-CFJkiqxW.js +1 -0
  6. package/public/assets/CacheUtilization-kTKZBzDA.js +1 -0
  7. package/public/assets/CachingOpportunity-CU70EWcF.js +1 -0
  8. package/public/assets/ColdStart-hOI-WOvm.js +1 -0
  9. package/public/assets/ConfigAudit-B4oAksZY.js +1 -0
  10. package/public/assets/CoreUsageArea-D-dR3SQk.js +1 -0
  11. package/public/assets/Dashboard-MDhohsq4.js +4 -0
  12. package/public/assets/DuplicatePlanSubtree-54RKsfI7.js +1 -0
  13. package/public/assets/DurationHistogram-CviQyPNM.js +1 -0
  14. package/public/assets/EmptyState-v2ehFncc.js +1 -0
  15. package/public/assets/ExecutorUtilization-vHyFHgL6.js +1 -0
  16. package/public/assets/GcPressure-DINuhcno.js +1 -0
  17. package/public/assets/ImpactEstimate-C6GzFOY9.js +1 -0
  18. package/public/assets/IncompleteRun-a1kuCnU6.js +1 -0
  19. package/public/assets/JobFailures-CYwPfUhR.js +1 -0
  20. package/public/assets/MemoryUtilization-Dlfj0e_f.js +1 -0
  21. package/public/assets/OverBroadcast-BMu7Y8l9.js +1 -0
  22. package/public/assets/PartitionSizing-CvMGfSVB.js +1 -0
  23. package/public/assets/PlanExplorer-xYFme_Rx.js +1 -0
  24. package/public/assets/PlanGraphRoute-a3OGg6ET.js +1 -0
  25. package/public/assets/RetryWaste-JKRjOZ-J.js +1 -0
  26. package/public/assets/RowPagination-DypWbnic.js +1 -0
  27. package/public/assets/ShuffleIO-Mi8HiVu-.js +1 -0
  28. package/public/assets/Skew-C3iOScTC.js +1 -0
  29. package/public/assets/SlowHost-DKBg18v-.js +1 -0
  30. package/public/assets/SmallFiles-CCCB6AIu.js +1 -0
  31. package/public/assets/SpeculationWaste-DUNupw0_.js +1 -0
  32. package/public/assets/Spill-BlLdatik.js +1 -0
  33. package/public/assets/StageFailed-qtY7C7Yo.js +1 -0
  34. package/public/assets/StageFindingGroup-CoVdEZYs.js +1 -0
  35. package/public/assets/StageHeader-uDBLHgdg.js +1 -0
  36. package/public/assets/StagePill-CYCMdlIx.js +1 -0
  37. package/public/assets/StageShape-zs0mAjQJ.js +1 -0
  38. package/public/assets/StageSlowness-C7vg0u5Q.js +1 -0
  39. package/public/assets/Straggler-4BRGAQP4.js +1 -0
  40. package/public/assets/TaskFailures-CSjO23Kg.js +1 -0
  41. package/public/assets/TinyTask-6Zuovcn5.js +1 -0
  42. package/public/assets/UnderBroadcast-CePjo0ZV.js +1 -0
  43. package/public/assets/WidgetLeadSummary-DRNRVvn7.js +1 -0
  44. package/public/assets/{charts-vendor-NMqKV0H4.js → charts-vendor-Cf1-wzeH.js} +2 -2
  45. package/public/assets/downsample-D8XmJk6i.js +1 -0
  46. package/public/assets/finding-anchor-4TmpXd7j.js +1 -0
  47. package/public/assets/impact-sort-Cq6KOLqh.js +1 -0
  48. package/public/assets/inbox-DBFovbUX.js +1 -0
  49. package/public/assets/index-CHjV2-jB.js +9 -0
  50. package/public/assets/index-DMEtaP4u.css +1 -0
  51. package/public/assets/parser-worker-BMPPE37w.js +64 -0
  52. package/public/assets/plan-graph-vendor-B96a-e4N.js +7 -0
  53. package/public/assets/react-vendor-DA6opS-q.js +9 -0
  54. package/public/assets/select-D5fK-za0.js +1 -0
  55. package/public/assets/toggle-group-lbIXRG0W.js +1 -0
  56. package/public/assets/usePagedRows-CFoZrPr4.js +1 -0
  57. package/public/assets/useRecentFiles-BPGQ6XII.js +13 -0
  58. package/public/assets/useSortMode-BOPpfLhJ.js +1 -0
  59. package/public/docs/404.html +3 -3
  60. package/public/docs/assets/{app.Bxy4_HVA.js → app.BgzsaTS3.js} +1 -1
  61. package/public/docs/assets/aqe-loop.IwQSATHw.svg +1 -0
  62. package/public/docs/assets/aqe-loop.dark.DGbaxqJE.svg +1 -0
  63. package/public/docs/assets/broadcast-vs-shuffle.Db4WY1XK.svg +1 -0
  64. package/public/docs/assets/broadcast-vs-shuffle.dark.C7Bxs0mG.svg +1 -0
  65. package/public/docs/assets/cache-lifecycle.dark.B-hS7AgU.svg +1 -0
  66. package/public/docs/assets/cache-lifecycle.rEOVYQNU.svg +1 -0
  67. package/public/docs/assets/chunks/@localSearchIndexroot.PQ5JepCp.js +1 -0
  68. package/public/docs/assets/chunks/{VPLocalSearchBox.L5jNOIR3.js → VPLocalSearchBox.DOq3t-On.js} +1 -1
  69. package/public/docs/assets/chunks/duplicate-plan-subtree.dark.Cdp70QhV.js +1 -0
  70. package/public/docs/assets/chunks/{framework.CNDaxUod.js → framework.DSg0KOwT.js} +1 -1
  71. package/public/docs/assets/chunks/retry-escalation-ladder.dark.DHipdJgZ.js +1 -0
  72. package/public/docs/assets/chunks/theme.BP14rGBx.js +2 -0
  73. package/public/docs/assets/cold-start-timeline.DxC_Sc7w.svg +1 -0
  74. package/public/docs/assets/cold-start-timeline.dark.CZ17YcAG.svg +1 -0
  75. package/public/docs/assets/columnar-layout.PghGeOEA.svg +1 -0
  76. package/public/docs/assets/columnar-layout.dark.BVNlz0ff.svg +1 -0
  77. package/public/docs/assets/container-memory.DIO0AnIm.svg +1 -0
  78. package/public/docs/assets/container-memory.dark.CP-5zuCl.svg +1 -0
  79. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.B-OsL91z.js +1 -0
  80. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.B-OsL91z.lean.js +1 -0
  81. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.BOeH4d1J.js +1 -0
  82. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.BOeH4d1J.lean.js +1 -0
  83. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.lean.js +1 -0
  85. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.js → contributor-guide_architecture_impact-estimation.md.DYCDPgkh.js} +1 -1
  86. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.lean.js → contributor-guide_architecture_impact-estimation.md.DYCDPgkh.lean.js} +1 -1
  87. package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.js → contributor-guide_architecture_index.md.3TO9ic6w.js} +1 -1
  88. package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.lean.js → contributor-guide_architecture_index.md.3TO9ic6w.lean.js} +1 -1
  89. package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.js → contributor-guide_architecture_overview.md.CehiRmGn.js} +1 -1
  90. package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.lean.js → contributor-guide_architecture_overview.md.CehiRmGn.lean.js} +1 -1
  91. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.m3S3UdMk.js +1 -0
  92. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.m3S3UdMk.lean.js +1 -0
  93. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DbqPf2OT.js +1 -0
  94. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DbqPf2OT.lean.js +1 -0
  95. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.js → contributor-guide_architecture_worker-protocol.md.B93qJ_tT.js} +2 -2
  96. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.lean.js → contributor-guide_architecture_worker-protocol.md.B93qJ_tT.lean.js} +1 -1
  97. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.js +1 -0
  98. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.lean.js +1 -0
  99. package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.js → contributor-guide_development-setup.md.DvAN_9mK.js} +1 -1
  100. package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.lean.js → contributor-guide_development-setup.md.DvAN_9mK.lean.js} +1 -1
  101. package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.js → contributor-guide_testing.md.6rIKqSyY.js} +1 -1
  102. package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.lean.js → contributor-guide_testing.md.6rIKqSyY.lean.js} +1 -1
  103. package/public/docs/assets/dag-stages.DSz_S937.svg +1 -0
  104. package/public/docs/assets/dag-stages.dark.F72UzxH4.svg +1 -0
  105. package/public/docs/assets/driver-executor.D5pQ7YN1.svg +1 -0
  106. package/public/docs/assets/driver-executor.dark.BmX9cPvh.svg +1 -0
  107. package/public/docs/assets/duplicate-plan-subtree.B4cvN6fj.svg +1 -0
  108. package/public/docs/assets/duplicate-plan-subtree.dark.Dw8wS0Ag.svg +1 -0
  109. package/public/docs/assets/{index.md.CETnDZzR.js → index.md.CHJVslga.js} +1 -1
  110. package/public/docs/assets/{index.md.CETnDZzR.lean.js → index.md.CHJVslga.lean.js} +1 -1
  111. package/public/docs/assets/join-strategy.C_FvrCEo.svg +1 -0
  112. package/public/docs/assets/join-strategy.dark.ChMLnNII.svg +1 -0
  113. package/public/docs/assets/memory-borrowing.BqQRJg0u.svg +1 -0
  114. package/public/docs/assets/memory-borrowing.dark.Yhh20O9C.svg +1 -0
  115. package/public/docs/assets/memory-regions.XHvO7jHG.svg +1 -0
  116. package/public/docs/assets/memory-regions.dark.D4TP9_08.svg +1 -0
  117. package/public/docs/assets/repartition-vs-coalesce.BovLRrpj.svg +1 -0
  118. package/public/docs/assets/repartition-vs-coalesce.dark.BhAczKZQ.svg +1 -0
  119. package/public/docs/assets/retry-escalation-ladder.DyTKJJmZ.svg +1 -0
  120. package/public/docs/assets/retry-escalation-ladder.dark.BdsabtU3.svg +1 -0
  121. package/public/docs/assets/shuffle-map-reduce.KuOEZVmg.svg +1 -0
  122. package/public/docs/assets/shuffle-map-reduce.dark.BgQZnFSb.svg +1 -0
  123. package/public/docs/assets/spill-classification.BU2euYDO.svg +1 -0
  124. package/public/docs/assets/spill-classification.dark.D7i1M40d.svg +1 -0
  125. package/public/docs/assets/{style.D2mY0HUs.css → style.DXOMCXxn.css} +1 -1
  126. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +1 -0
  127. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +1 -0
  128. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +1 -0
  129. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +1 -0
  130. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +1 -0
  131. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +1 -0
  132. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +7 -0
  133. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +1 -0
  134. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +1 -0
  135. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +1 -0
  136. package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.js +6 -0
  137. package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.lean.js +1 -0
  138. package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.js +6 -0
  139. package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.lean.js +1 -0
  140. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +8 -0
  141. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +1 -0
  142. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +7 -0
  143. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +1 -0
  144. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +1 -0
  145. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +1 -0
  146. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.js +12 -0
  147. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.lean.js +1 -0
  148. package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.js +14 -0
  149. package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.lean.js +1 -0
  150. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js +7 -0
  151. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +1 -0
  152. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.js +5 -0
  153. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.lean.js +1 -0
  154. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +6 -0
  155. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +1 -0
  156. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.js +7 -0
  157. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.lean.js +1 -0
  158. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.js +8 -0
  159. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.lean.js +1 -0
  160. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.js +5 -0
  161. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.lean.js +1 -0
  162. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +1 -0
  163. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +1 -0
  164. package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.js +1 -0
  165. package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.lean.js +1 -0
  166. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +1 -0
  167. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +1 -0
  168. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +1 -0
  169. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +1 -0
  170. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +1 -0
  171. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +1 -0
  172. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +1 -0
  173. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +1 -0
  174. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +1 -0
  175. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +1 -0
  176. package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.js +1 -0
  177. package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.lean.js +1 -0
  178. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +1 -0
  179. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +1 -0
  180. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +1 -0
  181. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +1 -0
  182. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +6 -0
  183. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +1 -0
  184. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +1 -0
  185. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +1 -0
  186. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +1 -0
  187. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +1 -0
  188. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +1 -0
  189. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +1 -0
  190. package/public/docs/assets/udf-execution-models.BUFDICuG.svg +1 -0
  191. package/public/docs/assets/udf-execution-models.dark.YTNS6GDq.svg +1 -0
  192. package/public/docs/assets/user-guide_alternative-log-retrieval.md.sU3KGarf.js +1 -0
  193. package/public/docs/assets/user-guide_alternative-log-retrieval.md.sU3KGarf.lean.js +1 -0
  194. package/public/docs/assets/user-guide_getting-started.md.DtEM37MK.js +3 -0
  195. package/public/docs/assets/user-guide_getting-started.md.DtEM37MK.lean.js +1 -0
  196. package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.js → user-guide_mcp-tools.md.C8MiIu7F.js} +35 -5
  197. package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.lean.js → user-guide_mcp-tools.md.C8MiIu7F.lean.js} +1 -1
  198. package/public/docs/assets/{user-guide_run-comparison.md.5-oaOfTu.js → user-guide_run-comparison.md.S0TWWmLY.js} +1 -1
  199. package/public/docs/assets/{user-guide_run-comparison.md.5-oaOfTu.lean.js → user-guide_run-comparison.md.S0TWWmLY.lean.js} +1 -1
  200. package/public/docs/assets/user-guide_understanding-findings.md.D0R_Y-R2.js +1 -0
  201. package/public/docs/assets/{user-guide_understanding-findings.md.CK2WZ0Tf.lean.js → user-guide_understanding-findings.md.D0R_Y-R2.lean.js} +1 -1
  202. package/public/docs/contributor-guide/architecture/board-widgets.html +7 -7
  203. package/public/docs/contributor-guide/architecture/detector-contract.html +7 -7
  204. package/public/docs/contributor-guide/architecture/drill-down.html +7 -7
  205. package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -7
  206. package/public/docs/contributor-guide/architecture/index.html +7 -7
  207. package/public/docs/contributor-guide/architecture/overview.html +7 -7
  208. package/public/docs/contributor-guide/architecture/state-and-history.html +7 -7
  209. package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -7
  210. package/public/docs/contributor-guide/architecture/worker-protocol.html +8 -8
  211. package/public/docs/contributor-guide/contributing.html +7 -7
  212. package/public/docs/contributor-guide/development-setup.html +7 -7
  213. package/public/docs/contributor-guide/testing.html +7 -7
  214. package/public/docs/hashmap.json +1 -1
  215. package/public/docs/index.html +7 -7
  216. package/public/docs/tuning-reference/anti-patterns.html +29 -0
  217. package/public/docs/tuning-reference/aqe.html +29 -0
  218. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +29 -0
  219. package/public/docs/tuning-reference/bottleneck-cold-start.html +35 -0
  220. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +30 -0
  221. package/public/docs/tuning-reference/bottleneck-failures.html +35 -0
  222. package/public/docs/tuning-reference/bottleneck-gc.html +34 -0
  223. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +37 -0
  224. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +35 -0
  225. package/public/docs/tuning-reference/bottleneck-retry-waste.html +30 -0
  226. package/public/docs/tuning-reference/bottleneck-shuffle.html +40 -0
  227. package/public/docs/tuning-reference/bottleneck-skew.html +42 -0
  228. package/public/docs/tuning-reference/bottleneck-slow-host.html +35 -0
  229. package/public/docs/tuning-reference/bottleneck-small-files.html +33 -0
  230. package/public/docs/tuning-reference/bottleneck-spill.html +34 -0
  231. package/public/docs/tuning-reference/bottleneck-straggler.html +35 -0
  232. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +36 -0
  233. package/public/docs/tuning-reference/bottleneck-utilization.html +34 -0
  234. package/public/docs/tuning-reference/caching.html +29 -0
  235. package/public/docs/tuning-reference/cluster-config.html +29 -0
  236. package/public/docs/tuning-reference/config.html +29 -0
  237. package/public/docs/tuning-reference/data-formats.html +29 -0
  238. package/public/docs/tuning-reference/index.html +29 -0
  239. package/public/docs/tuning-reference/intro.html +29 -0
  240. package/public/docs/tuning-reference/joins.html +29 -0
  241. package/public/docs/tuning-reference/memory-model.html +29 -0
  242. package/public/docs/tuning-reference/metrics.html +29 -0
  243. package/public/docs/tuning-reference/partitioning.html +29 -0
  244. package/public/docs/tuning-reference/pyspark.html +34 -0
  245. package/public/docs/tuning-reference/shuffle.html +29 -0
  246. package/public/docs/tuning-reference/spark-architecture.html +29 -0
  247. package/public/docs/tuning-reference/table-formats.html +29 -0
  248. package/public/docs/user-guide/alternative-log-retrieval.html +29 -0
  249. package/public/docs/user-guide/getting-started.html +8 -8
  250. package/public/docs/user-guide/mcp-tools.html +41 -11
  251. package/public/docs/user-guide/run-comparison.html +7 -7
  252. package/public/docs/user-guide/understanding-findings.html +7 -7
  253. package/public/index.html +6 -6
  254. package/vendor-core/analyzer.js +74 -74
  255. package/vendor-core/cli/budgets.js +13 -27
  256. package/vendor-core/cli/collect-run.js +43 -19
  257. package/vendor-core/core-count.js +25 -27
  258. package/vendor-core/core-locality-ratio.js +4 -11
  259. package/vendor-core/core-time-series.js +6 -12
  260. package/vendor-core/core-usage-locality.js +3 -4
  261. package/vendor-core/detectors.js +256 -375
  262. package/vendor-core/docs-config.js +69 -21
  263. package/vendor-core/docs-content/chapters/01-intro.md +32 -0
  264. package/vendor-core/docs-content/chapters/02-spark-architecture.md +76 -0
  265. package/vendor-core/docs-content/chapters/03-memory-model.md +73 -0
  266. package/vendor-core/docs-content/chapters/04-partitioning.md +65 -0
  267. package/vendor-core/docs-content/chapters/05-joins.md +62 -0
  268. package/vendor-core/docs-content/chapters/06-shuffle.md +59 -0
  269. package/vendor-core/docs-content/chapters/07-data-formats.md +81 -0
  270. package/vendor-core/docs-content/chapters/07b-table-formats.md +56 -0
  271. package/vendor-core/docs-content/chapters/08-caching.md +58 -0
  272. package/vendor-core/docs-content/chapters/09-pyspark.md +78 -0
  273. package/vendor-core/docs-content/chapters/10-aqe.md +167 -0
  274. package/vendor-core/docs-content/chapters/11-cluster-config.md +170 -0
  275. package/vendor-core/docs-content/chapters/12-anti-patterns.md +171 -0
  276. package/vendor-core/docs-content/chapters/14-metrics.md +87 -0
  277. package/vendor-core/docs-content/chapters/15-config.md +93 -0
  278. package/vendor-core/docs-content/chapters/nav-index.json +370 -0
  279. package/vendor-core/docs-content/detection/cache.md +6 -0
  280. package/vendor-core/docs-content/detection/cfg.md +15 -0
  281. package/vendor-core/docs-content/detection/chrn.md +7 -0
  282. package/vendor-core/docs-content/detection/cold.md +4 -0
  283. package/vendor-core/docs-content/detection/cstor.md +4 -0
  284. package/vendor-core/docs-content/detection/fail.md +5 -0
  285. package/vendor-core/docs-content/detection/gc.md +4 -0
  286. package/vendor-core/docs-content/detection/host.md +5 -0
  287. package/vendor-core/docs-content/detection/incmp.md +6 -0
  288. package/vendor-core/docs-content/detection/jobs.md +4 -0
  289. package/vendor-core/docs-content/detection/local.md +7 -0
  290. package/vendor-core/docs-content/detection/mem.md +10 -0
  291. package/vendor-core/docs-content/detection/part.md +5 -0
  292. package/vendor-core/docs-content/detection/plan.md +14 -0
  293. package/vendor-core/docs-content/detection/retry.md +4 -0
  294. package/vendor-core/docs-content/detection/sfail.md +5 -0
  295. package/vendor-core/docs-content/detection/shape.md +5 -0
  296. package/vendor-core/docs-content/detection/shfl.md +4 -0
  297. package/vendor-core/docs-content/detection/skew.md +6 -0
  298. package/vendor-core/docs-content/detection/slow.md +6 -0
  299. package/vendor-core/docs-content/detection/spec.md +7 -0
  300. package/vendor-core/docs-content/detection/spill.md +7 -0
  301. package/vendor-core/docs-content/detection/strag.md +5 -0
  302. package/vendor-core/docs-content/detection/tiny.md +4 -0
  303. package/vendor-core/docs-content/detection/util.md +4 -0
  304. package/vendor-core/docs-content/diagrams/aqe-loop.dark.svg +1 -0
  305. package/vendor-core/docs-content/diagrams/aqe-loop.svg +1 -0
  306. package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.dark.svg +1 -0
  307. package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.svg +1 -0
  308. package/vendor-core/docs-content/diagrams/cache-lifecycle.dark.svg +1 -0
  309. package/vendor-core/docs-content/diagrams/cache-lifecycle.svg +1 -0
  310. package/vendor-core/docs-content/diagrams/cold-start-timeline.dark.svg +1 -0
  311. package/vendor-core/docs-content/diagrams/cold-start-timeline.svg +1 -0
  312. package/vendor-core/docs-content/diagrams/columnar-layout.dark.svg +1 -0
  313. package/vendor-core/docs-content/diagrams/columnar-layout.svg +1 -0
  314. package/vendor-core/docs-content/diagrams/container-memory.dark.svg +1 -0
  315. package/vendor-core/docs-content/diagrams/container-memory.svg +1 -0
  316. package/vendor-core/docs-content/diagrams/dag-stages.dark.svg +1 -0
  317. package/vendor-core/docs-content/diagrams/dag-stages.svg +1 -0
  318. package/vendor-core/docs-content/diagrams/driver-executor.dark.svg +1 -0
  319. package/vendor-core/docs-content/diagrams/driver-executor.svg +1 -0
  320. package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.dark.svg +1 -0
  321. package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.svg +1 -0
  322. package/vendor-core/docs-content/diagrams/join-strategy.dark.svg +1 -0
  323. package/vendor-core/docs-content/diagrams/join-strategy.svg +1 -0
  324. package/vendor-core/docs-content/diagrams/memory-borrowing.dark.svg +1 -0
  325. package/vendor-core/docs-content/diagrams/memory-borrowing.svg +1 -0
  326. package/vendor-core/docs-content/diagrams/memory-regions.dark.svg +1 -0
  327. package/vendor-core/docs-content/diagrams/memory-regions.svg +1 -0
  328. package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.dark.svg +1 -0
  329. package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.svg +1 -0
  330. package/vendor-core/docs-content/diagrams/retry-escalation-ladder.dark.svg +1 -0
  331. package/vendor-core/docs-content/diagrams/retry-escalation-ladder.svg +1 -0
  332. package/vendor-core/docs-content/diagrams/shuffle-map-reduce.dark.svg +1 -0
  333. package/vendor-core/docs-content/diagrams/shuffle-map-reduce.svg +1 -0
  334. package/vendor-core/docs-content/diagrams/spill-classification.dark.svg +1 -0
  335. package/vendor-core/docs-content/diagrams/spill-classification.svg +1 -0
  336. package/vendor-core/docs-content/diagrams/udf-execution-models.dark.svg +1 -0
  337. package/vendor-core/docs-content/diagrams/udf-execution-models.svg +1 -0
  338. package/vendor-core/docs-content/tuning/broadcast-sizing.md +78 -0
  339. package/vendor-core/docs-content/tuning/cold-start.md +81 -0
  340. package/vendor-core/docs-content/tuning/duplicate-plan-subtree.md +45 -0
  341. package/vendor-core/docs-content/tuning/failures.md +124 -0
  342. package/vendor-core/docs-content/tuning/gc.md +110 -0
  343. package/vendor-core/docs-content/tuning/job-failure-rate.md +101 -0
  344. package/vendor-core/docs-content/tuning/memory-utilization.md +58 -0
  345. package/vendor-core/docs-content/tuning/retry-waste.md +90 -0
  346. package/vendor-core/docs-content/tuning/shuffle.md +154 -0
  347. package/vendor-core/docs-content/tuning/skew.md +123 -0
  348. package/vendor-core/docs-content/tuning/slow-host.md +117 -0
  349. package/vendor-core/docs-content/tuning/small-files.md +99 -0
  350. package/vendor-core/docs-content/tuning/spill.md +114 -0
  351. package/vendor-core/docs-content/tuning/straggler.md +103 -0
  352. package/vendor-core/docs-content/tuning/tiny-tasks.md +94 -0
  353. package/vendor-core/docs-content/tuning/utilization.md +90 -0
  354. package/vendor-core/docs-site-config.js +10 -17
  355. package/vendor-core/efficiency-model.js +7 -13
  356. package/vendor-core/etl-phases.js +3 -5
  357. package/vendor-core/event-handlers.js +232 -134
  358. package/vendor-core/event-schemas.js +48 -114
  359. package/vendor-core/evidence-availability.js +5 -10
  360. package/vendor-core/evidence-report.js +72 -122
  361. package/vendor-core/export-data.js +48 -0
  362. package/vendor-core/finding-action-label.js +4 -10
  363. package/vendor-core/finding-filter-predicate.js +3 -7
  364. package/vendor-core/finding-generic-recommendation.js +112 -0
  365. package/vendor-core/finding-names.js +51 -0
  366. package/vendor-core/format-utils.js +112 -38
  367. package/vendor-core/impact-band.js +18 -24
  368. package/vendor-core/impact-estimator.js +38 -74
  369. package/vendor-core/ingest.js +7 -13
  370. package/vendor-core/job-groups.js +3 -6
  371. package/vendor-core/list-runs.js +278 -0
  372. package/vendor-core/load-vendored.js +6 -12
  373. package/vendor-core/log-header-peek.js +81 -0
  374. package/vendor-core/lz4-block.js +4 -6
  375. package/vendor-core/mcp-server-factory.js +38 -8
  376. package/vendor-core/mcp-tools.js +105 -76
  377. package/vendor-core/model-assembler.js +8 -16
  378. package/vendor-core/occupancy.js +5 -9
  379. package/vendor-core/parser-worker.js +18 -27
  380. package/vendor-core/plan-dot.js +2 -5
  381. package/vendor-core/plan-duration-attribution.js +78 -29
  382. package/vendor-core/plan-graph-model.js +126 -69
  383. package/vendor-core/plan-node-detail.js +31 -17
  384. package/vendor-core/plan-summary.js +19 -8
  385. package/vendor-core/recommendation-rollup.js +35 -39
  386. package/vendor-core/redact.js +72 -16
  387. package/vendor-core/rolling-log-reassembly.js +4 -6
  388. package/vendor-core/run-comparison.js +65 -70
  389. package/vendor-core/scaling-sim.js +5 -7
  390. package/vendor-core/session-snapshot.js +1 -1
  391. package/vendor-core/shs-fetch.js +4 -6
  392. package/vendor-core/shs-load.js +9 -13
  393. package/vendor-core/shs-request.js +1 -1
  394. package/vendor-core/stage-quantiles.js +14 -0
  395. package/vendor-core/types.js +78 -18
  396. package/vendor-core/wasted-core-hours.js +7 -12
  397. package/public/assets/AutoscalingChurn-CP5OjN6v.js +0 -1
  398. package/public/assets/CacheUtilization-BjyawXL6.js +0 -1
  399. package/public/assets/CachingOpportunity-DV2ABG2G.js +0 -1
  400. package/public/assets/ConfigAudit-DMiBhAoG.js +0 -1
  401. package/public/assets/CoreUsageArea-CGYIgPnt.js +0 -1
  402. package/public/assets/Dashboard-D1_IrWRs.js +0 -12
  403. package/public/assets/ExecutorTimeline-DkaAGqQT.js +0 -1
  404. package/public/assets/Failures-Crngoicu.js +0 -1
  405. package/public/assets/GcPressure-CFXm4BnA.js +0 -1
  406. package/public/assets/IncompleteRun-BWEJTb13.js +0 -1
  407. package/public/assets/JobFailures-BmjxCA-h.js +0 -1
  408. package/public/assets/MemoryUtilization-Bu2uQJbd.js +0 -1
  409. package/public/assets/PlanExplorer-DKUwF0uz.js +0 -1
  410. package/public/assets/PlanGraphRoute-BjPSugIG.js +0 -1
  411. package/public/assets/ShuffleIO--Rur3neu.js +0 -1
  412. package/public/assets/Spill-DIMpt8c2.js +0 -1
  413. package/public/assets/TaskSkew-BDr1DbeI.js +0 -1
  414. package/public/assets/index-4id52G-A.js +0 -9
  415. package/public/assets/index-D9kwVYIO.css +0 -1
  416. package/public/assets/parser-worker-00O9WEQC.js +0 -65
  417. package/public/assets/plan-graph-vendor-vZQHG2EJ.js +0 -7
  418. package/public/assets/react-vendor-u4pyvC5Y.js +0 -9
  419. package/public/assets/useRecentFiles-46iBU9zJ.js +0 -5
  420. package/public/docs/assets/chunks/@localSearchIndexroot.DclgKtlT.js +0 -1
  421. package/public/docs/assets/chunks/theme.CoT6y5bf.js +0 -2
  422. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.js +0 -1
  423. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.lean.js +0 -1
  424. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.js +0 -1
  425. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.lean.js +0 -1
  426. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.js +0 -1
  427. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.lean.js +0 -1
  428. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.js +0 -1
  429. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.lean.js +0 -1
  430. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.js +0 -1
  431. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.lean.js +0 -1
  432. package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.js +0 -1
  433. package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.lean.js +0 -1
  434. package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.js +0 -3
  435. package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.lean.js +0 -1
  436. package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.js +0 -1
  437. package/public/vendor/spark-doc/anchors.json +0 -205
  438. package/public/vendor/spark-doc/index.html +0 -4202
  439. package/public/vendor/spark-doc/landing.html +0 -418
  440. package/public/vendor/spark-doc/meta.html +0 -970
@@ -0,0 +1 @@
1
+ import{r as m,j as s}from"./react-vendor-DA6opS-q.js";import{L as p,at as B,W as M,T as H,I as N,as as P,ar as n}from"./index-CHjV2-jB.js";import{S as T}from"./StageHeader-uDBLHgdg.js";import{W as y}from"./WidgetLeadSummary-DRNRVvn7.js";import{u as k}from"./finding-anchor-4TmpXd7j.js";import{I as C}from"./ImpactEstimate-C6GzFOY9.js";import{c as D}from"./impact-sort-Cq6KOLqh.js";import{u as E,S as A}from"./useSortMode-BOPpfLhJ.js";import{R as O}from"./RowPagination-DypWbnic.js";import{u as b}from"./usePagedRows-CFoZrPr4.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./StagePill-CYCMdlIx.js";import"./toggle-group-lbIXRG0W.js";import"./useRecentFiles-BPGQ6XII.js";function x(t){const o=P(t);if(t.metric==="execMaxMedianRatio")return`Executor ${t.executorId}: ${n("ratio",o)} median on ${t.dimension??"this metric"}`;const a=Math.round((t.hostTaskShare??0)*100);return t.metric==="hostDurationShare"?`${t.host}: ${n("pctFraction",o)} of this stage's task time (${n("pct",a)} of tasks)`:`${t.host}: ${n("ratio",o)} median task time (${n("pct",a)} of tasks)`}function W(t){if(t.metric!=="hostDurationShare"&&t.metric!=="execMaxMedianRatio")return null;const o=t.recommendation??"",a=o.indexOf(": ");return a===-1?null:o.slice(a)}function F({finding:t,appModel:o}){const a=k([t]),i=W(t);return s.jsxs("li",{ref:a.ref,tabIndex:a.tabIndex,"data-flashed":a.dataFlashed,className:`space-y-1 text-sm transition-colors ${a.flashClassName}`,children:[s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsx(N,{impactBand:t.impactBand}),t.stageId!=null?s.jsx(T,{stageId:t.stageId,appModel:o}):null]}),s.jsxs("p",{className:"text-xs text-muted-foreground",children:[x(t),i]}),s.jsx(C,{finding:t}),i==null?s.jsx("p",{className:"text-muted-foreground pt-1",children:t.recommendation}):null]})}const st=m.memo(function({appModel:o,catalog:a,defaultCollapsed:i=!0}){const{sortMode:g,setSortMode:h,orderBy:f}=E(),[l,S]=m.useState(!i),[j,c]=m.useState(0),r=a.filter(e=>e.type==="slowHost").slice().sort((e,v)=>p[e.impactBand]-p[v.impactBand]),d=f(r,e=>[e],e=>e.stageId??null),u=B(),I=u?d.findIndex(e=>e===u.finding):null,{totalPages:w,effectivePage:R,visible:$}=b(d,j,c,I);return r.length===0?null:s.jsxs(M,{title:"Slow Executor Host",impactBand:r[0].impactBand,badges:s.jsxs(s.Fragment,{children:[s.jsx(H,{type:"slowHost",impactBand:r[0].impactBand}),D(r,r.length,l)?s.jsx(A,{mode:g,onChange:h}):null]}),open:l,onOpenChange:S,summary:s.jsx(y,{value:x(r[0]),context:`${r.length} issue${r.length===1?"":"s"} flagged`}),children:[s.jsx("ul",{className:"space-y-2",children:$.map(e=>s.jsx(F,{finding:e,appModel:o},e.id))}),s.jsx(O,{page:R,totalPages:w,onPrev:()=>c(e=>e-1),onNext:()=>c(e=>e+1)})]})});export{st as SlowHost};
@@ -0,0 +1 @@
1
+ import{r,j as e}from"./react-vendor-DA6opS-q.js";import{L as u,at as B,W as C,A as F,T,a8 as O,n as f}from"./index-CHjV2-jB.js";import{R as w}from"./useRecentFiles-BPGQ6XII.js";import{I as M}from"./ImpactEstimate-C6GzFOY9.js";import{u as N,R as E}from"./finding-anchor-4TmpXd7j.js";import{a as _}from"./StagePill-CYCMdlIx.js";import{W as $}from"./WidgetLeadSummary-DRNRVvn7.js";import{s as L,c as W}from"./impact-sort-Cq6KOLqh.js";import{u as b,S as q}from"./useSortMode-BOPpfLhJ.js";import{u as D}from"./usePagedRows-CFoZrPr4.js";import{R as G}from"./RowPagination-DypWbnic.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./toggle-group-lbIXRG0W.js";function K({finding:a}){const o=N([a]);return e.jsxs("li",{ref:o.ref,tabIndex:o.tabIndex,"data-flashed":o.dataFlashed,className:`space-y-2 ${E} transition-colors ${o.flashClassName}`,children:[a.stageIds&&a.stageIds.length>0?e.jsx(_,{pills:a.stageIds.map(l=>({id:l}))}):null,e.jsxs("p",{children:[a.recommendation," ",e.jsx(M,{finding:a})]})]})}const oe=r.memo(function({catalog:o,defaultCollapsed:l=!0}){const{sortMode:d,setSortMode:x,orderBy:h}=b(),[m,S]=r.useState(!l),[R,i]=r.useState(0),{findings:t,pills:c}=r.useMemo(()=>{const s=o.filter(n=>n.type==="smallFiles").sort((n,y)=>u[n.impactBand]-u[y.impactBand]),P=[...new Set(s.flatMap(n=>n.stageIds??[]))].map(n=>({id:n}));return{findings:s,pills:P}},[o,d]),p=h(t,s=>[s],L),g=B(),j=g?p.findIndex(s=>s===g.finding):null,{totalPages:I,effectivePage:A,visible:v}=D(p,R,i,j);return t.length===0?null:e.jsxs(C,{title:"Excessive Small Files",impactBand:f(t),open:m,onOpenChange:S,badges:e.jsxs(e.Fragment,{children:[e.jsx(T,{type:"smallFiles",impactBand:f(t)??"info",className:O}),W(t,t.length,m)?e.jsx(q,{mode:d,onChange:x}):null]}),statusBadge:e.jsx(F,{children:e.jsx(w,{confidence:t[0].confidence,validationRequired:t[0].validationRequired,evidenceKey:"sqlPlan"})}),summary:e.jsx($,{value:`${c.length} stage${c.length===1?"":"s"}`,context:`${t.length} finding${t.length===1?"":"s"} flagged`}),children:[e.jsx("ul",{className:"space-y-3 text-sm",children:v.map(s=>e.jsx(K,{finding:s},s.id))}),e.jsx(G,{page:A,totalPages:I,onPrev:()=>i(s=>s-1),onNext:()=>i(s=>s+1)})]})});export{oe as SmallFiles};
@@ -0,0 +1 @@
1
+ import{r as m,j as t}from"./react-vendor-DA6opS-q.js";import{L as d,at as v,W as y,T as N,I as P,q as T,as as C}from"./index-CHjV2-jB.js";import{S as b}from"./StageHeader-uDBLHgdg.js";import{W as w}from"./WidgetLeadSummary-DRNRVvn7.js";import{u as M}from"./finding-anchor-4TmpXd7j.js";import{c as A}from"./impact-sort-Cq6KOLqh.js";import{I as D}from"./ImpactEstimate-C6GzFOY9.js";import{u as E,S as O}from"./useSortMode-BOPpfLhJ.js";import{R as L}from"./RowPagination-DypWbnic.js";import{u as $}from"./usePagedRows-CFoZrPr4.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./StagePill-CYCMdlIx.js";import"./toggle-group-lbIXRG0W.js";import"./useRecentFiles-BPGQ6XII.js";function p(a){return T(C(a))}function F({finding:a,appModel:r}){const o=M([a]);return t.jsxs("li",{ref:o.ref,tabIndex:o.tabIndex,"data-flashed":o.dataFlashed,className:`space-y-1 text-sm transition-colors ${o.flashClassName}`,children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsx(P,{impactBand:a.impactBand}),a.stageId!=null?t.jsx(b,{stageId:a.stageId,appModel:r}):null,t.jsx("strong",{children:p(a)})]}),t.jsx(D,{finding:a}),t.jsx("p",{className:"text-muted-foreground pt-1",children:a.recommendation})]})}const te=m.memo(function({appModel:r,catalog:o,defaultCollapsed:u=!0}){const{sortMode:g,setSortMode:x,orderBy:f}=E(),[i,h]=m.useState(!u),[j,n]=m.useState(0),s=o.filter(e=>e.type==="speculationWaste").slice().sort((e,W)=>d[e.impactBand]-d[W.impactBand]),c=f(s,e=>[e],e=>e.stageId??null),l=v(),I=l?c.findIndex(e=>e===l.finding):null,{totalPages:S,effectivePage:B,visible:R}=$(c,j,n,I);return s.length===0?null:t.jsxs(y,{title:"Speculation Waste",impactBand:s[0].impactBand,badges:t.jsxs(t.Fragment,{children:[t.jsx(N,{type:"speculationWaste",impactBand:s[0].impactBand}),A(s,s.length,i)?t.jsx(O,{mode:g,onChange:x}):null]}),open:i,onOpenChange:h,summary:t.jsx(w,{value:p(s[0]),context:`${s.length} issue${s.length===1?"":"s"} flagged`}),children:[t.jsx("ul",{className:"space-y-2",children:R.map(e=>t.jsx(F,{finding:e,appModel:r},e.id))}),t.jsx(L,{page:B,totalPages:S,onPrev:()=>n(e=>e-1),onNext:()=>n(e=>e+1)})]})});export{te as SpeculationWaste};
@@ -0,0 +1 @@
1
+ import{j as e,r as h}from"./react-vendor-DA6opS-q.js";import{K as L,D as W,I as x,j as c,L as I,at as H,W as b,T as z,E as q,aw as Y,C as V,$ as X,a0 as J,A as U,as as Q}from"./index-CHjV2-jB.js";import{E as G}from"./EmptyState-v2ehFncc.js";import{S as Z}from"./StagePill-CYCMdlIx.js";import{W as ee}from"./WidgetLeadSummary-DRNRVvn7.js";import{G as se,H as te,J as P,K as T,j as w,C as p,r as ae,R as re}from"./useRecentFiles-BPGQ6XII.js";import{u as ie,R as ne}from"./finding-anchor-4TmpXd7j.js";import{I as oe}from"./ImpactEstimate-C6GzFOY9.js";import{c as le}from"./impact-sort-Cq6KOLqh.js";import{u as ce,S as de}from"./useSortMode-BOPpfLhJ.js";import{u as me}from"./usePagedRows-CFoZrPr4.js";import{R as pe}from"./RowPagination-DypWbnic.js";import{d as xe}from"./downsample-D8XmJk6i.js";import{j as ue,C as A,X as N,Y as y,T as R,S as ge,e as he,k as fe,a as je,d as ye}from"./charts-vendor-Cf1-wzeH.js";import{P as Se}from"./PlanExplorer-xYFme_Rx.js";import"./plan-graph-vendor-B96a-e4N.js";import"./toggle-group-lbIXRG0W.js";const k=240,Ce=500*1024*1024,ve=10;function M(t){const r=t.spillBytes>Ce,a=t.gcPct>ve;return r&&a?"critical":r||a?"warning":"info"}function Be(t){return p[M(t)]}function Ie({active:t,payload:r}){if(!t||!r?.length)return null;const a=r[0]?.payload;if(!a)return null;const l=M(a);return e.jsxs("div",{className:"rounded-md border border-border bg-popover px-2 py-1.5 text-xs text-popover-foreground shadow-md",children:[e.jsxs("p",{children:[c(a.spillBytes)," spilled"]}),e.jsxs("p",{children:[a.gcPct.toFixed(1),"% GC"]}),e.jsxs("p",{className:"mt-1 flex items-center gap-1.5 font-medium",children:[e.jsx(x,{impactBand:l}),l.toUpperCase()]})]})}function be({appModel:t}){const r=[];for(const s of t.stages.values()){const n=s.memoryBytesSpilled??0;n<=0||r.push({stageId:s.id,spillBytes:n,gcPct:s.gcPct??0,submittedAt:s.submittedAt??0})}if(r.length===0)return e.jsx(G,{tone:"clean",icon:L,title:"No stages spilled memory in this run."});const a=xe(r),l=[...a].sort((s,n)=>s.submittedAt-n.submittedAt).map(s=>({stage:`S${s.stageId}`,spillMB:s.spillBytes/(1024*1024),gcPct:s.gcPct}));return e.jsxs(se,{defaultValue:"scatter",children:[e.jsxs(te,{"aria-label":"Memory pressure view",children:[e.jsx(P,{value:"scatter",children:"Scatter"}),e.jsx(P,{value:"twin",children:"Twin bars"})]}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["Spill and GC pressure both stem from tight executor memory, see"," ",e.jsx(W,{anchor:"#memory-model",children:"how Spark’s memory model works"}),"."]}),e.jsxs(T,{value:"scatter",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-3 text-xs text-muted-foreground",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(x,{impactBand:"critical"}),"CRITICAL"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(x,{impactBand:"warning"}),"WARNING"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(x,{impactBand:"info"}),"INFO"]})]}),e.jsx(w,{ariaLabel:"Memory pressure scatter: spilled memory versus GC percent, one point per stage that spilled.",height:k,table:{caption:"Memory spilled and GC percent by stage",columns:["Stage","Memory spilled","GC %"],rows:a.map(s=>[`S${s.stageId}`,c(s.spillBytes),`${s.gcPct.toFixed(1)}%`]),align:["left","right","right"]},children:e.jsxs(ue,{children:[e.jsx(A,{stroke:p.muted,strokeOpacity:.2}),e.jsx(N,{type:"number",dataKey:"spillBytes",name:"Memory spilled",tickFormatter:s=>c(s),tick:{fontSize:10}}),e.jsx(y,{type:"number",dataKey:"gcPct",name:"GC %",tick:{fontSize:10},width:32}),e.jsx(R,{cursor:{strokeDasharray:"3 3"},content:Ie}),e.jsx(ge,{data:a,name:"Spill vs. GC",children:a.map(s=>e.jsx(he,{fill:Be(s)},s.stageId))})]})})]}),e.jsx(T,{value:"twin",children:e.jsx(w,{ariaLabel:"Memory pressure by stage: spilled memory and GC percent across stages in submission order.",height:k,table:{caption:"Spilled memory and GC percent by stage, submission order",columns:["Stage","Spill (MB)","GC %"],rows:l.map(s=>[s.stage,s.spillMB.toFixed(1),`${s.gcPct.toFixed(1)}%`]),align:["left","right","right"]},children:e.jsxs(fe,{data:l,children:[e.jsx(A,{stroke:p.muted,strokeOpacity:.2}),e.jsx(N,{dataKey:"stage",tick:{fontSize:10}}),e.jsx(y,{yAxisId:"left",tick:{fontSize:10},width:36}),e.jsx(y,{yAxisId:"right",orientation:"right",tick:{fontSize:10},width:36}),e.jsx(R,{}),e.jsx(je,{yAxisId:"left",dataKey:"spillMB",name:"Spill (MB)",fill:p.critical}),e.jsx(ye,{yAxisId:"right",dataKey:"gcPct",name:"GC %",stroke:p.info,dot:!1})]})})})]})}function Pe(t,r){return t.stages.get(r)?.spillClassification??"unclassified"}function Te({finding:t,appModel:r}){const a=ie([t]),l=q(),s=r.stages.get(t.stageId),n=Pe(r,t.stageId),m=n==="volume"&&s?Y(s):null,u=l==="advanced"&&ae(t.stageId,r);return e.jsxs("div",{ref:a.ref,tabIndex:a.tabIndex,"data-flashed":a.dataFlashed,className:`space-y-2 ${ne} transition-colors ${a.flashClassName}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(x,{impactBand:t.impactBand}),e.jsx(V,{label:J[n],impactBand:t.impactBand,title:X[n]}),e.jsx(Z,{stageId:t.stageId})]}),e.jsx(U,{children:e.jsx(re,{confidence:t.confidence,validationRequired:t.validationRequired})})]}),e.jsxs("p",{className:"text-sm",children:["Memory spilled: ",e.jsx("strong",{children:c(Q(t))})," · ","Disk: ",c(s?.diskBytesSpilled??0)]}),e.jsx(oe,{finding:t}),m?e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Try: ",e.jsxs("code",{children:["spark.sql.shuffle.partitions = ",m.recommended]}),` (current ${m.current} tasks, target 128 MB per partition)`]}):null,t.recommendation?e.jsx("p",{className:"text-xs text-muted-foreground",children:t.recommendation}):null,u?e.jsx("div",{className:"pt-1",children:e.jsx(Se,{stageId:t.stageId,appModel:r})}):null]})}const ze=h.memo(function({appModel:r,catalog:a,defaultCollapsed:l=!0}){const{sortMode:s,setSortMode:n,orderBy:m}=ce(),[u,O]=h.useState(!l),[E,f]=h.useState(0),{findings:S,sorted:d,orderedFindings:C}=h.useMemo(()=>{const i=a.filter(o=>o.type==="spill"&&o.stageId!=null),g=[...i].sort((o,j)=>(I[o.impactBand]??9)-(I[j.impactBand]??9)||(typeof j.value=="number"?j.value:0)-(typeof o.value=="number"?o.value:0)),K=m(g,o=>[o],o=>o.stageId);return{findings:i,sorted:g,orderedFindings:K}},[a,s]),v=H(),_=v?C.findIndex(i=>i===v.finding):null,{totalPages:F,effectivePage:D,visible:$}=me(C,E,f,_);if(S.length===0){let i=0;for(const g of r.stages.values())i=Math.max(i,g.memoryBytesSpilled??0);return e.jsx(b,{title:`Spill: no issue detected (max ${c(i)} spilled)`,children:e.jsx(G,{tone:"clean",icon:L,title:"No stages spilled memory in this run."})})}const B=d[0].impactBand;return e.jsx(b,{title:"Spill",impactBand:B,badges:e.jsxs(e.Fragment,{children:[e.jsx(z,{type:"spill",impactBand:B}),le(S,d.length,u)?e.jsx(de,{mode:s,onChange:n}):null]}),open:u,onOpenChange:O,summary:e.jsx(ee,{value:c(typeof d[0].value=="number"?d[0].value:0),context:`peak · ${d.length} stage${d.length===1?"":"s"}`}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsx(be,{appModel:r}),$.map(i=>e.jsx(Te,{finding:i,appModel:r},i.stageId)),e.jsx(pe,{page:D,totalPages:F,onPrev:()=>f(i=>i-1),onNext:()=>f(i=>i+1)})]})})});export{ze as Spill};
@@ -0,0 +1 @@
1
+ import{r as n,j as t}from"./react-vendor-DA6opS-q.js";import{at as P,L as g,W as F,T,n as u,I as y}from"./index-CHjV2-jB.js";import{S as C}from"./StagePill-CYCMdlIx.js";import{W as w}from"./WidgetLeadSummary-DRNRVvn7.js";import{u as E}from"./finding-anchor-4TmpXd7j.js";import{I as M}from"./ImpactEstimate-C6GzFOY9.js";import{c as A}from"./impact-sort-Cq6KOLqh.js";import{u as O,S as W}from"./useSortMode-BOPpfLhJ.js";import{R as b}from"./RowPagination-DypWbnic.js";import{u as D}from"./usePagedRows-CFoZrPr4.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./toggle-group-lbIXRG0W.js";import"./useRecentFiles-BPGQ6XII.js";function L(a){return a.stageId!=null}function _({finding:a}){const r=E([a]);return t.jsxs("li",{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`flex flex-col gap-1 transition-colors ${r.flashClassName}`,children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(C,{stageId:a.stageId}),t.jsx(y,{impactBand:a.impactBand})]}),t.jsxs("p",{className:"text-xs text-muted-foreground",children:["Stage attempt failed outright. Reason: ",t.jsx("strong",{children:String(a.value)})]}),t.jsx(M,{finding:a}),a.recommendation?t.jsx("p",{className:"text-xs text-muted-foreground",children:a.recommendation}):null]})}function ee({appModel:a,catalog:r,defaultCollapsed:p=!0}){const[x,o]=n.useState(0),{sortMode:f,setSortMode:h,orderBy:j}=O(),[d,I]=n.useState(!p),i=P(),l=n.useRef(!1);n.useEffect(()=>{if(!l.current){l.current=!0;return}o(0)},[a]);const s=r.filter(L).filter(e=>e.type==="stageFailed"),S=[...s].sort((e,c)=>g[e.impactBand]-g[c.impactBand]||e.stageId-c.stageId),m=j(S,e=>[e],e=>e.stageId),R=i?m.findIndex(e=>e===i.finding):null,{totalPages:B,effectivePage:v,visible:N}=D(m,x,o,R);return s.length===0?null:t.jsxs(F,{title:"Failed Stages",impactBand:u(s),badges:t.jsxs(t.Fragment,{children:[t.jsx(T,{type:"stageFailed",impactBand:u(s)}),A(s,s.length,d)?t.jsx(W,{mode:f,onChange:e=>{h(e),o(0)}}):null]}),open:d,onOpenChange:I,summary:t.jsx(w,{value:s.length,context:`stage${s.length===1?"":"s"} failed outright`}),children:[t.jsx("ul",{className:"space-y-3",children:N.map(e=>t.jsx(_,{finding:e},e.id))}),t.jsx(b,{page:v,totalPages:B,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})]})}export{ee as StageFailed};
@@ -0,0 +1 @@
1
+ import{j as e,r as l}from"./react-vendor-DA6opS-q.js";import{G as M,v as W,n as y,L as C,at as L,W as O,T as F,E as _,I as D,A as q,q as P}from"./index-CHjV2-jB.js";import{W as z}from"./WidgetLeadSummary-DRNRVvn7.js";import{r as U,R as J}from"./useRecentFiles-BPGQ6XII.js";import{S as K}from"./StageHeader-uDBLHgdg.js";import{u as Q,D as V}from"./DurationHistogram-CviQyPNM.js";import{u as X,R as Y}from"./finding-anchor-4TmpXd7j.js";import{I as Z}from"./ImpactEstimate-C6GzFOY9.js";import{c as ee}from"./impact-sort-Cq6KOLqh.js";import{u as se,S as te}from"./useSortMode-BOPpfLhJ.js";import{R as ae}from"./RowPagination-DypWbnic.js";import{u as ne}from"./usePagedRows-CFoZrPr4.js";import{P as re}from"./PlanExplorer-xYFme_Rx.js";function oe({expanded:s,onClick:a,label:n,location:c,controlsId:m}){const d=c?` for ${c}`:"";return e.jsxs("button",{type:"button","aria-expanded":s,"aria-controls":m,"aria-label":`${s?"Hide":"Show"} ${n.toLowerCase()}${d}`,onClick:a,className:"tap-target-comfortable tap-target-comfortable--sm flex w-fit cursor-pointer items-center gap-1 text-xs font-medium text-primary underline underline-offset-2",children:[n,s?e.jsx(M,{"aria-hidden":"true",className:"size-3.5 shrink-0"}):e.jsx(W,{"aria-hidden":"true",className:"size-3.5 shrink-0"})]})}function ie(s){const[a,n]=l.useState(!1),[c,m]=l.useState(null),[d,x]=l.useState(!1),[p,u]=l.useState(!1),[j,f]=l.useState(!1);return{expanded:a,data:c,loading:d,error:p,toggle:()=>{const r=!a;n(r),r&&s&&!j&&!d&&(x(!0),s().then(k=>m(k)).catch(()=>u(!0)).finally(()=>{f(!0),x(!1)}))}}}function de({group:s,appModel:a,getTaskData:n,idPrefix:c,findingLabel:m}){const{exportMode:d,getTaskData:x}=Q(n),{expanded:p,data:u,error:j,toggle:f}=ie(x?()=>x(s.stageId):void 0),g=X(s.findings),r=a.stages.get(s.stageId),w=_()==="advanced"&&U(s.stageId,a),N=`${c}-stage-${s.stageId}-detail`;return e.jsxs("div",{ref:g.ref,tabIndex:g.tabIndex,"data-flashed":g.dataFlashed,className:`space-y-2 ${Y} transition-colors ${g.flashClassName}`,children:[e.jsx(K,{stageId:s.stageId,appModel:a}),e.jsx("ul",{className:"flex flex-col gap-1.5",children:s.findings.map((o,v)=>e.jsxs("li",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(D,{impactBand:o.impactBand}),e.jsx("span",{children:m(o)}),e.jsx(Z,{finding:o}),e.jsx(q,{children:e.jsx(J,{confidence:o.confidence,validationRequired:o.validationRequired})})]},v))}),r?.taskDurationP50!=null?e.jsxs("p",{className:"text-xs text-muted-foreground",children:["P50 ",P(r.taskDurationP50)," · P95 ",P(r.taskDurationP95)," · Max"," ",P(r.taskDurationMax)]}):null,s.slowHost?e.jsxs("p",{className:"flex items-start gap-2 text-xs",children:[e.jsx(D,{impactBand:s.slowHost.impactBand,className:"mt-1"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Slow host:"})," ",s.slowHost.host," (",s.slowHost.value,"× median,"," ",Math.round((s.slowHost.hostTaskShare??0)*100),"% of tasks)"]})]}):null,s.straggler?e.jsxs("p",{className:"flex items-start gap-2 text-xs",children:[e.jsx(D,{impactBand:s.straggler.impactBand,className:"mt-1"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Stragglers:"})," ",(s.straggler.speculativeTasks??0)>0?`${s.straggler.speculativeTasks} speculative task${s.straggler.speculativeTasks===1?"":"s"}`:`${s.straggler.value}% of tasks > 4× P50`]})]}):null,e.jsx(oe,{expanded:p,onClick:f,label:"Task detail",location:`Stage ${s.stageId}`,controlsId:N}),p?e.jsxs("div",{id:N,className:"space-y-3 pt-1",children:[u?e.jsx(V,{metrics:u.metrics,fieldNames:u.fieldNames,markers:{p50:r?.taskDurationP50,p95:r?.taskDurationP95}}):d?e.jsx("p",{className:"text-xs text-muted-foreground",children:"Task data isn’t included in exported reports."}):j?e.jsx("p",{className:"text-xs text-muted-foreground",children:"Task data unavailable for this stage."}):e.jsx("p",{className:"text-xs text-muted-foreground",children:"Loading task data…"}),w?e.jsx(re,{stageId:s.stageId,appModel:a}):null]}):null]})}const ke=l.memo(function({appModel:a,catalog:n,getTaskData:c,defaultCollapsed:m=!0,type:d,title:x,idPrefix:p,findingLabel:u}){const[j,f]=l.useState(0),{sortMode:g,setSortMode:r,orderBy:k}=se(),[w,N]=l.useState(!m),{relevant:o,stageGroups:v,orderedGroups:T}=l.useMemo(()=>{const i=n.filter(t=>t.type===d),h=new Map;for(const t of i)t.stageId!=null&&(h.has(t.stageId)||h.set(t.stageId,[]),h.get(t.stageId).push(t));const $=[...h.entries()].map(([t,I])=>({stageId:t,findings:I,impactBand:y(I)??"info",slowHost:n.find(S=>S.type==="slowHost"&&S.stageId===t),straggler:n.find(S=>S.type==="straggler"&&S.stageId===t)})).sort((t,I)=>C[t.impactBand]-C[I.impactBand]||t.stageId-I.stageId),A=k($,t=>t.findings,t=>t.stageId);return{relevant:i,stageGroups:$,orderedGroups:A}},[n,g,d]),R=L(),E=R?T.findIndex(i=>i.findings.some(h=>h===R.finding)):null,{totalPages:G,effectivePage:H,visible:b}=ne(T,j,f,E);if(o.length===0)return null;const B=y(o);return e.jsxs(O,{title:x,impactBand:B,badges:e.jsxs(e.Fragment,{children:[e.jsx(F,{type:d,impactBand:B??"info"}),ee(o,v.length,w)?e.jsx(te,{mode:g,onChange:r}):null]}),open:w,onOpenChange:N,summary:e.jsx(z,{value:`${v.length} stage${v.length===1?"":"s"}`,context:`${o.length} finding${o.length===1?"":"s"} flagged`}),children:[e.jsx("div",{className:"space-y-3",children:b.map(i=>e.jsx(de,{group:i,appModel:a,getTaskData:c,idPrefix:p,findingLabel:u},i.stageId))}),e.jsx(ae,{page:H,totalPages:G,onPrev:()=>f(i=>i-1),onNext:()=>f(i=>i+1)})]})});export{ke as S};
@@ -0,0 +1 @@
1
+ import{j as s}from"./react-vendor-DA6opS-q.js";import{S as r}from"./StagePill-CYCMdlIx.js";function i({stageId:e,appModel:t}){const a=t.stages.get(e);return s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsx(r,{stageId:e}),s.jsx("span",{className:"text-sm font-medium",children:a?.name??`Stage ${e}`})]})}export{i as S};
@@ -0,0 +1 @@
1
+ import{j as c,r as x}from"./react-vendor-DA6opS-q.js";import{e as m,av as f,U as S}from"./index-CHjV2-jB.js";const p="inline-flex h-7 shrink-0 cursor-pointer items-center gap-1 rounded-full border border-border bg-background px-2.5 text-xs font-medium whitespace-nowrap outline-none transition-colors hover:bg-muted focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50";function j({stageId:n,className:r}){const{openStage:s}=S();return c.jsxs("button",{type:"button",className:m(p,r),title:`Open details for Stage ${n}`,"aria-label":`Open details for Stage ${n}`,onClick:()=>s(n),children:["S",c.jsx("b",{children:n})]})}const w=30;function M(n,{limit:r=f,chunk:s=w,dataset:t=n}={}){const[a,i]=x.useState({dataset:t,revealed:0}),l=!Object.is(a.dataset,t);l&&i({dataset:t,revealed:0});const o=l?0:a.revealed,d=r+o,g=n.slice(0,d),e=Math.max(0,n.length-d);return{visible:g,remaining:e,revealMore:()=>i(u=>({dataset:t,revealed:(Object.is(u.dataset,t)?u.revealed:0)+s})),revealThrough:u=>i(v=>{const b=Object.is(v.dataset,t)?v.revealed:0,h=Math.max(b,u-r+1);return h>b?{dataset:t,revealed:h}:v})}}function C({pills:n,visibleLimit:r=f,pillOverrideClassName:s}){const t=new Set,a=n.filter(e=>t.has(e.id)?!1:(t.add(e.id),!0)),i=JSON.stringify(a.map(({id:e})=>e)),{visible:l,remaining:o,revealMore:d}=M(a,{limit:r,dataset:i}),g=a.slice(l.length);return c.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[l.map(e=>c.jsx(j,{stageId:e.id,className:s},e.id)),o>0&&c.jsxs("button",{type:"button",className:m(p,"bg-muted",s),title:`Also flagged: Stage ${g.map(e=>e.id).join(", Stage ")}`,"aria-label":`Show ${o} more stage${o===1?"":"s"}`,onClick:d,children:["+",o]})]})}export{j as S,C as a};
@@ -0,0 +1 @@
1
+ import{r as o,j as r}from"./react-vendor-DA6opS-q.js";import{S as i}from"./StageFindingGroup-CoVdEZYs.js";import"./index-CHjV2-jB.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./WidgetLeadSummary-DRNRVvn7.js";import"./useRecentFiles-BPGQ6XII.js";import"./StageHeader-uDBLHgdg.js";import"./StagePill-CYCMdlIx.js";import"./DurationHistogram-CviQyPNM.js";import"./finding-anchor-4TmpXd7j.js";import"./ImpactEstimate-C6GzFOY9.js";import"./impact-sort-Cq6KOLqh.js";import"./useSortMode-BOPpfLhJ.js";import"./toggle-group-lbIXRG0W.js";import"./RowPagination-DypWbnic.js";import"./usePagedRows-CFoZrPr4.js";import"./PlanExplorer-xYFme_Rx.js";const a={lowParallelism:"Low parallelism",dataExplosion:"Data explosion",taskStageSkew:"Task/stage skew"};function p(t){const e=typeof t.rule=="string"?t.rule:void 0;return`${(e&&a[e])??t.metric??"stage shape"}: ${t.value}`}const P=o.memo(function(e){return r.jsx(i,{...e,type:"stageShape",title:"Stage Shape",idPrefix:"stage-shape",findingLabel:p})});export{P as StageShape};
@@ -0,0 +1 @@
1
+ import{r as m,j as t}from"./react-vendor-DA6opS-q.js";import{L as d,at as v,W as y,T as N,I as P}from"./index-CHjV2-jB.js";import{S as T}from"./StageHeader-uDBLHgdg.js";import{W as C}from"./WidgetLeadSummary-DRNRVvn7.js";import{u as b}from"./finding-anchor-4TmpXd7j.js";import{c as M}from"./impact-sort-Cq6KOLqh.js";import{I as A}from"./ImpactEstimate-C6GzFOY9.js";import{u as E,S as O}from"./useSortMode-BOPpfLhJ.js";import{R as W}from"./RowPagination-DypWbnic.js";import{u as $}from"./usePagedRows-CFoZrPr4.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./StagePill-CYCMdlIx.js";import"./toggle-group-lbIXRG0W.js";import"./useRecentFiles-BPGQ6XII.js";function p(s){return`${s.value}m stage duration`}function D({finding:s,appModel:r}){const o=b([s]);return t.jsxs("li",{ref:o.ref,tabIndex:o.tabIndex,"data-flashed":o.dataFlashed,className:`space-y-1 text-sm transition-colors ${o.flashClassName}`,children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsx(P,{impactBand:s.impactBand}),s.stageId!=null?t.jsx(T,{stageId:s.stageId,appModel:r}):null,t.jsx("strong",{children:p(s)})]}),t.jsx(A,{finding:s}),t.jsx("p",{className:"text-muted-foreground pt-1",children:s.recommendation})]})}const Z=m.memo(function({appModel:r,catalog:o,defaultCollapsed:u=!0}){const{sortMode:g,setSortMode:x,orderBy:f}=E(),[i,h]=m.useState(!u),[S,n]=m.useState(0),a=o.filter(e=>e.type==="stageSlowness").slice().sort((e,R)=>d[e.impactBand]-d[R.impactBand]),l=f(a,e=>[e],e=>e.stageId??null),c=v(),j=c?l.findIndex(e=>e===c.finding):null,{totalPages:I,effectivePage:B,visible:w}=$(l,S,n,j);return a.length===0?null:t.jsxs(y,{title:"Slow Stage",impactBand:a[0].impactBand,badges:t.jsxs(t.Fragment,{children:[t.jsx(N,{type:"stageSlowness",impactBand:a[0].impactBand}),M(a,a.length,i)?t.jsx(O,{mode:g,onChange:x}):null]}),open:i,onOpenChange:h,summary:t.jsx(C,{value:p(a[0]),context:`${a.length} issue${a.length===1?"":"s"} flagged`}),children:[t.jsx("ul",{className:"space-y-2",children:w.map(e=>t.jsx(D,{finding:e,appModel:r},e.id))}),t.jsx(W,{page:B,totalPages:I,onPrev:()=>n(e=>e-1),onNext:()=>n(e=>e+1)})]})});export{Z as StageSlowness};
@@ -0,0 +1 @@
1
+ import{r as c,j as e}from"./react-vendor-DA6opS-q.js";import{L as g,at as w,W as C,T as N,I as $,A as x,as as A,ar as P}from"./index-CHjV2-jB.js";import{R as T}from"./useRecentFiles-BPGQ6XII.js";import{S as M}from"./StageHeader-uDBLHgdg.js";import{W as O}from"./WidgetLeadSummary-DRNRVvn7.js";import{u as b}from"./finding-anchor-4TmpXd7j.js";import{I as W}from"./ImpactEstimate-C6GzFOY9.js";import{c as D}from"./impact-sort-Cq6KOLqh.js";import{u as E,S as q}from"./useSortMode-BOPpfLhJ.js";import{R as F}from"./RowPagination-DypWbnic.js";import{u as L}from"./usePagedRows-CFoZrPr4.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./StagePill-CYCMdlIx.js";import"./toggle-group-lbIXRG0W.js";function d(t){const a=A(t);return t.unit==="count"?`${a} speculative attempt${a===1?"":"s"} discarded`:`${P("pct",a)} of tasks straggled`}function V(t){const a=d(t),r=t.recommendation??"",n=r.startsWith(a)?r.slice(a.length):` ${r}`,l=n.indexOf("; ");return l===-1?{primary:n,extended:null}:{primary:n.slice(0,l),extended:n.slice(l+2)}}function _({finding:t,appModel:a}){const r=b([t]),{primary:n,extended:l}=V(t);return e.jsxs("li",{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`space-y-1 text-sm transition-colors ${r.flashClassName}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx($,{impactBand:t.impactBand}),t.stageId!=null?e.jsx(M,{stageId:t.stageId,appModel:a}):null]}),e.jsx(x,{children:e.jsx(T,{confidence:t.confidence,validationRequired:t.validationRequired})})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[d(t),n,l!=null?e.jsx(x,{children:`; ${l}`}):null]}),e.jsx(W,{finding:t})]})}const re=c.memo(function({appModel:a,catalog:r,defaultCollapsed:n=!0}){const{sortMode:l,setSortMode:f,orderBy:h}=E(),[m,j]=c.useState(!n),[S,i]=c.useState(0),o=r.filter(s=>s.type==="straggler").slice().sort((s,B)=>g[s.impactBand]-g[B.impactBand]),u=h(o,s=>[s],s=>s.stageId??null),p=w(),I=p?u.findIndex(s=>s===p.finding):null,{totalPages:R,effectivePage:v,visible:y}=L(u,S,i,I);return o.length===0?null:e.jsxs(C,{title:"Stragglers",impactBand:o[0].impactBand,badges:e.jsxs(e.Fragment,{children:[e.jsx(N,{type:"straggler",impactBand:o[0].impactBand}),D(o,o.length,m)?e.jsx(q,{mode:l,onChange:f}):null]}),open:m,onOpenChange:j,summary:e.jsx(O,{value:d(o[0]),context:`${o.length} issue${o.length===1?"":"s"} flagged`}),children:[e.jsx("ul",{className:"space-y-2",children:y.map(s=>e.jsx(_,{finding:s,appModel:a},s.id))}),e.jsx(F,{page:v,totalPages:R,onPrev:()=>i(s=>s-1),onNext:()=>i(s=>s+1)})]})});export{re as Straggler};
@@ -0,0 +1 @@
1
+ import{r as n,j as t}from"./react-vendor-DA6opS-q.js";import{at as N,L as p,W as P,ar as y,as as C,T as F,n as g,I as M}from"./index-CHjV2-jB.js";import{S as k}from"./StagePill-CYCMdlIx.js";import{W as w}from"./WidgetLeadSummary-DRNRVvn7.js";import{u as E}from"./finding-anchor-4TmpXd7j.js";import{I as A}from"./ImpactEstimate-C6GzFOY9.js";import{c as D}from"./impact-sort-Cq6KOLqh.js";import{u as O,S as W}from"./useSortMode-BOPpfLhJ.js";import{R as b}from"./RowPagination-DypWbnic.js";import{u as $}from"./usePagedRows-CFoZrPr4.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./toggle-group-lbIXRG0W.js";import"./useRecentFiles-BPGQ6XII.js";function L(a){return a.stageId!=null}function V({finding:a}){const r=E([a]);return t.jsxs("li",{ref:r.ref,tabIndex:r.tabIndex,"data-flashed":r.dataFlashed,className:`flex flex-col gap-1 transition-colors ${r.flashClassName}`,children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(k,{stageId:a.stageId}),t.jsx(M,{impactBand:a.impactBand})]}),t.jsxs("p",{className:"text-xs text-muted-foreground",children:["Failure rate: ",t.jsxs("strong",{children:[a.value,"%"]})," (",String(a.failedTasks)," tasks) · Dominant reason: ",t.jsx("strong",{children:a.dominantReason??"—"})]}),t.jsx(A,{finding:a}),a.recommendation?t.jsx("p",{className:"text-xs text-muted-foreground",children:a.recommendation}):null]})}function ae({appModel:a,catalog:r,defaultCollapsed:x=!0}){const[f,o]=n.useState(0),{sortMode:h,setSortMode:j,orderBy:I}=O(),[i,R]=n.useState(!x),l=N(),m=n.useRef(!1);n.useEffect(()=>{if(!m.current){m.current=!0;return}o(0)},[a]);const s=r.filter(L).filter(e=>e.type==="failures"),c=[...s].sort((e,u)=>p[e.impactBand]-p[u.impactBand]||e.stageId-u.stageId),d=I(c,e=>[e],e=>e.stageId),S=l?d.findIndex(e=>e===l.finding):null,{totalPages:T,effectivePage:B,visible:v}=$(d,f,o,S);return s.length===0?null:t.jsxs(P,{title:"Failed Tasks",impactBand:g(s),badges:t.jsxs(t.Fragment,{children:[t.jsx(F,{type:"failures",impactBand:g(s)}),D(s,s.length,i)?t.jsx(W,{mode:h,onChange:e=>{j(e),o(0)}}):null]}),open:i,onOpenChange:R,summary:t.jsx(w,{value:y("pct",C(c[0])),context:`${s.length} item${s.length===1?"":"s"} flagged`}),children:[t.jsx("ul",{className:"space-y-3",children:v.map(e=>t.jsx(V,{finding:e},e.id))}),t.jsx(b,{page:B,totalPages:T,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)})]})}export{ae as TaskFailures};
@@ -0,0 +1 @@
1
+ import{r,j as o}from"./react-vendor-DA6opS-q.js";import{S as m}from"./StageFindingGroup-CoVdEZYs.js";import"./index-CHjV2-jB.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./WidgetLeadSummary-DRNRVvn7.js";import"./useRecentFiles-BPGQ6XII.js";import"./StageHeader-uDBLHgdg.js";import"./StagePill-CYCMdlIx.js";import"./DurationHistogram-CviQyPNM.js";import"./finding-anchor-4TmpXd7j.js";import"./ImpactEstimate-C6GzFOY9.js";import"./impact-sort-Cq6KOLqh.js";import"./useSortMode-BOPpfLhJ.js";import"./toggle-group-lbIXRG0W.js";import"./RowPagination-DypWbnic.js";import"./usePagedRows-CFoZrPr4.js";import"./PlanExplorer-xYFme_Rx.js";function p(t){return`P50 ${t.value}ms across many small tasks`}const b=r.memo(function(i){return o.jsx(m,{...i,type:"tinyTask",title:"Tiny Tasks",idPrefix:"tiny-task",findingLabel:p})});export{b as TinyTask};
@@ -0,0 +1 @@
1
+ import{r,j as e}from"./react-vendor-DA6opS-q.js";import{L as g,at as y,W as C,A as T,T as M,a8 as O,n as u}from"./index-CHjV2-jB.js";import{R as w}from"./useRecentFiles-BPGQ6XII.js";import{I as N}from"./ImpactEstimate-C6GzFOY9.js";import{u as _,R as $}from"./finding-anchor-4TmpXd7j.js";import{a as E}from"./StagePill-CYCMdlIx.js";import{W as L}from"./WidgetLeadSummary-DRNRVvn7.js";import{s as W,c as b}from"./impact-sort-Cq6KOLqh.js";import{u as q,S as F}from"./useSortMode-BOPpfLhJ.js";import{u as U}from"./usePagedRows-CFoZrPr4.js";import{R as D}from"./RowPagination-DypWbnic.js";import"./charts-vendor-Cf1-wzeH.js";import"./plan-graph-vendor-B96a-e4N.js";import"./toggle-group-lbIXRG0W.js";function G({finding:a}){const o=_([a]);return e.jsxs("li",{ref:o.ref,tabIndex:o.tabIndex,"data-flashed":o.dataFlashed,className:`space-y-2 ${$} transition-colors ${o.flashClassName}`,children:[a.stageIds&&a.stageIds.length>0?e.jsx(E,{pills:a.stageIds.map(d=>({id:d}))}):null,e.jsxs("p",{children:[a.recommendation," ",e.jsx(N,{finding:a})]})]})}const oe=r.memo(function({catalog:o,defaultCollapsed:d=!0}){const{sortMode:f,setSortMode:x,orderBy:h}=q(),[l,R]=r.useState(!d),[j,i]=r.useState(0),{findings:t,pills:c}=r.useMemo(()=>{const s=o.filter(n=>n.type==="underBroadcast").sort((n,v)=>g[n.impactBand]-g[v.impactBand]),P=[...new Set(s.flatMap(n=>n.stageIds??[]))].map(n=>({id:n}));return{findings:s,pills:P}},[o]),m=h(t,s=>[s],W),p=y(),S=p?m.findIndex(s=>s===p.finding):null,{totalPages:B,effectivePage:I,visible:A}=U(m,j,i,S);return t.length===0?null:e.jsxs(C,{title:"Missed Broadcast Join",impactBand:u(t),open:l,onOpenChange:R,badges:e.jsxs(e.Fragment,{children:[e.jsx(M,{type:"underBroadcast",impactBand:u(t)??"info",className:O}),b(t,t.length,l)?e.jsx(F,{mode:f,onChange:x}):null]}),statusBadge:e.jsx(T,{children:e.jsx(w,{confidence:t[0].confidence,validationRequired:t[0].validationRequired,evidenceKey:"sqlPlan"})}),summary:e.jsx(L,{value:`${c.length} stage${c.length===1?"":"s"}`,context:`${t.length} finding${t.length===1?"":"s"} flagged`}),children:[e.jsx("ul",{className:"space-y-3 text-sm",children:A.map(s=>e.jsx(G,{finding:s},s.id))}),e.jsx(D,{page:I,totalPages:B,onPrev:()=>i(s=>s-1),onNext:()=>i(s=>s+1)})]})});export{oe as UnderBroadcast};
@@ -0,0 +1 @@
1
+ import{j as e}from"./react-vendor-DA6opS-q.js";function a({value:s,context:t}){return e.jsx("div",{className:"space-y-2",children:e.jsxs("p",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:"line-clamp-2 min-h-[4rem] text-2xl font-semibold tracking-tight",title:typeof s=="string"?s:void 0,children:s}),e.jsx("span",{className:"text-xs text-muted-foreground",children:t})]})})}export{a as W};