[pull] main from erikdarlingdata:main#5
Merged
Conversation
Imports server connections from a previous Lite install's config/servers.json. Upserts by server name — existing servers are skipped, new ones are added with their original GUIDs so Credential Manager entries still resolve without re-entering passwords. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nnections Add Import Connections to Lite sidebar
Triggers connection check, server list refresh, and status bar update after a successful data import so historical data is visible immediately without manual refresh. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…resh Auto-refresh after Import Data completes
- llms.txt: structured project summary for LLM crawlers (llmstxt.org standard) - CITATION.cff: enables GitHub "Cite this repository" widget + structured metadata Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- llms.txt: structured project summary for LLM crawlers (llmstxt.org standard) - CITATION.cff: enables GitHub "Cite this repository" widget + structured metadata Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed CROSS APPLY sys.dm_exec_plan_attributes and the direct sys.databases join. Both dm_exec_plan_attributes and dm_exec_sql_text can trigger severity 22 engine crashes when plan handles reference RESTORING databases on passive mirror servers. Now pre-builds a temp table of ONLINE, accessible database IDs (filtered by state = 0 + HAS_DBACCESS) before the main query runs. The staging INSERT joins to this temp table instead of sys.databases, preventing any DMV from being evaluated against RESTORING databases. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When sys.master_files LEFT JOIN misses (NULL file_name), fall back to
DB_{database_id} and File_{file_id} instead of generic 'Unknown'.
Chart labels now show e.g. 'MyDatabase.File_2' instead of
'MyDatabase.Unknown'.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ls-633 Fix File I/O chart 'Unknown' labels (#633)
Revert File I/O label change (premature)
The maxGapSeconds + collectionTime gap detection was only on the perfmon collector. All other cumulative-counter collectors (file I/O, wait stats, query stats, procedure stats, memory grants) produced inflated deltas after app restart because the cached baseline could be hours old. Now all CalculateDelta calls pass collectionTime and maxGapSeconds=300 (5 minutes). If the gap since the last cached value exceeds 5 minutes, the delta is treated as a new baseline (returns 0) instead of computing against the stale value. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add gap detection to all delta collectors (#633)
- Colored console output: green for success, red for errors, yellow for warnings. Matches the GUI installer's visual pattern. - Version check on startup: calls GitHub Releases API and shows a prominent yellow banner if a newer version is available. Silent if current or if GitHub is unreachable (5-second timeout). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pdate-check Add colored output and version check to CLI installer
When the login lacks VIEW ANY DEFINITION, sys.master_files returns
NULLs via the LEFT JOIN. Updated ISNULL fallbacks in both the Lite
collector and the Full Edition install script:
- database_name: falls back to DB_NAME(vfs.database_id)
- file_name: falls back to 'File_{file_id}'
- physical_name: falls back to empty string
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…iles-633 Fix File I/O NULL fallbacks for restricted permissions (#633)
Checks GitHub Releases API on load and logs a warning if a newer version is available. 5-second timeout, best-effort — won't block the installer if GitHub is unreachable. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…date-check Add version check to GUI installer
Adds VelopackApp.Build().Run() early in OnStartup to handle install/uninstall/update lifecycle hooks. This is the prerequisite for auto-update — the actual download/apply logic and build pipeline (vpk pack) will follow in subsequent PRs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Velopack package and startup hook to Dashboard (#635)
Startup check tries Velopack first (can download + apply), falls back to the existing GitHub API check (notification only) when Velopack packages aren't available yet. About > Check for Updates now supports the full Velopack flow: check → download → restart to apply. Falls back to opening the releases page in browser when no Velopack packages exist. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ck-updater Wire Velopack update manager into Dashboard (#635)
Both apps now have a "Times: [Server Time | Local Time | UTC]" ComboBox on the global toolbar. Changing the mode: - Updates ServerTimeHelper.CurrentDisplayMode - Refreshes all DataGrid timestamp columns via Items.Refresh() - Dashboard persists the preference via UserPreferencesService The existing ServerTimeConverter already reads CurrentDisplayMode, so all timestamp columns update instantly without re-querying. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rGui.csproj' is a self-contained executable. A self-contained executable cannot be referenced by a non self-contained executable. For more information, see https://aka.ms/netsdk1151 Installer.Tests C:\Program Files\dotnet\sdk\10.0.104\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets 1330
fix warnings and upgrade only the minor versions of NuGet packages
Active Queries, Query Stats, Procedure Stats, Query Store each get their own slicer: - Slicer data aggregated by hourly collection_time buckets - fromSlicer parameter filters by collection_time (not execution time) when slicer is active - Metric label updates on grid sort (total/avg CPU, duration, reads, writes) - Selection preserved on auto-refresh - Grid respects slicer dates during auto-refresh (HasNarrowedSelection check) - Time display mode (Local/UTC/Server) updates slicer labels - Proportional time positioning for accurate data-gap representation - Hour-boundary snapping for accurate filtering - WAITFOR queries excluded from Active Queries slicer - TRY_CAST to money for sp_WhoIsActive varchar metric columns Also bumps Lite slicer height to 130px, Dashboard to 150px. Fixes proportional time positioning and label spacing in both Lite and Dashboard slicers. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Skip running jobs collector when login lacks msdb access
Audit of Query Trace Patterns tab found CollectionTime was fetched but not displayed, and nt_user_name was not exposed at all in the drill-down history window. Changes: - Add CollectionTime column to TracePatternHistoryWindow DataGrid - Add NtUserName (nt_user_name) to SQL query, model, and DataGrid - Reorder date columns to front: End Time, Collection Time, Start Time - NT User column placed after Login for logical grouping Main patterns grid unchanged — nt_user_name excluded there to avoid breaking the GROUP BY aggregation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…n-audit Add CollectionTime and NtUserName to trace pattern drill-down (#663)
Velopack auto-update for Lite + data directory migration (#635)
Save SortDescriptions before setting ItemsSource and restore them after, so user-applied sort order survives refresh cycles in both Dashboard and Lite. Dashboard: Replace SetInitialSort with SetItemsSourcePreservingSort across all 7 QueryPerformanceContent DataGrids. Lite: Add sort preservation to DataGridFilterManager (covers refresh and filter paths), rename SetInitialSort to SetDefaultSortIfNone which skips when user sort is already active. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-refresh Fix #659: Preserve DataGrid sort order across auto-refresh
CHARINDEX(N' ON ', st.text) searched from the start of the text, so a comment like "Update Current LoadIndex Id on Machine record" before CREATE TRIGGER would match first, producing a negative SUBSTRING length. Now passes the start position after CREATE TRIGGER as the third argument to CHARINDEX so it only finds the ON clause after the trigger name. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix trigger name extraction with ON in comment (#666)
1. FinOps expensive queries query referenced statement_start_offset and statement_end_offset columns that don't exist in the DuckDB query_stats schema. Removed from GROUP BY — sql_handle + query_text is sufficient for grouping. 2. Archive compaction didn't recognize imported_ prefixed parquet files from the data import feature. Added regex patterns for imported_YYYYMM_tablename and imported_YYYYMMDD_HHMM_tablename. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ries-and-imported-parquet Fix FinOps expensive queries error + imported parquet warnings
- 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>
Version bump to 2.4.0
Feature/alert muting part 2
Servers that upgraded to 2.3.0 before PR #625 shipped don't have the is_percent_growth, growth_pct, and vlf_count columns. This re-applies the idempotent ALTER TABLE from the 2.2.0-to-2.3.0 upgrade for those servers.
CLI: treated 1 failure as success in automated mode (intended for query_snapshots but applied to any failure). Now any failure = not success. GUI: had a similar workaround checking for query_snapshots specifically. Removed — failures should be reported honestly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Release prep: upgrade script + installer success fix
- Changelog for 2.4.0 - README: updated upgrade instructions, data storage location - Upgrade script 2.3.0-to-2.4.0: re-apply growth/VLF columns - Fix: installers no longer write SUCCESS when files fail Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Release prep v2.4.0
Release v2.4.0
- About window: replaced hyperlink with proper Button for "Check for Updates" in both Dashboard and Lite (matches PerformanceStudio) - Collector health: clear stale entries when a server is removed, fixing status bar showing errors for deleted servers - Pipeline: split Velopack uploads into separate steps so Dashboard and Lite don't conflict on release asset names - Version bump to 2.4.1 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v2.4.1: button style + health cleanup + pipeline fix
Release v2.4.1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )