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.
- package/README.md +6 -0
- package/index.js +40 -49
- package/lib/static-files.js +10 -6
- package/package.json +20 -1
- package/public/assets/AutoscalingChurn-CFJkiqxW.js +1 -0
- package/public/assets/CacheUtilization-kTKZBzDA.js +1 -0
- package/public/assets/CachingOpportunity-CU70EWcF.js +1 -0
- package/public/assets/ColdStart-hOI-WOvm.js +1 -0
- package/public/assets/ConfigAudit-B4oAksZY.js +1 -0
- package/public/assets/CoreUsageArea-D-dR3SQk.js +1 -0
- package/public/assets/Dashboard-MDhohsq4.js +4 -0
- package/public/assets/DuplicatePlanSubtree-54RKsfI7.js +1 -0
- package/public/assets/DurationHistogram-CviQyPNM.js +1 -0
- package/public/assets/EmptyState-v2ehFncc.js +1 -0
- package/public/assets/ExecutorUtilization-vHyFHgL6.js +1 -0
- package/public/assets/GcPressure-DINuhcno.js +1 -0
- package/public/assets/ImpactEstimate-C6GzFOY9.js +1 -0
- package/public/assets/IncompleteRun-a1kuCnU6.js +1 -0
- package/public/assets/JobFailures-CYwPfUhR.js +1 -0
- package/public/assets/MemoryUtilization-Dlfj0e_f.js +1 -0
- package/public/assets/OverBroadcast-BMu7Y8l9.js +1 -0
- package/public/assets/PartitionSizing-CvMGfSVB.js +1 -0
- package/public/assets/PlanExplorer-xYFme_Rx.js +1 -0
- package/public/assets/PlanGraphRoute-a3OGg6ET.js +1 -0
- package/public/assets/RetryWaste-JKRjOZ-J.js +1 -0
- package/public/assets/RowPagination-DypWbnic.js +1 -0
- package/public/assets/ShuffleIO-Mi8HiVu-.js +1 -0
- package/public/assets/Skew-C3iOScTC.js +1 -0
- package/public/assets/SlowHost-DKBg18v-.js +1 -0
- package/public/assets/SmallFiles-CCCB6AIu.js +1 -0
- package/public/assets/SpeculationWaste-DUNupw0_.js +1 -0
- package/public/assets/Spill-BlLdatik.js +1 -0
- package/public/assets/StageFailed-qtY7C7Yo.js +1 -0
- package/public/assets/StageFindingGroup-CoVdEZYs.js +1 -0
- package/public/assets/StageHeader-uDBLHgdg.js +1 -0
- package/public/assets/StagePill-CYCMdlIx.js +1 -0
- package/public/assets/StageShape-zs0mAjQJ.js +1 -0
- package/public/assets/StageSlowness-C7vg0u5Q.js +1 -0
- package/public/assets/Straggler-4BRGAQP4.js +1 -0
- package/public/assets/TaskFailures-CSjO23Kg.js +1 -0
- package/public/assets/TinyTask-6Zuovcn5.js +1 -0
- package/public/assets/UnderBroadcast-CePjo0ZV.js +1 -0
- package/public/assets/WidgetLeadSummary-DRNRVvn7.js +1 -0
- package/public/assets/{charts-vendor-NMqKV0H4.js → charts-vendor-Cf1-wzeH.js} +2 -2
- package/public/assets/downsample-D8XmJk6i.js +1 -0
- package/public/assets/finding-anchor-4TmpXd7j.js +1 -0
- package/public/assets/impact-sort-Cq6KOLqh.js +1 -0
- package/public/assets/inbox-DBFovbUX.js +1 -0
- package/public/assets/index-CHjV2-jB.js +9 -0
- package/public/assets/index-DMEtaP4u.css +1 -0
- package/public/assets/parser-worker-BMPPE37w.js +64 -0
- package/public/assets/plan-graph-vendor-B96a-e4N.js +7 -0
- package/public/assets/react-vendor-DA6opS-q.js +9 -0
- package/public/assets/select-D5fK-za0.js +1 -0
- package/public/assets/toggle-group-lbIXRG0W.js +1 -0
- package/public/assets/usePagedRows-CFoZrPr4.js +1 -0
- package/public/assets/useRecentFiles-BPGQ6XII.js +13 -0
- package/public/assets/useSortMode-BOPpfLhJ.js +1 -0
- package/public/docs/404.html +3 -3
- package/public/docs/assets/{app.Bxy4_HVA.js → app.BgzsaTS3.js} +1 -1
- package/public/docs/assets/aqe-loop.IwQSATHw.svg +1 -0
- package/public/docs/assets/aqe-loop.dark.DGbaxqJE.svg +1 -0
- package/public/docs/assets/broadcast-vs-shuffle.Db4WY1XK.svg +1 -0
- package/public/docs/assets/broadcast-vs-shuffle.dark.C7Bxs0mG.svg +1 -0
- package/public/docs/assets/cache-lifecycle.dark.B-hS7AgU.svg +1 -0
- package/public/docs/assets/cache-lifecycle.rEOVYQNU.svg +1 -0
- package/public/docs/assets/chunks/@localSearchIndexroot.PQ5JepCp.js +1 -0
- package/public/docs/assets/chunks/{VPLocalSearchBox.L5jNOIR3.js → VPLocalSearchBox.DOq3t-On.js} +1 -1
- package/public/docs/assets/chunks/duplicate-plan-subtree.dark.Cdp70QhV.js +1 -0
- package/public/docs/assets/chunks/{framework.CNDaxUod.js → framework.DSg0KOwT.js} +1 -1
- package/public/docs/assets/chunks/retry-escalation-ladder.dark.DHipdJgZ.js +1 -0
- package/public/docs/assets/chunks/theme.BP14rGBx.js +2 -0
- package/public/docs/assets/cold-start-timeline.DxC_Sc7w.svg +1 -0
- package/public/docs/assets/cold-start-timeline.dark.CZ17YcAG.svg +1 -0
- package/public/docs/assets/columnar-layout.PghGeOEA.svg +1 -0
- package/public/docs/assets/columnar-layout.dark.BVNlz0ff.svg +1 -0
- package/public/docs/assets/container-memory.DIO0AnIm.svg +1 -0
- package/public/docs/assets/container-memory.dark.CP-5zuCl.svg +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.B-OsL91z.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.B-OsL91z.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.BOeH4d1J.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.BOeH4d1J.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BtPdlM7r.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.js → contributor-guide_architecture_impact-estimation.md.DYCDPgkh.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CzlXOnCq.lean.js → contributor-guide_architecture_impact-estimation.md.DYCDPgkh.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.js → contributor-guide_architecture_index.md.3TO9ic6w.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_index.md.94lNbF-4.lean.js → contributor-guide_architecture_index.md.3TO9ic6w.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.js → contributor-guide_architecture_overview.md.CehiRmGn.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_overview.md.mQFlN66o.lean.js → contributor-guide_architecture_overview.md.CehiRmGn.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.m3S3UdMk.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.m3S3UdMk.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DbqPf2OT.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DbqPf2OT.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BaS_L10g.js → contributor-guide_architecture_worker-protocol.md.B93qJ_tT.js} +2 -2
- 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
- package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.js +1 -0
- package/public/docs/assets/contributor-guide_contributing.md.CvRsdr6J.lean.js +1 -0
- package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.js → contributor-guide_development-setup.md.DvAN_9mK.js} +1 -1
- package/public/docs/assets/{contributor-guide_development-setup.md.CpUMVtIK.lean.js → contributor-guide_development-setup.md.DvAN_9mK.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.js → contributor-guide_testing.md.6rIKqSyY.js} +1 -1
- package/public/docs/assets/{contributor-guide_testing.md.C0q-BJfl.lean.js → contributor-guide_testing.md.6rIKqSyY.lean.js} +1 -1
- package/public/docs/assets/dag-stages.DSz_S937.svg +1 -0
- package/public/docs/assets/dag-stages.dark.F72UzxH4.svg +1 -0
- package/public/docs/assets/driver-executor.D5pQ7YN1.svg +1 -0
- package/public/docs/assets/driver-executor.dark.BmX9cPvh.svg +1 -0
- package/public/docs/assets/duplicate-plan-subtree.B4cvN6fj.svg +1 -0
- package/public/docs/assets/duplicate-plan-subtree.dark.Dw8wS0Ag.svg +1 -0
- package/public/docs/assets/{index.md.CETnDZzR.js → index.md.CHJVslga.js} +1 -1
- package/public/docs/assets/{index.md.CETnDZzR.lean.js → index.md.CHJVslga.lean.js} +1 -1
- package/public/docs/assets/join-strategy.C_FvrCEo.svg +1 -0
- package/public/docs/assets/join-strategy.dark.ChMLnNII.svg +1 -0
- package/public/docs/assets/memory-borrowing.BqQRJg0u.svg +1 -0
- package/public/docs/assets/memory-borrowing.dark.Yhh20O9C.svg +1 -0
- package/public/docs/assets/memory-regions.XHvO7jHG.svg +1 -0
- package/public/docs/assets/memory-regions.dark.D4TP9_08.svg +1 -0
- package/public/docs/assets/repartition-vs-coalesce.BovLRrpj.svg +1 -0
- package/public/docs/assets/repartition-vs-coalesce.dark.BhAczKZQ.svg +1 -0
- package/public/docs/assets/retry-escalation-ladder.DyTKJJmZ.svg +1 -0
- package/public/docs/assets/retry-escalation-ladder.dark.BdsabtU3.svg +1 -0
- package/public/docs/assets/shuffle-map-reduce.KuOEZVmg.svg +1 -0
- package/public/docs/assets/shuffle-map-reduce.dark.BgQZnFSb.svg +1 -0
- package/public/docs/assets/spill-classification.BU2euYDO.svg +1 -0
- package/public/docs/assets/spill-classification.dark.D7i1M40d.svg +1 -0
- package/public/docs/assets/{style.D2mY0HUs.css → style.DXOMCXxn.css} +1 -1
- package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.js +1 -0
- package/public/docs/assets/tuning-reference_anti-patterns.md.Df1YMIHu.lean.js +1 -0
- package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.js +1 -0
- package/public/docs/assets/tuning-reference_aqe.md.BIsCtLzm.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-broadcast-sizing.md.CEstB3Ia.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-cold-start.md.CEuy-72y.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-duplicate-plan-subtree.md.CIohQDfn.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.js +6 -0
- package/public/docs/assets/tuning-reference_bottleneck-failures.md.4z5BXGJ2.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.js +6 -0
- package/public/docs/assets/tuning-reference_bottleneck-gc.md.DSxzZRK7.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.js +8 -0
- package/public/docs/assets/tuning-reference_bottleneck-job-failure-rate.md.BaJl__1W.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-memory-utilization.md.DbP-SJZc.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-retry-waste.md.D5JMjVOt.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.js +12 -0
- package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.js +14 -0
- package/public/docs/assets/tuning-reference_bottleneck-skew.md.BdUwiDhn.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-slow-host.md.BlIo6UDW.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.js +5 -0
- package/public/docs/assets/tuning-reference_bottleneck-small-files.md.B8kloyx8.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.js +6 -0
- package/public/docs/assets/tuning-reference_bottleneck-spill.md.PNH7mITt.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.js +7 -0
- package/public/docs/assets/tuning-reference_bottleneck-straggler.md.DY36fHN5.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.js +8 -0
- package/public/docs/assets/tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.lean.js +1 -0
- package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.js +5 -0
- package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.js +1 -0
- package/public/docs/assets/tuning-reference_caching.md.B7aQ8asB.lean.js +1 -0
- package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.js +1 -0
- package/public/docs/assets/tuning-reference_cluster-config.md.ZVmDGsQ3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_config.md.UvveiWG3.js +1 -0
- package/public/docs/assets/tuning-reference_config.md.UvveiWG3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.js +1 -0
- package/public/docs/assets/tuning-reference_data-formats.md.bjCAWH3N.lean.js +1 -0
- package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.js +1 -0
- package/public/docs/assets/tuning-reference_index.md.BQ_NooMV.lean.js +1 -0
- package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.js +1 -0
- package/public/docs/assets/tuning-reference_intro.md.CobD-lGB.lean.js +1 -0
- package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.js +1 -0
- package/public/docs/assets/tuning-reference_joins.md.BtKs_CuW.lean.js +1 -0
- package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.js +1 -0
- package/public/docs/assets/tuning-reference_memory-model.md.DhT-n4y3.lean.js +1 -0
- package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.js +1 -0
- package/public/docs/assets/tuning-reference_metrics.md.mLOh7Apj.lean.js +1 -0
- package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.js +1 -0
- package/public/docs/assets/tuning-reference_partitioning.md.q0zKF_8X.lean.js +1 -0
- package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.js +6 -0
- package/public/docs/assets/tuning-reference_pyspark.md.DDCfvN9t.lean.js +1 -0
- package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.js +1 -0
- package/public/docs/assets/tuning-reference_shuffle.md.BZZ7R4Ix.lean.js +1 -0
- package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.js +1 -0
- package/public/docs/assets/tuning-reference_spark-architecture.md.Dwzm5avO.lean.js +1 -0
- package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.js +1 -0
- package/public/docs/assets/tuning-reference_table-formats.md.D6wj-2dX.lean.js +1 -0
- package/public/docs/assets/udf-execution-models.BUFDICuG.svg +1 -0
- package/public/docs/assets/udf-execution-models.dark.YTNS6GDq.svg +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.sU3KGarf.js +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.sU3KGarf.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started.md.DtEM37MK.js +3 -0
- package/public/docs/assets/user-guide_getting-started.md.DtEM37MK.lean.js +1 -0
- package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.js → user-guide_mcp-tools.md.C8MiIu7F.js} +35 -5
- package/public/docs/assets/{user-guide_mcp-tools.md.DwYI1d6C.lean.js → user-guide_mcp-tools.md.C8MiIu7F.lean.js} +1 -1
- package/public/docs/assets/{user-guide_run-comparison.md.5-oaOfTu.js → user-guide_run-comparison.md.S0TWWmLY.js} +1 -1
- package/public/docs/assets/{user-guide_run-comparison.md.5-oaOfTu.lean.js → user-guide_run-comparison.md.S0TWWmLY.lean.js} +1 -1
- package/public/docs/assets/user-guide_understanding-findings.md.D0R_Y-R2.js +1 -0
- package/public/docs/assets/{user-guide_understanding-findings.md.CK2WZ0Tf.lean.js → user-guide_understanding-findings.md.D0R_Y-R2.lean.js} +1 -1
- package/public/docs/contributor-guide/architecture/board-widgets.html +7 -7
- package/public/docs/contributor-guide/architecture/detector-contract.html +7 -7
- package/public/docs/contributor-guide/architecture/drill-down.html +7 -7
- package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -7
- package/public/docs/contributor-guide/architecture/index.html +7 -7
- package/public/docs/contributor-guide/architecture/overview.html +7 -7
- package/public/docs/contributor-guide/architecture/state-and-history.html +7 -7
- package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -7
- package/public/docs/contributor-guide/architecture/worker-protocol.html +8 -8
- package/public/docs/contributor-guide/contributing.html +7 -7
- package/public/docs/contributor-guide/development-setup.html +7 -7
- package/public/docs/contributor-guide/testing.html +7 -7
- package/public/docs/hashmap.json +1 -1
- package/public/docs/index.html +7 -7
- package/public/docs/tuning-reference/anti-patterns.html +29 -0
- package/public/docs/tuning-reference/aqe.html +29 -0
- package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +29 -0
- package/public/docs/tuning-reference/bottleneck-cold-start.html +35 -0
- package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +30 -0
- package/public/docs/tuning-reference/bottleneck-failures.html +35 -0
- package/public/docs/tuning-reference/bottleneck-gc.html +34 -0
- package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +37 -0
- package/public/docs/tuning-reference/bottleneck-memory-utilization.html +35 -0
- package/public/docs/tuning-reference/bottleneck-retry-waste.html +30 -0
- package/public/docs/tuning-reference/bottleneck-shuffle.html +40 -0
- package/public/docs/tuning-reference/bottleneck-skew.html +42 -0
- package/public/docs/tuning-reference/bottleneck-slow-host.html +35 -0
- package/public/docs/tuning-reference/bottleneck-small-files.html +33 -0
- package/public/docs/tuning-reference/bottleneck-spill.html +34 -0
- package/public/docs/tuning-reference/bottleneck-straggler.html +35 -0
- package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +36 -0
- package/public/docs/tuning-reference/bottleneck-utilization.html +34 -0
- package/public/docs/tuning-reference/caching.html +29 -0
- package/public/docs/tuning-reference/cluster-config.html +29 -0
- package/public/docs/tuning-reference/config.html +29 -0
- package/public/docs/tuning-reference/data-formats.html +29 -0
- package/public/docs/tuning-reference/index.html +29 -0
- package/public/docs/tuning-reference/intro.html +29 -0
- package/public/docs/tuning-reference/joins.html +29 -0
- package/public/docs/tuning-reference/memory-model.html +29 -0
- package/public/docs/tuning-reference/metrics.html +29 -0
- package/public/docs/tuning-reference/partitioning.html +29 -0
- package/public/docs/tuning-reference/pyspark.html +34 -0
- package/public/docs/tuning-reference/shuffle.html +29 -0
- package/public/docs/tuning-reference/spark-architecture.html +29 -0
- package/public/docs/tuning-reference/table-formats.html +29 -0
- package/public/docs/user-guide/alternative-log-retrieval.html +29 -0
- package/public/docs/user-guide/getting-started.html +8 -8
- package/public/docs/user-guide/mcp-tools.html +41 -11
- package/public/docs/user-guide/run-comparison.html +7 -7
- package/public/docs/user-guide/understanding-findings.html +7 -7
- package/public/index.html +6 -6
- package/vendor-core/analyzer.js +74 -74
- package/vendor-core/cli/budgets.js +13 -27
- package/vendor-core/cli/collect-run.js +43 -19
- package/vendor-core/core-count.js +25 -27
- package/vendor-core/core-locality-ratio.js +4 -11
- package/vendor-core/core-time-series.js +6 -12
- package/vendor-core/core-usage-locality.js +3 -4
- package/vendor-core/detectors.js +256 -375
- package/vendor-core/docs-config.js +69 -21
- package/vendor-core/docs-content/chapters/01-intro.md +32 -0
- package/vendor-core/docs-content/chapters/02-spark-architecture.md +76 -0
- package/vendor-core/docs-content/chapters/03-memory-model.md +73 -0
- package/vendor-core/docs-content/chapters/04-partitioning.md +65 -0
- package/vendor-core/docs-content/chapters/05-joins.md +62 -0
- package/vendor-core/docs-content/chapters/06-shuffle.md +59 -0
- package/vendor-core/docs-content/chapters/07-data-formats.md +81 -0
- package/vendor-core/docs-content/chapters/07b-table-formats.md +56 -0
- package/vendor-core/docs-content/chapters/08-caching.md +58 -0
- package/vendor-core/docs-content/chapters/09-pyspark.md +78 -0
- package/vendor-core/docs-content/chapters/10-aqe.md +167 -0
- package/vendor-core/docs-content/chapters/11-cluster-config.md +170 -0
- package/vendor-core/docs-content/chapters/12-anti-patterns.md +171 -0
- package/vendor-core/docs-content/chapters/14-metrics.md +87 -0
- package/vendor-core/docs-content/chapters/15-config.md +93 -0
- package/vendor-core/docs-content/chapters/nav-index.json +370 -0
- package/vendor-core/docs-content/detection/cache.md +6 -0
- package/vendor-core/docs-content/detection/cfg.md +15 -0
- package/vendor-core/docs-content/detection/chrn.md +7 -0
- package/vendor-core/docs-content/detection/cold.md +4 -0
- package/vendor-core/docs-content/detection/cstor.md +4 -0
- package/vendor-core/docs-content/detection/fail.md +5 -0
- package/vendor-core/docs-content/detection/gc.md +4 -0
- package/vendor-core/docs-content/detection/host.md +5 -0
- package/vendor-core/docs-content/detection/incmp.md +6 -0
- package/vendor-core/docs-content/detection/jobs.md +4 -0
- package/vendor-core/docs-content/detection/local.md +7 -0
- package/vendor-core/docs-content/detection/mem.md +10 -0
- package/vendor-core/docs-content/detection/part.md +5 -0
- package/vendor-core/docs-content/detection/plan.md +14 -0
- package/vendor-core/docs-content/detection/retry.md +4 -0
- package/vendor-core/docs-content/detection/sfail.md +5 -0
- package/vendor-core/docs-content/detection/shape.md +5 -0
- package/vendor-core/docs-content/detection/shfl.md +4 -0
- package/vendor-core/docs-content/detection/skew.md +6 -0
- package/vendor-core/docs-content/detection/slow.md +6 -0
- package/vendor-core/docs-content/detection/spec.md +7 -0
- package/vendor-core/docs-content/detection/spill.md +7 -0
- package/vendor-core/docs-content/detection/strag.md +5 -0
- package/vendor-core/docs-content/detection/tiny.md +4 -0
- package/vendor-core/docs-content/detection/util.md +4 -0
- package/vendor-core/docs-content/diagrams/aqe-loop.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/aqe-loop.svg +1 -0
- package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/broadcast-vs-shuffle.svg +1 -0
- package/vendor-core/docs-content/diagrams/cache-lifecycle.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/cache-lifecycle.svg +1 -0
- package/vendor-core/docs-content/diagrams/cold-start-timeline.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/cold-start-timeline.svg +1 -0
- package/vendor-core/docs-content/diagrams/columnar-layout.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/columnar-layout.svg +1 -0
- package/vendor-core/docs-content/diagrams/container-memory.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/container-memory.svg +1 -0
- package/vendor-core/docs-content/diagrams/dag-stages.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/dag-stages.svg +1 -0
- package/vendor-core/docs-content/diagrams/driver-executor.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/driver-executor.svg +1 -0
- package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/duplicate-plan-subtree.svg +1 -0
- package/vendor-core/docs-content/diagrams/join-strategy.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/join-strategy.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-borrowing.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-borrowing.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-regions.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/memory-regions.svg +1 -0
- package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/repartition-vs-coalesce.svg +1 -0
- package/vendor-core/docs-content/diagrams/retry-escalation-ladder.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/retry-escalation-ladder.svg +1 -0
- package/vendor-core/docs-content/diagrams/shuffle-map-reduce.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/shuffle-map-reduce.svg +1 -0
- package/vendor-core/docs-content/diagrams/spill-classification.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/spill-classification.svg +1 -0
- package/vendor-core/docs-content/diagrams/udf-execution-models.dark.svg +1 -0
- package/vendor-core/docs-content/diagrams/udf-execution-models.svg +1 -0
- package/vendor-core/docs-content/tuning/broadcast-sizing.md +78 -0
- package/vendor-core/docs-content/tuning/cold-start.md +81 -0
- package/vendor-core/docs-content/tuning/duplicate-plan-subtree.md +45 -0
- package/vendor-core/docs-content/tuning/failures.md +124 -0
- package/vendor-core/docs-content/tuning/gc.md +110 -0
- package/vendor-core/docs-content/tuning/job-failure-rate.md +101 -0
- package/vendor-core/docs-content/tuning/memory-utilization.md +58 -0
- package/vendor-core/docs-content/tuning/retry-waste.md +90 -0
- package/vendor-core/docs-content/tuning/shuffle.md +154 -0
- package/vendor-core/docs-content/tuning/skew.md +123 -0
- package/vendor-core/docs-content/tuning/slow-host.md +117 -0
- package/vendor-core/docs-content/tuning/small-files.md +99 -0
- package/vendor-core/docs-content/tuning/spill.md +114 -0
- package/vendor-core/docs-content/tuning/straggler.md +103 -0
- package/vendor-core/docs-content/tuning/tiny-tasks.md +94 -0
- package/vendor-core/docs-content/tuning/utilization.md +90 -0
- package/vendor-core/docs-site-config.js +10 -17
- package/vendor-core/efficiency-model.js +7 -13
- package/vendor-core/etl-phases.js +3 -5
- package/vendor-core/event-handlers.js +232 -134
- package/vendor-core/event-schemas.js +48 -114
- package/vendor-core/evidence-availability.js +5 -10
- package/vendor-core/evidence-report.js +72 -122
- package/vendor-core/export-data.js +48 -0
- package/vendor-core/finding-action-label.js +4 -10
- package/vendor-core/finding-filter-predicate.js +3 -7
- package/vendor-core/finding-generic-recommendation.js +112 -0
- package/vendor-core/finding-names.js +51 -0
- package/vendor-core/format-utils.js +112 -38
- package/vendor-core/impact-band.js +18 -24
- package/vendor-core/impact-estimator.js +38 -74
- package/vendor-core/ingest.js +7 -13
- package/vendor-core/job-groups.js +3 -6
- package/vendor-core/list-runs.js +278 -0
- package/vendor-core/load-vendored.js +6 -12
- package/vendor-core/log-header-peek.js +81 -0
- package/vendor-core/lz4-block.js +4 -6
- package/vendor-core/mcp-server-factory.js +38 -8
- package/vendor-core/mcp-tools.js +105 -76
- package/vendor-core/model-assembler.js +8 -16
- package/vendor-core/occupancy.js +5 -9
- package/vendor-core/parser-worker.js +18 -27
- package/vendor-core/plan-dot.js +2 -5
- package/vendor-core/plan-duration-attribution.js +78 -29
- package/vendor-core/plan-graph-model.js +126 -69
- package/vendor-core/plan-node-detail.js +31 -17
- package/vendor-core/plan-summary.js +19 -8
- package/vendor-core/recommendation-rollup.js +35 -39
- package/vendor-core/redact.js +72 -16
- package/vendor-core/rolling-log-reassembly.js +4 -6
- package/vendor-core/run-comparison.js +65 -70
- package/vendor-core/scaling-sim.js +5 -7
- package/vendor-core/session-snapshot.js +1 -1
- package/vendor-core/shs-fetch.js +4 -6
- package/vendor-core/shs-load.js +9 -13
- package/vendor-core/shs-request.js +1 -1
- package/vendor-core/stage-quantiles.js +14 -0
- package/vendor-core/types.js +78 -18
- package/vendor-core/wasted-core-hours.js +7 -12
- package/public/assets/AutoscalingChurn-CP5OjN6v.js +0 -1
- package/public/assets/CacheUtilization-BjyawXL6.js +0 -1
- package/public/assets/CachingOpportunity-DV2ABG2G.js +0 -1
- package/public/assets/ConfigAudit-DMiBhAoG.js +0 -1
- package/public/assets/CoreUsageArea-CGYIgPnt.js +0 -1
- package/public/assets/Dashboard-D1_IrWRs.js +0 -12
- package/public/assets/ExecutorTimeline-DkaAGqQT.js +0 -1
- package/public/assets/Failures-Crngoicu.js +0 -1
- package/public/assets/GcPressure-CFXm4BnA.js +0 -1
- package/public/assets/IncompleteRun-BWEJTb13.js +0 -1
- package/public/assets/JobFailures-BmjxCA-h.js +0 -1
- package/public/assets/MemoryUtilization-Bu2uQJbd.js +0 -1
- package/public/assets/PlanExplorer-DKUwF0uz.js +0 -1
- package/public/assets/PlanGraphRoute-BjPSugIG.js +0 -1
- package/public/assets/ShuffleIO--Rur3neu.js +0 -1
- package/public/assets/Spill-DIMpt8c2.js +0 -1
- package/public/assets/TaskSkew-BDr1DbeI.js +0 -1
- package/public/assets/index-4id52G-A.js +0 -9
- package/public/assets/index-D9kwVYIO.css +0 -1
- package/public/assets/parser-worker-00O9WEQC.js +0 -65
- package/public/assets/plan-graph-vendor-vZQHG2EJ.js +0 -7
- package/public/assets/react-vendor-u4pyvC5Y.js +0 -9
- package/public/assets/useRecentFiles-46iBU9zJ.js +0 -5
- package/public/docs/assets/chunks/@localSearchIndexroot.DclgKtlT.js +0 -1
- package/public/docs/assets/chunks/theme.CoT6y5bf.js +0 -2
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.BtjoE_1k.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.DQyCHQNM.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.BKfyDQck.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DaqttKgQ.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.Bk6Iyj9S.lean.js +0 -1
- package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.js +0 -1
- package/public/docs/assets/contributor-guide_contributing.md.C-lKs70I.lean.js +0 -1
- package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.js +0 -3
- package/public/docs/assets/user-guide_getting-started.md.BJdD7a7_.lean.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.CK2WZ0Tf.js +0 -1
- package/public/vendor/spark-doc/anchors.json +0 -205
- package/public/vendor/spark-doc/index.html +0 -4202
- package/public/vendor/spark-doc/landing.html +0 -418
- package/public/vendor/spark-doc/meta.html +0 -970
package/vendor-core/types.js
CHANGED
|
@@ -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
|
|
2
|
-
//
|
|
3
|
-
//
|
|
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
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
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};
|