Skip to content

Commit 55182fd

Browse files
Add Overview tab to Lite with 2x2 resource chart grid (#689) (#719)
New first tab showing at-a-glance server health: - CPU Utilization (SQL CPU %) - Memory Utilization (Buffer Pool + Memory Grants) - File I/O Latency (avg read/write ms across all databases) - Wait Statistics (top 5 wait types by total time) No pickers — responds to the global time range picker. All data from existing collectors, no new queries. Chart drill-down enabled on all four charts. Tab indices updated for the insertion. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 672f792 commit 55182fd

3 files changed

Lines changed: 314 additions & 19 deletions

File tree

CONTEXT.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Session Context — 2026-03-26 08:15
2+
3+
## Current Task
4+
Starting #689/#691 — Progressive server summary landing view with USE/RED/Golden Signals framing. These are being implemented together. Design sketch is on issue #691.
5+
6+
## Decisions Made
7+
8+
### Session-wide
9+
- Overlay on the slicer canvas, never on ScottPlot charts on other tabs (feedback saved)
10+
- Dots not lines for overlays — every execution gets a dot, no minimum threshold
11+
- Drill-down window ±30 min (±15 was too narrow, missed data due to spike chart zero-baseline rendering)
12+
- Custom date pickers must be populated on drill-down so user can explore other tabs
13+
- `_isRefreshing` guard needed on CustomDateRange_Changed/CustomTimeCombo_Changed/TimeRangeCombo_SelectionChanged to prevent cascading refreshes during programmatic picker updates
14+
- Chart drill-down added to all major charts, skipping Resource Metrics detail charts and Query Performance Trends pending #689/#691 consolidation
15+
- DuckDB path migrated to `%LOCALAPPDATA%\PerformanceMonitorLite\monitor.duckdb` — the old `bin/Debug` path has stale data
16+
17+
### #689/#691 Design
18+
- Combined implementation: #691 provides framework vocabulary, #689 provides the UI
19+
- Replaces default landing tab (Wait Stats in Lite, Resource Overview in Dashboard)
20+
- All data sources already exist — aggregation + presentation only
21+
- Lite first, then Dashboard port
22+
- Investigate buttons reuse #684 pattern
23+
- USE Method sections: CPU, Memory, Disk I/O, TempDB, Workers (each with Utilization/Saturation/Errors)
24+
- RED Method section: Rate, Errors, Duration
25+
- Recent Incidents section: ranked problems with navigate links
26+
- Full design sketch posted on issue #691
27+
28+
## Work Completed This Session
29+
30+
### Issues closed:
31+
- #676 — CREATE DATABASE model DB size fix (PR #678)
32+
- #677 — Azure SQL DB server_id collision (community PR #680)
33+
- #681 — Slicer time range fixes + new slicers (PRs #697, #698)
34+
- #683 — Grid-to-slicer dot overlay (PRs #699, #700, #701)
35+
- #684 — Critical Issues investigate button (PR #702)
36+
- #682 — Chart drill-down (PRs #705, #706, #708, #709, #711, #714, #717)
37+
- #704 — Slicer custom range display fix (PR #707)
38+
- #694 — Support question answered
39+
- #695 — sp_BlitzLock debugging comment posted
40+
41+
### Key PRs:
42+
- All merged to dev via squash+admin
43+
- Branch protection requires PRs — cannot push directly to dev
44+
45+
## Work Remaining
46+
47+
### Immediate: #689/#691
48+
- New `ServerSummaryControl` UserControl for Lite
49+
- Data aggregation queries pulling from existing DuckDB tables
50+
- USE/RED framework categorization
51+
- Severity thresholds per signal
52+
- Navigate-to-tab actions (pattern from #684)
53+
- Dashboard port after Lite validation
54+
55+
### Deferred:
56+
- #686 — Unified query detail panel (too much work, needs #689 first)
57+
- #685 — Inline sparklines in grids
58+
- #687 — Before/after comparison for query grids
59+
- #688 — Correlated timeline lanes
60+
- #690 — Heatmap for query duration
61+
- #692 — Dynamic baselines (foundation for #693)
62+
- #693 — Anomaly detection
63+
- #696 — XE sessions stay running after Lite closes (design choice)
64+
- Dashboard port of remaining Resource Metrics drill-downs (post #689)
65+
- Dashboard chart time display mode for ScottPlot charts (pre-existing issue)
66+
67+
## Important Context
68+
69+
### File paths
70+
- Lite slicer: `Lite/Controls/TimeRangeSlicerControl.xaml.cs`
71+
- Dashboard slicer: `Dashboard/Controls/TimeRangeSlicerControl.xaml.cs`
72+
- Lite ServerTab: `Lite/Controls/ServerTab.xaml.cs` (~4500 lines)
73+
- Dashboard ServerTab: `Dashboard/ServerTab.xaml.cs` (~2000 lines)
74+
- Dashboard QueryPerformanceContent: `Dashboard/Controls/QueryPerformanceContent.xaml.cs`
75+
- DuckDB path: `C:/Users/edarl/AppData/Local/PerformanceMonitorLite/monitor.duckdb` (NOT the bin/Debug path)
76+
77+
### Timezone notes
78+
- Server (sql2022): Pacific time (UTC-7 DST / UTC-8 standard)
79+
- User machine: Eastern time (UTC-4 DST / UTC-5 standard)
80+
- `ServerTimeHelper.UtcOffsetMinutes` is the SERVER's offset from UTC
81+
- Chart X-axis data is in server local time (UTC + UtcOffsetMinutes)
82+
- Hover helper returns server local time
83+
- Date pickers show user's local time
84+
- DuckDB stores collection_time in UTC
85+
86+
### Git workflow
87+
- ALWAYS use feature branches + PRs (branch protection on dev and main)
88+
- `gh pr merge --squash --admin` to merge
89+
- Never push directly to dev — will be rejected
90+
91+
### Build issues
92+
- `taskkill` not reliably killing processes this session — Defender or runtime holding file locks
93+
- User has to manually close apps before rebuild
94+
- Dashboard MCP server can also hold DLL locks

Lite/Controls/ServerTab.xaml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,32 @@
129129
<TabControl Grid.Row="1" x:Name="MainTabControl" Background="{DynamicResource BackgroundBrush}"
130130
BorderThickness="0" Padding="0" SelectionChanged="MainTabControl_SelectionChanged">
131131

132+
<!-- Overview Tab -->
133+
<TabItem Header="Overview">
134+
<Grid Margin="8">
135+
<Grid.RowDefinitions>
136+
<RowDefinition Height="*"/>
137+
<RowDefinition Height="*"/>
138+
</Grid.RowDefinitions>
139+
<Grid.ColumnDefinitions>
140+
<ColumnDefinition Width="*"/>
141+
<ColumnDefinition Width="*"/>
142+
</Grid.ColumnDefinitions>
143+
<Border Grid.Row="0" Grid.Column="0" Margin="0,0,4,4">
144+
<ScottPlot:WpfPlot x:Name="OverviewCpuChart"/>
145+
</Border>
146+
<Border Grid.Row="0" Grid.Column="1" Margin="4,0,0,4">
147+
<ScottPlot:WpfPlot x:Name="OverviewMemoryChart"/>
148+
</Border>
149+
<Border Grid.Row="1" Grid.Column="0" Margin="0,4,4,0">
150+
<ScottPlot:WpfPlot x:Name="OverviewFileIoChart"/>
151+
</Border>
152+
<Border Grid.Row="1" Grid.Column="1" Margin="4,4,0,0">
153+
<ScottPlot:WpfPlot x:Name="OverviewWaitStatsChart"/>
154+
</Border>
155+
</Grid>
156+
</TabItem>
157+
132158
<!-- Wait Stats Tab -->
133159
<TabItem Header="Wait Stats">
134160
<Grid Margin="8">

0 commit comments

Comments
 (0)