sparkforensics-server 0.1.0 → 0.2.2

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 (448) hide show
  1. package/README.md +6 -0
  2. package/index.js +41 -50
  3. package/lib/static-files.js +15 -10
  4. package/package.json +23 -3
  5. package/public/assets/AutoscalingChurn-B96FKx97.js +1 -0
  6. package/public/assets/CacheUtilization-lKua3J1x.js +1 -0
  7. package/public/assets/CachingOpportunity-U0g-8HPV.js +1 -0
  8. package/public/assets/ColdStart-w8QYTNKo.js +1 -0
  9. package/public/assets/ConfigAudit-ClZp5BpV.js +1 -0
  10. package/public/assets/CoreUsageArea-o3kqQwyi.js +1 -0
  11. package/public/assets/Dashboard-Bjl-MYMm.js +1 -0
  12. package/public/assets/DuplicatePlanSubtree-Cm_UU3lY.js +1 -0
  13. package/public/assets/DurationHistogram-ltF-7M0A.js +1 -0
  14. package/public/assets/EmptyState-BCA3xioa.js +1 -0
  15. package/public/assets/ExecutorUtilization-Cn69i0uq.js +1 -0
  16. package/public/assets/GcPressure-CYsmU1d7.js +1 -0
  17. package/public/assets/ImpactEstimate-BGt-4WX5.js +1 -0
  18. package/public/assets/IncompleteRun-s6uQ8OLf.js +1 -0
  19. package/public/assets/JobFailures-DJ2dDvPA.js +1 -0
  20. package/public/assets/MemoryUtilization-C9G7P94X.js +1 -0
  21. package/public/assets/OverBroadcast-DYauoYWQ.js +1 -0
  22. package/public/assets/PartitionSizing-Cz_B0-uG.js +1 -0
  23. package/public/assets/PlanExplorer-_2oB5ouy.js +1 -0
  24. package/public/assets/PlanGraphRoute-Cj-GWM8W.js +1 -0
  25. package/public/assets/RetryWaste-D_m8ASwP.js +1 -0
  26. package/public/assets/RowPagination-BLsm8I6i.js +1 -0
  27. package/public/assets/ShuffleIO-pyDhxdaz.js +1 -0
  28. package/public/assets/Skew-BGLJuZZR.js +1 -0
  29. package/public/assets/SlowHost-ChdWVvGO.js +1 -0
  30. package/public/assets/SmallFiles-gTilBtjW.js +1 -0
  31. package/public/assets/SpeculationWaste-CVzgJnSj.js +1 -0
  32. package/public/assets/Spill-NGJGQaTB.js +1 -0
  33. package/public/assets/StageFailed-sGhki53z.js +1 -0
  34. package/public/assets/StageFindingGroup-AyI7BMd3.js +1 -0
  35. package/public/assets/StageHeader-BTzGkK8k.js +1 -0
  36. package/public/assets/StagePill-BlMOW_pU.js +1 -0
  37. package/public/assets/StageShape-DfOW93Z1.js +1 -0
  38. package/public/assets/StageSlowness-BMZ-K_5e.js +1 -0
  39. package/public/assets/Straggler-dffcAN7t.js +1 -0
  40. package/public/assets/TaskFailures-DGDwUK2A.js +1 -0
  41. package/public/assets/TinyTask-CfT8zZDr.js +1 -0
  42. package/public/assets/UnderBroadcast-CiOiJ0k1.js +1 -0
  43. package/public/assets/WidgetLeadSummary-BdUUi7L5.js +1 -0
  44. package/public/assets/charts-vendor-0VMaLVLN.js +59 -0
  45. package/public/assets/downsample-WmNM1qc9.js +1 -0
  46. package/public/assets/finding-anchor-DEV8JvgH.js +1 -0
  47. package/public/assets/impact-sort-DxaUheWV.js +1 -0
  48. package/public/assets/inbox-_QCYkBsP.js +1 -0
  49. package/public/assets/index-3vlFVNCg.js +9 -0
  50. package/public/assets/index-CjVklAdW.css +2 -0
  51. package/public/assets/parser-worker-B2bc0lWe.js +112 -0
  52. package/public/assets/plan-graph-vendor-B0sEms9Z.js +7 -0
  53. package/public/assets/plan-graph-vendor-DLioOiRN.css +1 -0
  54. package/public/assets/react-vendor-D2TLlSzI.js +9 -0
  55. package/public/assets/rolldown-runtime-hePW80VL.js +1 -0
  56. package/public/assets/select-kuy1MiAo.js +1 -0
  57. package/public/assets/toggle-group-CUd-KWkp.js +1 -0
  58. package/public/assets/usePagedRows-jNUWgVTD.js +1 -0
  59. package/public/assets/useRecentFiles-D0OA_EOK.js +11 -0
  60. package/public/assets/useSortMode-BaeAA5cw.js +1 -0
  61. package/public/docs/404.html +3 -3
  62. package/public/docs/assets/{app.Bxy4_HVA.js → app.APoq_UBs.js} +1 -1
  63. package/public/docs/assets/aqe-loop.IwQSATHw.svg +1 -0
  64. package/public/docs/assets/aqe-loop.dark.DGbaxqJE.svg +1 -0
  65. package/public/docs/assets/broadcast-vs-shuffle.Db4WY1XK.svg +1 -0
  66. package/public/docs/assets/broadcast-vs-shuffle.dark.C7Bxs0mG.svg +1 -0
  67. package/public/docs/assets/cache-lifecycle.dark.B-hS7AgU.svg +1 -0
  68. package/public/docs/assets/cache-lifecycle.rEOVYQNU.svg +1 -0
  69. package/public/docs/assets/chunks/@localSearchIndexroot.CvM5fuxe.js +1 -0
  70. package/public/docs/assets/chunks/{VPLocalSearchBox.L5jNOIR3.js → VPLocalSearchBox.B3TPzlHq.js} +1 -1
  71. package/public/docs/assets/chunks/duplicate-plan-subtree.dark.Cdp70QhV.js +1 -0
  72. package/public/docs/assets/chunks/{framework.CNDaxUod.js → framework.DSg0KOwT.js} +1 -1
  73. package/public/docs/assets/chunks/retry-escalation-ladder.dark.DHipdJgZ.js +1 -0
  74. package/public/docs/assets/chunks/theme.PavXO_vz.js +2 -0
  75. package/public/docs/assets/cold-start-timeline.DxC_Sc7w.svg +1 -0
  76. package/public/docs/assets/cold-start-timeline.dark.CZ17YcAG.svg +1 -0
  77. package/public/docs/assets/columnar-layout.PghGeOEA.svg +1 -0
  78. package/public/docs/assets/columnar-layout.dark.BVNlz0ff.svg +1 -0
  79. package/public/docs/assets/container-memory.DIO0AnIm.svg +1 -0
  80. package/public/docs/assets/container-memory.dark.CP-5zuCl.svg +1 -0
  81. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CWpj01WU.js +1 -0
  82. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CWpj01WU.lean.js +1 -0
  83. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CgzUsQ6W.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CgzUsQ6W.lean.js +1 -0
  85. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.js +1 -0
  86. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.lean.js +1 -0
  87. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.js → contributor-guide_architecture_impact-estimation.md.CooslVJt.js} +1 -1
  88. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.lean.js → contributor-guide_architecture_impact-estimation.md.CooslVJt.lean.js} +1 -1
  89. package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.js → contributor-guide_architecture_index.md.3TO9ic6w.js} +1 -1
  90. package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.lean.js → contributor-guide_architecture_index.md.3TO9ic6w.lean.js} +1 -1
  91. package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.js → contributor-guide_architecture_overview.md.CehiRmGn.js} +1 -1
  92. package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.lean.js → contributor-guide_architecture_overview.md.CehiRmGn.lean.js} +1 -1
  93. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.js +1 -0
  94. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.lean.js +1 -0
  95. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.R27gQrgY.js +1 -0
  96. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.R27gQrgY.lean.js +1 -0
  97. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.js → contributor-guide_architecture_worker-protocol.md.IbnfNrV3.js} +2 -2
  98. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.lean.js → contributor-guide_architecture_worker-protocol.md.IbnfNrV3.lean.js} +1 -1
  99. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.js +1 -0
  100. package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.lean.js +1 -0
  101. package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.js → contributor-guide_development-setup.md.DvAN_9mK.js} +1 -1
  102. package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.lean.js → contributor-guide_development-setup.md.DvAN_9mK.lean.js} +1 -1
  103. package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.js → contributor-guide_testing.md.6rIKqSyY.js} +1 -1
  104. package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.lean.js → contributor-guide_testing.md.6rIKqSyY.lean.js} +1 -1
  105. package/public/docs/assets/dag-stages.DSz_S937.svg +1 -0
  106. package/public/docs/assets/dag-stages.dark.F72UzxH4.svg +1 -0
  107. package/public/docs/assets/driver-executor.D5pQ7YN1.svg +1 -0
  108. package/public/docs/assets/driver-executor.dark.BmX9cPvh.svg +1 -0
  109. package/public/docs/assets/duplicate-plan-subtree.B4cvN6fj.svg +1 -0
  110. package/public/docs/assets/duplicate-plan-subtree.dark.Dw8wS0Ag.svg +1 -0
  111. package/public/docs/assets/{index.md.CETnDZzR.js → index.md.CHJVslga.js} +1 -1
  112. package/public/docs/assets/{index.md.CETnDZzR.lean.js → index.md.CHJVslga.lean.js} +1 -1
  113. package/public/docs/assets/join-strategy.C_FvrCEo.svg +1 -0
  114. package/public/docs/assets/join-strategy.dark.ChMLnNII.svg +1 -0
  115. package/public/docs/assets/memory-borrowing.BqQRJg0u.svg +1 -0
  116. package/public/docs/assets/memory-borrowing.dark.Yhh20O9C.svg +1 -0
  117. package/public/docs/assets/memory-regions.XHvO7jHG.svg +1 -0
  118. package/public/docs/assets/memory-regions.dark.D4TP9_08.svg +1 -0
  119. package/public/docs/assets/repartition-vs-coalesce.BovLRrpj.svg +1 -0
  120. package/public/docs/assets/repartition-vs-coalesce.dark.BhAczKZQ.svg +1 -0
  121. package/public/docs/assets/retry-escalation-ladder.DyTKJJmZ.svg +1 -0
  122. package/public/docs/assets/retry-escalation-ladder.dark.BdsabtU3.svg +1 -0
  123. package/public/docs/assets/shuffle-map-reduce.KuOEZVmg.svg +1 -0
  124. package/public/docs/assets/shuffle-map-reduce.dark.BgQZnFSb.svg +1 -0
  125. package/public/docs/assets/spill-classification.BU2euYDO.svg +1 -0
  126. package/public/docs/assets/spill-classification.dark.D7i1M40d.svg +1 -0
  127. package/public/docs/assets/{style.D2mY0HUs.css → style.DSixAiZE.css} +1 -1
  128. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +1 -0
  129. package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +1 -0
  130. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +1 -0
  131. package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +1 -0
  132. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +1 -0
  133. package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +1 -0
  134. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +7 -0
  135. package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +1 -0
  136. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +1 -0
  137. package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +1 -0
  138. package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.js +6 -0
  139. package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.lean.js +1 -0
  140. package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.js +6 -0
  141. package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.lean.js +1 -0
  142. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +8 -0
  143. package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +1 -0
  144. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +7 -0
  145. package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +1 -0
  146. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +1 -0
  147. package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +1 -0
  148. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.js +12 -0
  149. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.lean.js +1 -0
  150. package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.js +14 -0
  151. package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.lean.js +1 -0
  152. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js +7 -0
  153. package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +1 -0
  154. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.js +5 -0
  155. package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.lean.js +1 -0
  156. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +6 -0
  157. package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +1 -0
  158. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.js +7 -0
  159. package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.lean.js +1 -0
  160. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.js +8 -0
  161. package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.lean.js +1 -0
  162. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.js +5 -0
  163. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.lean.js +1 -0
  164. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +1 -0
  165. package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +1 -0
  166. package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.js +1 -0
  167. package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.lean.js +1 -0
  168. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +1 -0
  169. package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +1 -0
  170. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +1 -0
  171. package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +1 -0
  172. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +1 -0
  173. package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +1 -0
  174. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +1 -0
  175. package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +1 -0
  176. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +1 -0
  177. package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +1 -0
  178. package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.js +1 -0
  179. package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.lean.js +1 -0
  180. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +1 -0
  181. package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +1 -0
  182. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +1 -0
  183. package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +1 -0
  184. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +6 -0
  185. package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +1 -0
  186. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +1 -0
  187. package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +1 -0
  188. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +1 -0
  189. package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +1 -0
  190. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +1 -0
  191. package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +1 -0
  192. package/public/docs/assets/udf-execution-models.BUFDICuG.svg +1 -0
  193. package/public/docs/assets/udf-execution-models.dark.YTNS6GDq.svg +1 -0
  194. package/public/docs/assets/user-guide_alternative-log-retrieval.md.B4tPGIal.js +1 -0
  195. package/public/docs/assets/user-guide_alternative-log-retrieval.md.B4tPGIal.lean.js +1 -0
  196. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.js +3 -0
  197. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.lean.js +1 -0
  198. package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.js → user-guide_mcp-tools.md.Vi3RoflJ.js} +35 -5
  199. package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.lean.js → user-guide_mcp-tools.md.Vi3RoflJ.lean.js} +1 -1
  200. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +1 -0
  201. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +1 -0
  202. package/public/docs/assets/user-guide_understanding-findings.md.DL1UDhvR.js +1 -0
  203. package/public/docs/assets/user-guide_understanding-findings.md.DL1UDhvR.lean.js +1 -0
  204. package/public/docs/contributor-guide/architecture/board-widgets.html +7 -7
  205. package/public/docs/contributor-guide/architecture/detector-contract.html +7 -7
  206. package/public/docs/contributor-guide/architecture/drill-down.html +7 -7
  207. package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -7
  208. package/public/docs/contributor-guide/architecture/index.html +7 -7
  209. package/public/docs/contributor-guide/architecture/overview.html +7 -7
  210. package/public/docs/contributor-guide/architecture/state-and-history.html +7 -7
  211. package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -7
  212. package/public/docs/contributor-guide/architecture/worker-protocol.html +8 -8
  213. package/public/docs/contributor-guide/contributing.html +7 -7
  214. package/public/docs/contributor-guide/development-setup.html +7 -7
  215. package/public/docs/contributor-guide/testing.html +7 -7
  216. package/public/docs/hashmap.json +1 -1
  217. package/public/docs/index.html +7 -7
  218. package/public/docs/tuning-reference/anti-patterns.html +29 -0
  219. package/public/docs/tuning-reference/aqe.html +29 -0
  220. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +29 -0
  221. package/public/docs/tuning-reference/bottleneck-cold-start.html +35 -0
  222. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +30 -0
  223. package/public/docs/tuning-reference/bottleneck-failures.html +35 -0
  224. package/public/docs/tuning-reference/bottleneck-gc.html +34 -0
  225. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +37 -0
  226. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +35 -0
  227. package/public/docs/tuning-reference/bottleneck-retry-waste.html +30 -0
  228. package/public/docs/tuning-reference/bottleneck-shuffle.html +40 -0
  229. package/public/docs/tuning-reference/bottleneck-skew.html +42 -0
  230. package/public/docs/tuning-reference/bottleneck-slow-host.html +35 -0
  231. package/public/docs/tuning-reference/bottleneck-small-files.html +33 -0
  232. package/public/docs/tuning-reference/bottleneck-spill.html +34 -0
  233. package/public/docs/tuning-reference/bottleneck-straggler.html +35 -0
  234. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +36 -0
  235. package/public/docs/tuning-reference/bottleneck-utilization.html +34 -0
  236. package/public/docs/tuning-reference/caching.html +29 -0
  237. package/public/docs/tuning-reference/cluster-config.html +29 -0
  238. package/public/docs/tuning-reference/config.html +29 -0
  239. package/public/docs/tuning-reference/data-formats.html +29 -0
  240. package/public/docs/tuning-reference/index.html +29 -0
  241. package/public/docs/tuning-reference/intro.html +29 -0
  242. package/public/docs/tuning-reference/joins.html +29 -0
  243. package/public/docs/tuning-reference/memory-model.html +29 -0
  244. package/public/docs/tuning-reference/metrics.html +29 -0
  245. package/public/docs/tuning-reference/partitioning.html +29 -0
  246. package/public/docs/tuning-reference/pyspark.html +34 -0
  247. package/public/docs/tuning-reference/shuffle.html +29 -0
  248. package/public/docs/tuning-reference/spark-architecture.html +29 -0
  249. package/public/docs/tuning-reference/table-formats.html +29 -0
  250. package/public/docs/user-guide/alternative-log-retrieval.html +29 -0
  251. package/public/docs/user-guide/getting-started.html +8 -8
  252. package/public/docs/user-guide/mcp-tools.html +41 -11
  253. package/public/docs/user-guide/run-comparison.html +7 -7
  254. package/public/docs/user-guide/understanding-findings.html +7 -7
  255. package/public/index.html +8 -7
  256. package/public/sample-runs/sample-run.ndjson.gz +0 -0
  257. package/vendor-core/analyzer.js +74 -74
  258. package/vendor-core/cli/budgets.js +13 -27
  259. package/vendor-core/cli/collect-run.js +43 -19
  260. package/vendor-core/core-count.js +25 -27
  261. package/vendor-core/core-locality-ratio.js +4 -11
  262. package/vendor-core/core-time-series.js +6 -12
  263. package/vendor-core/core-usage-locality.js +3 -4
  264. package/vendor-core/detectors.js +395 -389
  265. package/vendor-core/docs-config.js +69 -21
  266. package/vendor-core/docs-content/chapters/01-intro.md +32 -0
  267. package/vendor-core/docs-content/chapters/02-spark-architecture.md +76 -0
  268. package/vendor-core/docs-content/chapters/03-memory-model.md +73 -0
  269. package/vendor-core/docs-content/chapters/04-partitioning.md +65 -0
  270. package/vendor-core/docs-content/chapters/05-joins.md +62 -0
  271. package/vendor-core/docs-content/chapters/06-shuffle.md +59 -0
  272. package/vendor-core/docs-content/chapters/07-data-formats.md +81 -0
  273. package/vendor-core/docs-content/chapters/07b-table-formats.md +56 -0
  274. package/vendor-core/docs-content/chapters/08-caching.md +58 -0
  275. package/vendor-core/docs-content/chapters/09-pyspark.md +78 -0
  276. package/vendor-core/docs-content/chapters/10-aqe.md +167 -0
  277. package/vendor-core/docs-content/chapters/11-cluster-config.md +170 -0
  278. package/vendor-core/docs-content/chapters/12-anti-patterns.md +171 -0
  279. package/vendor-core/docs-content/chapters/14-metrics.md +87 -0
  280. package/vendor-core/docs-content/chapters/15-config.md +93 -0
  281. package/vendor-core/docs-content/chapters/nav-index.json +370 -0
  282. package/vendor-core/docs-content/detection/cache.md +7 -0
  283. package/vendor-core/docs-content/detection/cfg.md +15 -0
  284. package/vendor-core/docs-content/detection/chrn.md +9 -0
  285. package/vendor-core/docs-content/detection/cold.md +4 -0
  286. package/vendor-core/docs-content/detection/cstor.md +4 -0
  287. package/vendor-core/docs-content/detection/fail.md +5 -0
  288. package/vendor-core/docs-content/detection/gc.md +4 -0
  289. package/vendor-core/docs-content/detection/host.md +5 -0
  290. package/vendor-core/docs-content/detection/incmp.md +6 -0
  291. package/vendor-core/docs-content/detection/jobs.md +4 -0
  292. package/vendor-core/docs-content/detection/local.md +6 -0
  293. package/vendor-core/docs-content/detection/mem.md +10 -0
  294. package/vendor-core/docs-content/detection/part.md +5 -0
  295. package/vendor-core/docs-content/detection/plan.md +14 -0
  296. package/vendor-core/docs-content/detection/retry.md +4 -0
  297. package/vendor-core/docs-content/detection/sfail.md +5 -0
  298. package/vendor-core/docs-content/detection/shape.md +5 -0
  299. package/vendor-core/docs-content/detection/shfl.md +4 -0
  300. package/vendor-core/docs-content/detection/skew.md +6 -0
  301. package/vendor-core/docs-content/detection/slow.md +6 -0
  302. package/vendor-core/docs-content/detection/spec.md +8 -0
  303. package/vendor-core/docs-content/detection/spill.md +7 -0
  304. package/vendor-core/docs-content/detection/strag.md +5 -0
  305. package/vendor-core/docs-content/detection/tiny.md +4 -0
  306. package/vendor-core/docs-content/detection/util.md +4 -0
  307. package/vendor-core/docs-content/diagrams/aqe-loop.dark.svg +1 -0
  308. package/vendor-core/docs-content/diagrams/aqe-loop.svg +1 -0
  309. package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.dark.svg +1 -0
  310. package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.svg +1 -0
  311. package/vendor-core/docs-content/diagrams/cache-lifecycle.dark.svg +1 -0
  312. package/vendor-core/docs-content/diagrams/cache-lifecycle.svg +1 -0
  313. package/vendor-core/docs-content/diagrams/cold-start-timeline.dark.svg +1 -0
  314. package/vendor-core/docs-content/diagrams/cold-start-timeline.svg +1 -0
  315. package/vendor-core/docs-content/diagrams/columnar-layout.dark.svg +1 -0
  316. package/vendor-core/docs-content/diagrams/columnar-layout.svg +1 -0
  317. package/vendor-core/docs-content/diagrams/container-memory.dark.svg +1 -0
  318. package/vendor-core/docs-content/diagrams/container-memory.svg +1 -0
  319. package/vendor-core/docs-content/diagrams/dag-stages.dark.svg +1 -0
  320. package/vendor-core/docs-content/diagrams/dag-stages.svg +1 -0
  321. package/vendor-core/docs-content/diagrams/driver-executor.dark.svg +1 -0
  322. package/vendor-core/docs-content/diagrams/driver-executor.svg +1 -0
  323. package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.dark.svg +1 -0
  324. package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.svg +1 -0
  325. package/vendor-core/docs-content/diagrams/join-strategy.dark.svg +1 -0
  326. package/vendor-core/docs-content/diagrams/join-strategy.svg +1 -0
  327. package/vendor-core/docs-content/diagrams/memory-borrowing.dark.svg +1 -0
  328. package/vendor-core/docs-content/diagrams/memory-borrowing.svg +1 -0
  329. package/vendor-core/docs-content/diagrams/memory-regions.dark.svg +1 -0
  330. package/vendor-core/docs-content/diagrams/memory-regions.svg +1 -0
  331. package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.dark.svg +1 -0
  332. package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.svg +1 -0
  333. package/vendor-core/docs-content/diagrams/retry-escalation-ladder.dark.svg +1 -0
  334. package/vendor-core/docs-content/diagrams/retry-escalation-ladder.svg +1 -0
  335. package/vendor-core/docs-content/diagrams/shuffle-map-reduce.dark.svg +1 -0
  336. package/vendor-core/docs-content/diagrams/shuffle-map-reduce.svg +1 -0
  337. package/vendor-core/docs-content/diagrams/spill-classification.dark.svg +1 -0
  338. package/vendor-core/docs-content/diagrams/spill-classification.svg +1 -0
  339. package/vendor-core/docs-content/diagrams/udf-execution-models.dark.svg +1 -0
  340. package/vendor-core/docs-content/diagrams/udf-execution-models.svg +1 -0
  341. package/vendor-core/docs-content/tuning/broadcast-sizing.md +78 -0
  342. package/vendor-core/docs-content/tuning/cold-start.md +81 -0
  343. package/vendor-core/docs-content/tuning/duplicate-plan-subtree.md +45 -0
  344. package/vendor-core/docs-content/tuning/failures.md +124 -0
  345. package/vendor-core/docs-content/tuning/gc.md +110 -0
  346. package/vendor-core/docs-content/tuning/job-failure-rate.md +101 -0
  347. package/vendor-core/docs-content/tuning/memory-utilization.md +58 -0
  348. package/vendor-core/docs-content/tuning/retry-waste.md +90 -0
  349. package/vendor-core/docs-content/tuning/shuffle.md +154 -0
  350. package/vendor-core/docs-content/tuning/skew.md +123 -0
  351. package/vendor-core/docs-content/tuning/slow-host.md +117 -0
  352. package/vendor-core/docs-content/tuning/small-files.md +99 -0
  353. package/vendor-core/docs-content/tuning/spill.md +114 -0
  354. package/vendor-core/docs-content/tuning/straggler.md +103 -0
  355. package/vendor-core/docs-content/tuning/tiny-tasks.md +94 -0
  356. package/vendor-core/docs-content/tuning/utilization.md +90 -0
  357. package/vendor-core/docs-site-config.js +10 -17
  358. package/vendor-core/efficiency-model.js +7 -13
  359. package/vendor-core/etl-phases.js +3 -5
  360. package/vendor-core/event-handlers.js +232 -134
  361. package/vendor-core/event-schemas.js +48 -114
  362. package/vendor-core/evidence-availability.js +5 -10
  363. package/vendor-core/evidence-report.js +73 -123
  364. package/vendor-core/export-data.js +48 -0
  365. package/vendor-core/finding-action-label.js +4 -10
  366. package/vendor-core/finding-filter-predicate.js +3 -7
  367. package/vendor-core/finding-generic-recommendation.js +112 -0
  368. package/vendor-core/finding-names.js +51 -0
  369. package/vendor-core/format-utils.js +112 -38
  370. package/vendor-core/impact-band.js +18 -24
  371. package/vendor-core/impact-estimator.js +38 -74
  372. package/vendor-core/ingest.js +7 -13
  373. package/vendor-core/job-groups.js +3 -6
  374. package/vendor-core/list-runs.js +278 -0
  375. package/vendor-core/load-vendored.js +6 -12
  376. package/vendor-core/log-header-peek.js +81 -0
  377. package/vendor-core/lz4-block.js +4 -6
  378. package/vendor-core/mcp-server-factory.js +38 -8
  379. package/vendor-core/mcp-tools.js +105 -76
  380. package/vendor-core/model-assembler.js +8 -16
  381. package/vendor-core/occupancy.js +5 -9
  382. package/vendor-core/parser-worker.js +20 -29
  383. package/vendor-core/plan-dot.js +2 -5
  384. package/vendor-core/plan-duration-attribution.js +78 -29
  385. package/vendor-core/plan-graph-model.js +126 -69
  386. package/vendor-core/plan-node-detail.js +31 -17
  387. package/vendor-core/plan-summary.js +19 -8
  388. package/vendor-core/recommendation-rollup.js +35 -39
  389. package/vendor-core/redact.js +72 -16
  390. package/vendor-core/rolling-log-reassembly.js +4 -6
  391. package/vendor-core/run-comparison.js +86 -72
  392. package/vendor-core/scaling-sim.js +5 -7
  393. package/vendor-core/session-snapshot.js +1 -1
  394. package/vendor-core/shs-fetch.js +4 -6
  395. package/vendor-core/shs-load.js +9 -13
  396. package/vendor-core/shs-request.js +1 -1
  397. package/vendor-core/stage-quantiles.js +14 -0
  398. package/vendor-core/types.js +78 -18
  399. package/vendor-core/wasted-core-hours.js +7 -12
  400. package/public/assets/AutoscalingChurn-CP5OjN6v.js +0 -1
  401. package/public/assets/CacheUtilization-BjyawXL6.js +0 -1
  402. package/public/assets/CachingOpportunity-DV2ABG2G.js +0 -1
  403. package/public/assets/ConfigAudit-DMiBhAoG.js +0 -1
  404. package/public/assets/CoreUsageArea-CGYIgPnt.js +0 -1
  405. package/public/assets/Dashboard-D1_IrWRs.js +0 -12
  406. package/public/assets/ExecutorTimeline-DkaAGqQT.js +0 -1
  407. package/public/assets/Failures-Crngoicu.js +0 -1
  408. package/public/assets/GcPressure-CFXm4BnA.js +0 -1
  409. package/public/assets/IncompleteRun-BWEJTb13.js +0 -1
  410. package/public/assets/JobFailures-BmjxCA-h.js +0 -1
  411. package/public/assets/MemoryUtilization-Bu2uQJbd.js +0 -1
  412. package/public/assets/PlanExplorer-DKUwF0uz.js +0 -1
  413. package/public/assets/PlanGraphRoute-BjPSugIG.js +0 -1
  414. package/public/assets/ShuffleIO--Rur3neu.js +0 -1
  415. package/public/assets/Spill-DIMpt8c2.js +0 -1
  416. package/public/assets/TaskSkew-BDr1DbeI.js +0 -1
  417. package/public/assets/charts-vendor-NMqKV0H4.js +0 -59
  418. package/public/assets/index-4id52G-A.js +0 -9
  419. package/public/assets/index-D9kwVYIO.css +0 -1
  420. package/public/assets/parser-worker-00O9WEQC.js +0 -65
  421. package/public/assets/plan-graph-vendor-BnuhLJ6X.css +0 -1
  422. package/public/assets/plan-graph-vendor-vZQHG2EJ.js +0 -7
  423. package/public/assets/react-vendor-u4pyvC5Y.js +0 -9
  424. package/public/assets/useRecentFiles-46iBU9zJ.js +0 -5
  425. package/public/docs/assets/chunks/@localSearchIndexroot.DclgKtlT.js +0 -1
  426. package/public/docs/assets/chunks/theme.CoT6y5bf.js +0 -2
  427. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.js +0 -1
  428. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.lean.js +0 -1
  429. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.js +0 -1
  430. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.lean.js +0 -1
  431. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.js +0 -1
  432. package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.lean.js +0 -1
  433. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.js +0 -1
  434. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.lean.js +0 -1
  435. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.js +0 -1
  436. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.lean.js +0 -1
  437. package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.js +0 -1
  438. package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.lean.js +0 -1
  439. package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.js +0 -3
  440. package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.lean.js +0 -1
  441. package/public/docs/assets/user-guide_run-comparison.md.5-oaOfTu.js +0 -1
  442. package/public/docs/assets/user-guide_run-comparison.md.5-oaOfTu.lean.js +0 -1
  443. package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.js +0 -1
  444. package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.lean.js +0 -1
  445. package/public/vendor/spark-doc/anchors.json +0 -205
  446. package/public/vendor/spark-doc/index.html +0 -4202
  447. package/public/vendor/spark-doc/landing.html +0 -418
  448. package/public/vendor/spark-doc/meta.html +0 -970
@@ -88,15 +88,24 @@
88
88
 
89
89
 
90
90
 
91
+
92
+
93
+
94
+
95
+
91
96
 
92
97
 
93
98
 
94
99
 
95
100
 
101
+
102
+
103
+
104
+
96
105
 
97
106
 
98
107
 
99
-
108
+
100
109
 
101
110
 
102
111
 
@@ -111,14 +120,63 @@
111
120
 
112
121
 
113
122
 
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
114
153
 
154
+
155
+
156
+
157
+
158
+
159
+
115
160
 
161
+
162
+
163
+
164
+
165
+
166
+
167
+
116
168
 
117
169
 
118
170
 
119
171
 
120
172
 
121
173
 
174
+
175
+
176
+
177
+
178
+
179
+
122
180
 
123
181
 
124
182
 
@@ -142,6 +200,11 @@
142
200
 
143
201
 
144
202
 
203
+ /** Whether the plan-graph heat bar shows a node's own wall-time share
204
+ * ('exclusive') or that share plus every descendant's, within the same
205
+ * Exchange-bounded segment ('inclusive'). */
206
+
207
+
145
208
 
146
209
 
147
210
 
@@ -215,29 +278,21 @@
215
278
 
216
279
 
217
280
 
218
-
219
-
220
-
221
-
222
281
 
223
-
224
-
225
-
226
-
227
-
228
-
282
+
283
+
284
+
285
+
286
+
229
287
 
230
288
 
231
289
 
232
290
 
233
-
291
+
234
292
 
235
-
236
-
237
-
238
-
239
-
240
-
293
+
294
+
295
+
241
296
 
242
297
 
243
298
 
@@ -254,6 +309,11 @@
254
309
 
255
310
 
256
311
 
312
+
313
+
314
+
315
+
316
+
257
317
 
258
318
 
259
319
 
@@ -1,7 +1,6 @@
1
- // Wasted core-hours summary (ELV-023). Pure, worker-agnostic reducer over the
2
- // same inputs the memoryUtilization detector's idle-cores math uses
3
- // (src/detectors.js ~608-619): capacity core-time vs. core-time that actually
4
- // ran tasks. No new detector, no new tag: this only feeds a report widget.
1
+ // Wasted core-hours summary. Pure, worker-agnostic reducer over the same inputs
2
+ // the memoryUtilization detector's idle-cores math uses: capacity core-time vs.
3
+ // core-time that actually ran tasks. Feeds a report widget only, no detector.
5
4
 
6
5
  import { computeTotalCores } from './core-count.js';
7
6
 
@@ -29,14 +28,10 @@ const EMPTY = {
29
28
 
30
29
 
31
30
 
32
- // `app` and `runAggregates` are typed nullable (beyond the brief's bare
33
- // signature) because real callers do pass null here (see
34
- // tests/wasted-core-hours.test.js and the WastedCoreHours widget, where
35
- // appModel.app is SparkAppInfo | null before parsing completes); the
36
- // optional-chaining/`!runAggregates` guard below already tolerated this at
37
- // runtime. `resources` is likewise added to app's shape (not in the brief's
38
- // signature) so the pass-through to computeTotalCores type-checks; real app
39
- // objects always carry it alongside startTime/endTime.
31
+ // `app`/`runAggregates` are nullable because real callers pass null (app is
32
+ // SparkAppInfo | null before parsing completes), which the guard below already
33
+ // tolerates. `resources` is on app's shape so the computeTotalCores pass-through
34
+ // type-checks; real app objects always carry it.
40
35
  export function computeWastedCoreHours(
41
36
  app ,
42
37
  executorsAdded = [],
@@ -1 +0,0 @@
1
- import{r as C,j as e}from"./react-vendor-u4pyvC5Y.js";import{W as k,q as S,T as y,D as A,aw as T,a0 as w,az as N,I as R}from"./index-4id52G-A.js";import{d as I,C as L,a as g}from"./Dashboard-D1_IrWRs.js";import{i as K,C as $,X as z,Y as F,T as _,k as D,B as b,l as G}from"./charts-vendor-NMqKV0H4.js";import"./plan-graph-vendor-vZQHG2EJ.js";import"./useRecentFiles-46iBU9zJ.js";const H=60,O=6e4,Y=220;function U(t,s,a,c,r){if(t.length===0&&s.length===0)return[];const l=Math.max(r,c-a),x=Math.max(1,Math.ceil(l/r)),i=[];for(let n=0;n<x;n++)i.push({tStart:a+n*r,adds:0,removes:0});const u=n=>Math.min(x-1,Math.max(0,Math.floor((n-a)/r)));for(const n of t)i[u(n.timestamp)].adds++;for(const n of s)i[u(n.timestamp)].removes++;return i}function X(t,s){const a=Math.max(1,s-t);return Math.max(O,Math.ceil(a/H))}function q(t){if(t<=0)return 1;const a=10**Math.floor(Math.log10(t)),c=t/a;return(c<=1?1:c<=2?2:c<=5?5:10)*a}function P(t){const s=t.reduce((c,r)=>Math.max(c,Math.abs(r.added),Math.abs(r.removed)),0),a=q(s);return{domain:[-a,a],ticks:[-a,-a/2,0,a/2,a]}}function B(t){return Math.abs(t.height)<1?null:e.jsx(G,{...t})}function W({finding:t}){const{expanded:s,toggle:a}=T();return e.jsxs("div",{className:"flex flex-col gap-1 transition-colors",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Short-lived executors: ",e.jsxs("strong",{children:[t.value,"%"]})]}),e.jsx(w,{finding:t}),e.jsx(N,{expanded:s,onClick:a,label:"autoscaling churn"}),s?e.jsxs("p",{className:"flex flex-wrap items-start gap-2 text-sm",children:[e.jsx(R,{impactBand:t.impactBand,className:"mt-1.5"}),e.jsx("span",{children:t.recommendation})]}):null]})}const se=C.memo(function({appModel:s,activeFileId:a,catalog:c=[],defaultCollapsed:r=!0}){const l=C.useMemo(()=>{const o=s.executors.added,m=s.executors.removed;if(o.length===0&&m.length===0)return{hasEvents:!1,added:o,removed:m};const f=s.app,h=f?.startTime??0,v=f?.endTime??h,E=X(h,v),j=I(U(o,m,h,v,E)).map(p=>({t:`${Math.round((p.tStart-h)/1e3)}s`,added:p.adds,removed:-p.removes})),M=P(j);return{hasEvents:!0,added:o,removed:m,rows:j,yAxisScale:M}},[s,a]);if(!l.hasEvents)return e.jsx(k,{title:"Autoscaling Churn",summary:e.jsx("span",{className:"text-muted-foreground text-xs",children:"No executor add/remove events (static allocation)."}),children:e.jsx("p",{className:"text-muted-foreground text-xs",children:"No executor add/remove events (static allocation)."})});const{added:x,removed:i,rows:u,yAxisScale:n}=l,d=c.find(o=>o.type==="autoscalingChurn");return e.jsx(k,{title:"Autoscaling Churn",impactBand:d?.impactBand,badges:e.jsxs(e.Fragment,{children:[d&&e.jsx(y,{type:"autoscalingChurn",impactBand:d.impactBand}),e.jsx(A,{anchor:"#config-autoscale-bounds",children:"Learn more →"})]}),defaultCollapsed:r,summary:e.jsx(S,{value:`${x.length} added / ${i.length} removed`,context:d?`${d.value}% short-lived executors — ${d.impactBand}`:"executor churn events"}),children:e.jsxs("div",{className:"space-y-2",children:[d&&e.jsx(W,{finding:d}),e.jsx("p",{className:"text-muted-foreground text-xs",children:"executors added / removed over time"}),e.jsx(L,{ariaLabel:"Executor added and removed counts per time bucket over the run.",height:Y,table:{caption:"Executor added/removed counts by time bucket",columns:["Time","Executors added","Executors removed"],rows:u.map(o=>[o.t,o.added,Math.abs(o.removed)]),align:["right","right","right"]},children:e.jsxs(K,{data:u,children:[e.jsx($,{stroke:g.muted,strokeOpacity:.2}),e.jsx(z,{dataKey:"t",tick:{fontSize:10}}),e.jsx(F,{tick:{fontSize:10},width:32,domain:n.domain,ticks:n.ticks}),e.jsx(_,{formatter:(o,m)=>[Math.abs(Number(o)),m]}),e.jsx(D,{wrapperStyle:{fontSize:10}}),e.jsx(b,{dataKey:"added",name:"Added",stackId:"churn",fill:g.clean,shape:B}),e.jsx(b,{dataKey:"removed",name:"Removed",stackId:"churn",fill:g.muted,shape:B})]})})]})})});export{se as AutoscalingChurn,U as bucketChurn};
@@ -1 +0,0 @@
1
- import{r as l,j as s}from"./react-vendor-u4pyvC5Y.js";import{K as y,at as v,as as k,W as z,j as M,l as F,m as P,n as d,o as L,p as m,T as E,J as b,Z as f,R as w,q as A,D as U,U as _,ax as $,ay as H,aw as W,I as O,a0 as q,az as G,aA as J}from"./index-4id52G-A.js";import"./charts-vendor-NMqKV0H4.js";import"./plan-graph-vendor-vZQHG2EJ.js";const S=70;function K(a){if(!a)return"—";const t=[];return a.useMemory&&t.push("Memory"),a.useDisk&&t.push("Disk"),a.deserialized?t.push("Deserialized"):(a.useMemory||a.useDisk)&&t.push("Serialized"),(a.replication??1)>1&&t.push(`x${a.replication}`),t.join(" · ")||"—"}function T(a){return a.name||`RDD ${a.id}`}function X(a){const t=_(T(a));return t.length<=S?t:`${t.slice(0,S)}…`}function Z({finding:a}){const t=$([a]),n=H([a]),{expanded:h,toggle:o}=W(),x=a.rddName??`RDD ${a.rddId}`;return s.jsxs("div",{ref:t,tabIndex:-1,"data-flashed":n?"true":"false",className:`space-y-1 transition-colors ${J(n)}`,children:[s.jsxs("p",{className:"flex flex-wrap items-start gap-2",children:[s.jsx(O,{impactBand:a.impactBand,className:"mt-1.5"}),s.jsx("span",{children:x})]}),s.jsx(q,{finding:a}),s.jsx(G,{expanded:h,onClick:o,label:x}),h?s.jsx("p",{className:"text-sm",children:a.recommendation}):null]})}const se=l.memo(function({appModel:t,catalog:n}){const[h,o]=l.useState(0),[x,u]=l.useState(0),g=t.app?.rddInfo,r=l.useMemo(()=>g?[...g.values()].filter(e=>(e.storageLevel?.useMemory||e.storageLevel?.useDisk)&&(e.numCachedPartitions??0)>0).sort((e,i)=>(i.memorySize??0)+(i.diskSize??0)-((e.memorySize??0)+(e.diskSize??0))):[],[g]),c=l.useMemo(()=>n.filter(e=>e.type==="cacheUtilization").sort((e,i)=>y[e.impactBand]-y[i.impactBand]),[n]),p=v(r,h,o),N=k(),B=N?c.findIndex(e=>e===N.finding):null,j=v(c,x,u,B);if(r.length===0)return s.jsx(z,{title:"Cache Utilization",summary:s.jsx("span",{className:"text-xs text-muted-foreground",children:"No cached RDDs in this run."}),children:s.jsx("p",{className:"text-xs text-muted-foreground",children:"No cached RDDs in this run."})});const C=r.reduce((e,i)=>e+(i.memorySize??0)+(i.diskSize??0),0),I=e=>c.filter(i=>i.rddId===e);return s.jsx("div",{"data-widget":"cache-utilization",children:s.jsxs(z,{title:"Cache Utilization",impactBand:b(c),badges:s.jsxs(s.Fragment,{children:[s.jsxs("span",{className:"text-xs text-muted-foreground",children:[r.length," cached RDD",r.length===1?"":"s"]}),s.jsx(U,{anchor:"#memory-model",children:"Learn more →"})]}),defaultCollapsed:!0,summary:s.jsx(A,{value:f(C),context:"cached across memory + disk"}),children:[s.jsxs(M,{children:[s.jsx(F,{children:s.jsxs(P,{children:[s.jsx(d,{children:"RDD"}),s.jsx(d,{children:"Storage level"}),s.jsx(d,{className:"text-right",children:"Cached partitions"}),s.jsx(d,{className:"text-right",children:"Memory"}),s.jsx(d,{className:"text-right",children:"Disk"})]})}),s.jsx(L,{children:p.visible.map(e=>{const i=T(e),D=X(e),R=I(e.id);return s.jsxs(P,{children:[s.jsxs(m,{className:"max-w-80 truncate",title:i!==D?i:void 0,children:[D,R.length>0&&s.jsx(E,{type:"cacheUtilization",impactBand:b(R)??"info",className:"ml-1.5"})]}),s.jsx(m,{children:K(e.storageLevel)}),s.jsxs(m,{className:"text-right",children:[e.numCachedPartitions," / ",e.numPartitions]}),s.jsx(m,{className:"text-right",children:f(e.memorySize??0)}),s.jsx(m,{className:"text-right",children:f(e.diskSize??0)})]},e.id)})})]}),s.jsx(w,{page:p.effectivePage,totalPages:p.totalPages,onPrev:()=>o(e=>e-1),onNext:()=>o(e=>e+1)}),c.length>0?s.jsxs("div",{className:"mt-3 space-y-2 text-sm",children:[j.visible.map(e=>s.jsx(Z,{finding:e},e.id)),s.jsx(w,{page:j.effectivePage,totalPages:j.totalPages,onPrev:()=>u(e=>e-1),onNext:()=>u(e=>e+1)})]}):null]})})});export{se as CacheUtilization};
@@ -1 +0,0 @@
1
- import{r as u,j as e}from"./react-vendor-u4pyvC5Y.js";import{c as v,as as b,at as N,W as f,j as w,l as C,m as h,n as c,o as T,R as B,q as k,T as $,ax as I,ay as P,aw as q,p as d,x as m,Z as E,a0 as O,az as F,aG as M,aA as W}from"./index-4id52G-A.js";import"./charts-vendor-NMqKV0H4.js";import"./plan-graph-vendor-vZQHG2EJ.js";const A=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],z=v("git-merge",A);function G({relations:a,operator:o}){const l=o==="union"?"union":"join";return e.jsx("span",{className:"inline-flex flex-wrap items-baseline",children:a.map((r,n)=>e.jsxs("span",{children:[n>0?e.jsxs(e.Fragment,{children:[" ",e.jsx("span",{className:"mx-1 font-semibold uppercase text-xs tracking-wide text-primary",children:l})," "]}):null,r.relation]},r.relation))})}function H({finding:a}){const o=I([a]),l=P([a]),{expanded:r,toggle:n}=q(),t=a.variant==="composite";return e.jsxs(h,{ref:o,tabIndex:-1,"data-flashed":l?"true":"false",className:`transition-colors ${W(l)}`,children:[e.jsx(d,{children:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[t?e.jsx(z,{className:"size-3.5 text-muted-foreground","aria-hidden":"true"}):null,t&&a.relations&&a.relations.length>0?e.jsx(G,{relations:a.relations,operator:a.operator}):e.jsx("span",{children:a.relation}),t?e.jsx(m,{variant:"outline",className:"text-xs uppercase border-dashed",children:a.operator?.toUpperCase()}):e.jsx(m,{variant:"secondary",className:"text-xs uppercase",children:a.format})]})}),e.jsxs(d,{children:[a.value," queries"]}),e.jsx(d,{className:"text-right",children:E(a.totalReadBytes??0)}),e.jsxs(d,{children:[e.jsx(O,{finding:a}),e.jsx(F,{expanded:r,onClick:n,label:a.relation??"this relation"}),r?e.jsxs("div",{className:"mt-1 space-y-1",children:[e.jsx("p",{children:a.recommendation}),t?e.jsx(M,{confidence:a.confidence,validationRequired:a.validationRequired}):null]}):null]})]})}const U=u.memo(function({catalog:o,defaultCollapsed:l=!0}){const[r,n]=u.useState(0),t=u.useMemo(()=>o.filter(s=>s.type==="cachingOpportunity").sort((s,i)=>(i.totalReadBytes??0)-(s.totalReadBytes??0)||(typeof i.value=="number"?i.value:0)-(typeof s.value=="number"?s.value:0)),[o]),p=b(),j=p?t.findIndex(s=>s===p.finding):null,{totalPages:y,effectivePage:g,visible:R}=N(t,r,n,j);if(t.length===0)return null;const x=t[0];return e.jsx(f,{title:"Caching Opportunities",impactBand:"info",badges:e.jsx($,{type:"cachingOpportunity",impactBand:"info"}),defaultCollapsed:l,summary:e.jsx(k,{value:`${x.value}×`,context:`read by ${x.value} queries: ${x.relation}`}),children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs(w,{children:[e.jsx(C,{children:e.jsxs(h,{children:[e.jsx(c,{children:"Relation"}),e.jsx(c,{children:"Read by"}),e.jsx(c,{className:"text-right",children:"Data read"}),e.jsx(c,{children:"Recommendation"})]})}),e.jsx(T,{children:R.map((s,i)=>e.jsx(H,{finding:s},`${s.format}:${s.relation}:${(s.executionIds??[]).join(",")}:${i}`))})]}),e.jsx(B,{page:g,totalPages:y,onPrev:()=>n(s=>s-1),onNext:()=>n(s=>s+1)})]})})});export{U as CachingOpportunity};
@@ -1 +0,0 @@
1
- import{r as p,j as e}from"./react-vendor-u4pyvC5Y.js";import{ae as N,K as h,as as b,at as k,E as d,W as f,J as A,R,q as I,T as B,ax as w,ay as E,aw as P,I as F,a0 as T,az as D,D as K,aA as S}from"./index-4id52G-A.js";import"./charts-vendor-NMqKV0H4.js";import"./plan-graph-vendor-vZQHG2EJ.js";function L({finding:a}){const t=w([a]),i=E([a]),{expanded:r,toggle:l}=P();return e.jsxs("li",{ref:t,tabIndex:-1,"data-flashed":i?"true":"false",className:`space-y-1 transition-colors ${S(i)}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{impactBand:a.impactBand}),e.jsx("code",{className:"text-xs",children:a.property})]}),e.jsx(T,{finding:a}),e.jsx(D,{expanded:r,onClick:l,label:a.property??"this property"}),r?e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"text-sm",children:[a.recommendation," ",e.jsx(d,{evidenceKey:"sparkConfiguration"}),a.docAnchor?e.jsxs(e.Fragment,{children:[" ",e.jsx(K,{anchor:a.docAnchor,children:"Learn more →"})]}):null]}),e.jsx("div",{className:"rounded-md border border-accent/30 bg-accent/10 px-3 py-2 text-xs",children:e.jsxs("code",{className:"rounded bg-background px-1.5 py-0.5 font-mono text-accent",children:[a.property," = ",String(a.value)]})})]}):null]})}const z=p.memo(function({appModel:t,configFindings:i,defaultCollapsed:r=!0}){const[l,m]=p.useState(0),o=p.useMemo(()=>(i??N(t.app)).filter(s=>s.type==="configAudit").slice().sort((s,n)=>h[s.impactBand]-h[n.impactBand]),[i,t]),u=b(),j=u?o.findIndex(s=>s===u.finding):null,{totalPages:y,effectivePage:v,visible:C}=k(o,l,m,j);if(o.length===0){const s=t.evidenceAvailability?.entries.find(c=>c.key==="sparkConfiguration");let n;if(s)s.state==="present"?n="No misconfigurations detected.":s.state==="unknown"&&s.reasonCode==="parseIncomplete"?n=e.jsxs(e.Fragment,{children:[e.jsxs("span",{children:[s.summary," "]}),e.jsx(d,{evidenceKey:"sparkConfiguration"})]}):n=e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"No environment info captured in this log. "}),e.jsx(d,{evidenceKey:"sparkConfiguration"})]});else{const c=t.app?.evidenceInputs;n=(c?c.environmentUpdates>0:Object.keys(t.app?.config??{}).length>0||!!t.app?.resources)?"No misconfigurations detected.":e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"No environment info captured in this log. "}),e.jsx(d,{evidenceKey:"sparkConfiguration"})]})}const g=e.jsx("p",{className:"text-muted-foreground text-xs",children:n});return e.jsx(f,{title:"Config Sanity",compact:!0,summary:g,children:g})}const x=A(o);return e.jsxs(f,{title:"Config Sanity",impactBand:x,badges:e.jsx(B,{type:"configAudit",impactBand:x??"info"}),defaultCollapsed:r,summary:e.jsx(I,{value:`${o.length}`,context:`misconfiguration${o.length===1?"":"s"} flagged`}),children:[e.jsx("ul",{className:"space-y-4",children:C.map(s=>e.jsx(L,{finding:s},s.id))}),e.jsx(R,{page:v,totalPages:y,onPrev:()=>m(s=>s-1),onNext:()=>m(s=>s+1)})]})});export{z as ConfigAudit};
@@ -1 +0,0 @@
1
- import{r as T,j as a}from"./react-vendor-u4pyvC5Y.js";import{aH as Y,at as G,W as M,I as X,a0 as q,R as $,q as J,T as Q,D as V}from"./index-4id52G-A.js";import{d as W,C as Z,a as l}from"./Dashboard-D1_IrWRs.js";import{j as tt,C as et,X as at,Y as st,T as ot,k as nt,A as it}from"./charts-vendor-NMqKV0H4.js";import"./plan-graph-vendor-vZQHG2EJ.js";import"./useRecentFiles-46iBU9zJ.js";const F=["PROCESS_LOCAL","NODE_LOCAL","RACK_LOCAL","NO_PREF","ANY"];function ct(I,{bucketWidthMs:n=6e4,tiers:y=F}={}){const m=I.filter(e=>(e.completedAt??0)>(e.submittedAt??0)&&(e.executorRunTime??0)>0);if(m.length===0)return{labels:[],series:{}};const f=m.reduce((e,s)=>Math.min(e,s.submittedAt??e),1/0),R=m.reduce((e,s)=>Math.max(e,s.completedAt??e),-1/0),r=Math.max(1,Math.ceil((R-f)/n)),i={};for(const e of y)i[e]=new Array(r).fill(0);const g=new Array(r).fill(0);for(const e of m){const s=e.completedAt??0,h=e.submittedAt??0,u=s-h,E=(e.executorRunTime??0)/u,S=(e.localityStats??[]).reduce((t,d)=>t+d.count,0)||1,b=new Map((e.localityStats??[]).map(t=>[t.locality,t.count/S]));for(let t=0;t<r;t++){const d=f+t*n,L=d+n,p=Math.min(s,L)-Math.max(h,d);if(p<=0)continue;const N=p/n;for(const[C,k]of b){const x=E*k*N;i[C]?i[C][t]+=x:g[t]+=x}}}g.some(e=>e>0)&&(i.OTHER=g);const o=new Array(r).fill(0);for(const e of Object.keys(i))for(let s=0;s<r;s++)o[s]+=i[e][s];const v=o.reduce((e,s)=>Math.max(e,s),0);i.idle=o.map(e=>Math.max(0,v-e));const A=[];for(let e=0;e<r;e++)A.push(f+e*n);return{labels:A,series:i}}const rt=240,lt=60,B={PROCESS_LOCAL:"Process-local",NODE_LOCAL:"Node-local",RACK_LOCAL:"Rack-local",NO_PREF:"No preference",ANY:"Any",OTHER:"Other",idle:"Idle"},H={PROCESS_LOCAL:l.clean,NODE_LOCAL:l.accent,RACK_LOCAL:l.warning,NO_PREF:l.muted,ANY:l.critical,OTHER:l.muted,idle:l.muted},z="Core Usage by Locality",gt=T.memo(function({appModel:n,catalog:y,activeFileId:m,defaultCollapsed:f=!0}){const[R,r]=T.useState(0),i=T.useMemo(()=>{const t=[...n.stages.values()];if(!t.some(c=>(c.executorRunTime??0)>0&&(c.completedAt??0)>(c.submittedAt??0)))return{hasActivity:!1};const L=n.app,p=L?.startTime??0,N=L?.endTime??p,C=Math.max(6e4,Math.ceil(Math.max(1,N-p)/lt)),{labels:k,series:x}=ct(t,{bucketWidthMs:C}),P=[...F.filter(c=>x[c]),...x.OTHER?["OTHER"]:[],"idle"],_=k.map((c,w)=>{const j={t:Math.round((c-p)/1e3)};for(const O of P)j[O]=x[O]?.[w]??0;return j}),D=W(_),K=P.filter(c=>c!=="idle"),U=_.reduce((c,w)=>Math.max(c,K.reduce((j,O)=>j+w[O],0)),0);return{hasActivity:!0,order:P,points:_,sampled:D,peakCores:U}},[n,m]),g=T.useMemo(()=>Y([...n.stages.values()],{topN:1/0}),[n,m]),o=y.find(t=>t.type==="coreLocality"),v=y.some(t=>t.type==="memoryUtilization"&&t.variant==="idleCores"),A=g.topStages.filter(t=>t.nonLocalTasks>0),{totalPages:e,effectivePage:s,visible:h}=G(A,R,r);if(!i.hasActivity)return a.jsx(M,{title:z,summary:a.jsx("span",{className:"text-muted-foreground text-xs",children:"No stage activity to plot."}),children:a.jsx("p",{className:"text-muted-foreground text-xs",children:"No stage activity to plot."})});const{order:u,points:E,sampled:S,peakCores:b}=i;return a.jsx(M,{title:z,impactBand:o?.impactBand,badges:a.jsxs(a.Fragment,{children:[o?a.jsx(Q,{type:"coreLocality",impactBand:o.impactBand}):null,a.jsx(V,{anchor:"#bottleneck-utilization",children:"Learn more →"})]}),defaultCollapsed:f,summary:a.jsx(J,{value:`${Math.round(b)} cores`,context:"peak concurrent, by locality"}),children:a.jsxs("div",{className:"space-y-2",children:[a.jsx("p",{className:"text-muted-foreground text-xs",children:"approximate: stage-level attribution"}),o?a.jsxs("p",{className:"flex flex-wrap items-start gap-2 text-sm",children:[a.jsx(X,{impactBand:o.impactBand,className:"mt-1.5"}),a.jsxs("span",{children:[a.jsxs("strong",{children:[o.value,"% non-local"]}),": ",o.recommendation]})]}):null,o?a.jsx(q,{finding:o}):null,a.jsx(Z,{ariaLabel:"Approximate concurrent core usage over time, stacked by task locality tier, with idle capacity shown. See the legend for tier colors.",height:rt,table:{caption:"Concurrent core usage over time by locality tier",columns:["Time (s)",...u.map(t=>B[t]??t)],rows:E.map(t=>[t.t,...u.map(d=>Math.round(t[d]))]),align:Array.from({length:u.length+1},()=>"right")},children:a.jsxs(tt,{data:S,children:[a.jsx(et,{vertical:!1,stroke:l.muted,strokeOpacity:.2}),a.jsx(at,{dataKey:"t",tick:{fontSize:10},label:{value:"seconds from app start",position:"insideBottom",offset:-2,fontSize:10}}),a.jsx(st,{tick:{fontSize:10},width:36,label:{value:"avg concurrent cores",angle:-90,position:"insideLeft",fontSize:10}}),a.jsx(ot,{}),a.jsx(nt,{wrapperStyle:{fontSize:10}}),u.map(t=>a.jsx(it,{type:"monotone",dataKey:t,name:B[t]??t,stackId:"cores",stroke:H[t]??l.muted,fill:H[t]??l.muted,fillOpacity:t==="idle"?.15:.8,isAnimationActive:!1},t))]})}),h.length>0?a.jsxs(a.Fragment,{children:[a.jsx("ul",{className:"space-y-1 text-xs text-muted-foreground",children:h.map(t=>a.jsxs("li",{children:["Stage ",t.stageId,": ",Math.round(t.ratio*100),"% non-local (",t.nonLocalTasks,"/",t.taskCount," tasks)"]},t.stageId))}),a.jsx($,{page:s,totalPages:e,onPrev:()=>r(t=>t-1),onNext:()=>r(t=>t+1)})]}):null,v?a.jsx("p",{className:"text-xs text-muted-foreground",children:"Idle cores also flagged → see Memory Utilization widget"}):null]})})});export{gt as CoreUsageArea};