Skip to content

feat: structured telemetry, post-dismiss verify, stale-data indicator, archival warning (#718)#734

Merged
erikdarlingdata merged 15 commits intoerikdarlingdata:devfrom
HannahVernon:feature/dismiss-telemetry-ux-718
Mar 27, 2026
Merged

feat: structured telemetry, post-dismiss verify, stale-data indicator, archival warning (#718)#734
erikdarlingdata merged 15 commits intoerikdarlingdata:devfrom
HannahVernon:feature/dismiss-telemetry-ux-718

Conversation

@HannahVernon
Copy link
Copy Markdown
Contributor

@HannahVernon HannahVernon commented Mar 27, 2026

What does this PR do?

Adds structured telemetry, post-dismiss verification, a stale-data indicator, and an archival warning to the Alert History tab. These are items 7, 8, 10, and 12 from the issue #718 improvement list.

Structured telemetry — Dismiss logging now uses machine-parseable key=value format (e.g., Action=DismissSelected, Result=Complete, Requested=5, LiveUpdated=3, ArchivedDismissed=2, Duration=45ms) with Stopwatch timing on all dismiss operations. Dashboard dismiss handlers now log via Logger with the same structured format.

Post-dismiss verification — After each dismiss operation, a verification query confirms the targeted alerts are actually dismissed. VerifyDismissAsync checks individual alerts; VerifyDismissAllAsync confirms no undismissed rows remain in the affected range. Mismatches are logged as warnings for diagnostics.

Stale-data indicator — Both Lite and Dashboard Alert History tabs now show a "Refreshed just now / Xs ago / Xm ago" label in the header bar, updated every 10 seconds via DispatcherTimer. Helps users understand when the displayed data may be out of date.

Archival warningArchiveService.IsArchiving static property is set during archival operations. Lite's Alert History shows an amber "⚠ Archival in progress" indicator when archival is running, helping users understand why dismiss may be slower during that window.

Which component(s) does this affect?

  • Full Dashboard
  • Lite Dashboard
  • Lite Tests
  • SQL collection scripts
  • CLI Installer
  • GUI Installer
  • Documentation

How was this tested?

Checklist

  • I have read the contributing guide
  • My code builds with zero warnings (dotnet build -c Debug)
  • I have tested my changes against at least one SQL Server version
  • I have not introduced any hardcoded credentials or server names

HannahVernon and others added 15 commits March 10, 2026 17:08
- Parse detail_text to extract Database, Query Text, and Wait Type
  when using 'Mute This Alert' from alert history (both editions)
- Add PopulateFromDetailText() to AlertMuteContext for structured
  field extraction from the label: value format
- Add 'Default expiration for new mute rules' dropdown to Settings
  in both editions (1 hour, 24 hours, 7 days, Never; default 24h)
- MuteRuleDialog now selects the configured default expiration
  instead of always defaulting to 'Never'
- Persist setting as mute_rule_default_expiration in settings.json
  (Lite) and preferences.json (Dashboard)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The XML doc claimed Job Name extraction but the parser did not
implement it. Add the missing branch in both Dashboard and Lite
editions so the behavior matches the documentation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Collapse newlines in Truncate/TruncateText so detail_text fields
  stay single-line in the label: value format
- Handle multi-line query values in PopulateFromDetailText by
  accumulating continuation lines until the next indented field
- Recognize variant query labels (Blocked Query, Blocking Query,
  Victim SQL) in addition to Query

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Explain that the field is a case-insensitive substring match and
suggest entering a distinctive fragment like a table or procedure name.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…archival warning

Structured telemetry (erikdarlingdata#718 item 7):
- Dismiss logging now uses key=value format (Action, Result, Requested,
  LiveUpdated, ArchivedDismissed, Duration, Cutoff, etc.)
- Stopwatch timing on all dismiss operations
- Dashboard dismiss handlers now log via Logger with same structured format

Post-dismiss verification (erikdarlingdata#718 item 10):
- VerifyDismissAsync confirms targeted alerts are actually dismissed
- VerifyDismissAllAsync confirms no undismissed rows remain in range
- Mismatches logged as warnings for diagnostics

Stale-data indicator (erikdarlingdata#718 item 12):
- 'Refreshed just now / Xs ago / Xm ago' label in Alert History header
- DispatcherTimer updates display every 10 seconds
- Added to both Lite and Dashboard editions

Archival warning (erikdarlingdata#718 item 8):
- ArchiveService.IsArchiving static property set during archival operations
- Lite Alert History shows amber warning when archival is in progress
- Helps users understand why dismiss may be slower during archival

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@erikdarlingdata erikdarlingdata merged commit ddc3331 into erikdarlingdata:dev Mar 27, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants