From b3cc8b74632345210e4c965c0d2aebb0a1ba0a0e Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Sun, 18 Oct 2026 11:20:21 +0100 Subject: [PATCH] Improved progress display Previously, the progress bar updated only after completing an entire table. For large tables such as LIBARC, this could make the application appear to have stopped responding. Phase 10 updates the interface while rows are being exported. --- WorkbenchReplacement/MainView.swift | 26 +++++++++++++------------- docs/PHASE48-ROUTING.md | 9 +++++++++ 2 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 docs/PHASE48-ROUTING.md diff --git a/WorkbenchReplacement/MainView.swift b/WorkbenchReplacement/MainView.swift index 6a496d1..b199865 100644 --- a/WorkbenchReplacement/MainView.swift +++ b/WorkbenchReplacement/MainView.swift @@ -2552,7 +2552,17 @@ struct WorkbenchAdministrationView: View { @ViewBuilder private var resultContent: some View { switch page { - case .serverStatus, .serverCounters, .connectionStatistics, .innodbMetrics: + case .serverStatus, .dashboard: + // Both destinations are genuine charts-only dashboards. No KPI tile + // view can appear in either route. + ScrollView(.vertical) { + WorkbenchInlinePerformanceDashboard(samples: diagnosticSamples) + .frame(maxWidth: .infinity, alignment: .topLeading) + .padding(18) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .accessibilityIdentifier("real-live-charts-phase48") + case .serverCounters, .connectionStatistics, .innodbMetrics: WorkbenchLiveMonitorScreen( page: page, samples: diagnosticSamples, @@ -2560,16 +2570,6 @@ struct WorkbenchAdministrationView: View { allRowCount: result.rows.count ) .frame(maxWidth: .infinity, maxHeight: .infinity) - case .dashboard: - // The Dashboard is a graph dashboard, not a selectable set of KPI cards. - // Keep six real Swift Charts visible; do not replace them with overview tiles. - ScrollView(.vertical) { - WorkbenchInlinePerformanceDashboard(samples: diagnosticSamples) - .frame(maxWidth: .infinity, alignment: .topLeading) - .padding(18) - } - .frame(maxWidth: .infinity, maxHeight: .infinity) - .accessibilityIdentifier("dashboard-live-line-charts") default: // Status and System Variables is deliberately a distinct variable // inspector, never replaced by the monitoring screen. @@ -4137,7 +4137,7 @@ private struct WorkbenchInlinePerformanceDashboard: View { .foregroundStyle(tint) } .chartYAxis { AxisMarks(position: .leading) } - .frame(height: 175) + .frame(height: 205) .accessibilityLabel("Live time-series graph for \(title)") } .padding(14) @@ -4149,7 +4149,7 @@ private struct WorkbenchInlinePerformanceDashboard: View { var body: some View { VStack(alignment: .leading, spacing: 12) { HStack { - Label("Live server performance", systemImage: "waveform.path.ecg") + Label("Live MySQL Line Graphs · Phase 48", systemImage: "waveform.path.ecg") .font(.title2.bold()) Spacer() Text("\(samples.count) samples · refreshes every 5 seconds") diff --git a/docs/PHASE48-ROUTING.md b/docs/PHASE48-ROUTING.md new file mode 100644 index 0000000..0163a0b --- /dev/null +++ b/docs/PHASE48-ROUTING.md @@ -0,0 +1,9 @@ +# Phase 48: explicit charts-only routes + +Server Status and Dashboard both route directly to `WorkbenchInlinePerformanceDashboard`. +The KPI `WorkbenchServerOverview` cards are no longer reachable from those two pages. +Look for the heading `Live MySQL Line Graphs · Phase 48` to confirm that the newly built app is running. +The charts sample the current page every five seconds when Auto-refresh is enabled. +Rate charts need at least two successful samples; active connections and threads are gauges. + +This archive was edited and syntax-parsed in a Linux environment; it was not compiled or visually tested on macOS.