From 7f253c4f741fd49bf29a2a6bd6b4e0176fa35698 Mon Sep 17 00:00:00 2001 From: Mia Wu Date: Wed, 27 May 2026 16:07:46 -0400 Subject: [PATCH] p3p pairs --- dashboard/src/App.jsx | 2 +- dashboard/src/components/TestTable.jsx | 94 ++++++++++++++++++++++++- server/dashboard.db | Bin 487424 -> 532480 bytes server/dashboard.db-shm | Bin 32768 -> 32768 bytes server/dashboard.db-wal | Bin 4268352 -> 4268352 bytes server/db_py.py | 14 ++++ server/scanner.py | 63 ++++++++++++++++- 7 files changed, 170 insertions(+), 3 deletions(-) diff --git a/dashboard/src/App.jsx b/dashboard/src/App.jsx index c0aa07b..e77876e 100644 --- a/dashboard/src/App.jsx +++ b/dashboard/src/App.jsx @@ -117,7 +117,7 @@ export default function App() { detailsPosition="right" details={['COE', 'P2P', 'P3P'].map((type) => { const typeStats = d.byType?.[type] ?? { completed: 0, total: 0 } - return `${type}: ${typeStats.completed}/${typeStats.total}` + return `${type}: ${typeStats.completed}/${typeStats.total} tests` })} /> diff --git a/dashboard/src/components/TestTable.jsx b/dashboard/src/components/TestTable.jsx index ccfd054..9b86ba4 100644 --- a/dashboard/src/components/TestTable.jsx +++ b/dashboard/src/components/TestTable.jsx @@ -196,7 +196,11 @@ export default function TestTable({ tests = [], allTests = [], isLoading }) { const pairs = parsePairArray(test.coe_pair) return pairs.length > 0 ? String(pairs.length) : null })()} colorClass="bg-cyan-900/50 text-cyan-300" /> - + { + const pairs = parsePairArray(test.p3p_pair) + return pairs.length > 0 ? String(pairs.length) : null + })()} colorClass="bg-orange-900/50 text-orange-300" /> + @@ -258,6 +262,94 @@ export default function TestTable({ tests = [], allTests = [], isLoading }) { ) } + return ( +
+ + + {open && ( +
+
+ + + + + + + + + + + + + +
+ {(() => { + const rows = parseTputRows(pairTest.tput_results) + if (!pairTest.completed || rows.length === 0) return null + return ( +
+ + + + + + + + + + + {rows.map(r => ( + + + + + + + ))} + +
StationThroughputDL RSSIUL RSSI
STA{r.station}{r.tput} Mbps{r.dlRssi} dBm{r.ulRssi} dBm
+
+ ) + })()} +
+ )} +
+ ) + })} + + + ) + })()} + {(() => { + const pairs = parsePairArray(test.p3p_pair) + if (pairs.length === 0) return null + return ( +
+

Paired P3P Tests

+
+ {pairs.map(pairKey => { + const pairTest = testsByLookupKey.get(pairKey) + const itemKey = `${test.id}-${pairKey}` + const open = pairedExpanded.has(`${test.id}::${pairKey}`) + + if (!pairTest) { + return ( +
+ {pairKey} +
+ ) + } + return (