Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
213 commits
Select commit Hold shift + click to select a range
2213d86
Added exclusions in GetLongRunningQueriesAsync() method for SP_SERVER…
HannahVernon Feb 27, 2026
9b249fc
Added TOP parameter for query in GetLongRunningQueriesAsync() method …
HannahVernon Feb 27, 2026
adefd25
Replaced waitForFilter string constructor with C# string interpolatio…
HannahVernon Feb 27, 2026
481a3a6
Merge pull request #2 from HannahVernon/feature/long-running-query-ex…
HannahVernon Feb 27, 2026
f75bb2d
Added exclusion for backup-related waits to GetLongRunningQueriesAsyn…
HannahVernon Feb 27, 2026
9c2c5f2
Merge pull request #4 from HannahVernon/feature/add-exclusion-for-BAC…
HannahVernon Feb 27, 2026
fd9b497
Reverted Controls/LandingPage.xaml.cs
HannahVernon Mar 2, 2026
a98ef7b
Added BROKER_RECEIVE_WAITFOR wait type to waitforFilter exclusions. …
HannahVernon Mar 2, 2026
b6d3d3f
Merge pull request #5 from HannahVernon/feature/add-exclusion-for-BAC…
HannahVernon Mar 2, 2026
ab1c47d
Added filtering for SP_SERVER_DIAGNOSTICS, WAITFOR, BROKER_RECEIVE_WA…
HannahVernon Mar 2, 2026
a061f99
Merge pull request #6 from HannahVernon/feature/sync-long-running-que…
HannahVernon Mar 2, 2026
4962abd
Merge branch 'erikdarlingdata:dev' into dev
HannahVernon Mar 2, 2026
8ac4903
Add configurable max results setting for long-running queries
HannahVernon Mar 3, 2026
c5476dd
Apply max results validation and Lite parity for long-running queries
HannahVernon Mar 3, 2026
b121b4a
Use GetInt64() when loading long-running query max results from JSON
HannahVernon Mar 3, 2026
1ceb065
Add configurable long-running query filter toggles
HannahVernon Mar 3, 2026
e10771e
Merge pull request #7 from HannahVernon/feature/long-running-queries-…
HannahVernon Mar 3, 2026
2f54765
merged with incoming dev branch
HannahVernon Mar 3, 2026
f8998d1
Merged with incoming dev branch.
HannahVernon Mar 4, 2026
4d55c32
Merge branch 'dev' into feature/long-running-queries-config-settings
HannahVernon Mar 4, 2026
d7a7e41
Merge pull request #8 from HannahVernon/feature/long-running-queries-…
HannahVernon Mar 4, 2026
0b06917
Add alert filter by database for Dashboard and Lite
HannahVernon Mar 4, 2026
8fffe7c
Fix #410 (#411)
ClaudioESSilva Mar 4, 2026
4110769
Fix #412 (#413)
ClaudioESSilva Mar 4, 2026
5c2b769
GUI installer: log installation history to config.installation_histor…
erikdarlingdata Mar 4, 2026
7bb9dd7
Feature/long running queries config settings (#415)
HannahVernon Mar 4, 2026
d3b7952
Sync plan viewer fixes from plan-b: spool labels, unmatched index det…
erikdarlingdata Mar 4, 2026
e3a646c
fixes many warnings, and pre-calculates the RegEx patterns at compile…
MisterZeus Mar 4, 2026
5fb6d47
Complete GeneratedRegex conversion and remove Compiled flags (#420)
erikdarlingdata Mar 4, 2026
6d4478a
Add permissions section to README with least-privilege setup (#421)
erikdarlingdata Mar 4, 2026
3daf1b0
Replace custom TrayToolTip with plain ToolTipText to fix crash
erikdarlingdata Mar 4, 2026
ebe6226
Add resilience to DuckDB read lock acquisition
erikdarlingdata Mar 4, 2026
0c6e320
Merged with incoming dev branch.
HannahVernon Mar 4, 2026
8eb6771
Restore excludedDatabases to GetAlertHealthAsync after merge
HannahVernon Mar 4, 2026
255cadb
Fix CA1859: use List<string>? for BuildDeadlockContextAsync parameter
HannahVernon Mar 4, 2026
562269f
Restore custom TrayToolTip and silently handle Hardcodet crash (issue…
erikdarlingdata Mar 4, 2026
b31b0f0
Merge pull request #424 from erikdarlingdata/fix/tray-tooltip-crash
erikdarlingdata Mar 4, 2026
7b22d82
Merge pull request #425 from erikdarlingdata/fix/lock-resilience
erikdarlingdata Mar 4, 2026
7544ebc
Fix incorrect table name in Data Retention section
erikdarlingdata Mar 4, 2026
d84496a
Fix RID Lookup analyzer rule to match new PhysicalOp label (#429)
erikdarlingdata Mar 4, 2026
0751e51
Merge pull request #428 from erikdarlingdata/fix/readme-retention-table
erikdarlingdata Mar 5, 2026
6e3fce3
Add uninstall option to CLI and GUI installers (#431)
erikdarlingdata Mar 5, 2026
9c04bb2
LOB compression + deduplication for query stats tables (#419)
erikdarlingdata Mar 5, 2026
d2500c2
Merge pull request #433 from erikdarlingdata/feature/lob-compression-…
erikdarlingdata Mar 5, 2026
aeecadc
Merge pull request #432 from erikdarlingdata/feature/uninstall
erikdarlingdata Mar 5, 2026
0d8868f
Add RESTORING database filter to waiting_tasks collector (#430)
erikdarlingdata Mar 5, 2026
44e5961
Merge pull request #434 from erikdarlingdata/fix/waiting-tasks-mirror…
erikdarlingdata Mar 5, 2026
30d7247
Add CI check to require version bump on PRs to main
erikdarlingdata Mar 5, 2026
f7e1b7e
Restore commercial support tiers to README
erikdarlingdata Mar 5, 2026
088351e
Merge pull request #437 from erikdarlingdata/fix/readme-commercial-su…
erikdarlingdata Mar 5, 2026
f41d087
fix: filter excluded databases before deadlock alert threshold check
HannahVernon Mar 5, 2026
5e41b5d
Fix Lite missing deadlock and blocking exclusion filtering
HannahVernon Mar 5, 2026
746591a
Restore 1000 cap on alert_long_running_query_max_results clamp
HannahVernon Mar 5, 2026
781069f
Update excluded databases help text to mention deadlock alerts
HannahVernon Mar 5, 2026
c26e2cd
Add wait stats query drill-down (#372)
erikdarlingdata Mar 5, 2026
18141ba
Merge pull request #442 from erikdarlingdata/feature/wait-drill-down
erikdarlingdata Mar 5, 2026
b85efe7
Merge pull request #435 from erikdarlingdata/feature/version-bump-check
erikdarlingdata Mar 5, 2026
bf62463
Add configurable alert cooldown periods for tray and email
HannahVernon Mar 5, 2026
4e2a4a8
Fix GetFilteredDeadlockCountAsync catch block returning 0 instead of …
HannahVernon Mar 5, 2026
648ac16
Use parameterized queries in GetBlockingValuesAsync and GetFilteredDe…
HannahVernon Mar 5, 2026
b1ca51b
Move database exclusions to Global Alert Filters section in Settings UI
HannahVernon Mar 5, 2026
988a6dc
Fix incorrect column reference in GetFilteredDeadlockCountAsync
HannahVernon Mar 5, 2026
a5decf8
Use XML-based deadlock filtering in Dashboard for cross-database accu…
HannahVernon Mar 5, 2026
19855c7
Filter excluded databases in Dashboard BuildBlockingContextAsync emai…
HannahVernon Mar 5, 2026
58c6c3e
Clear excluded databases on Restore Defaults in both editions
HannahVernon Mar 5, 2026
c6d65ae
Fix cooldown parity: dynamic email footer in Dashboard, validation in…
HannahVernon Mar 5, 2026
8f116d0
Fix deserialization clamping and validation abort issues
HannahVernon Mar 5, 2026
38769c6
Keep Settings window open on validation errors
HannahVernon Mar 5, 2026
fa4dde4
Fix poison wait false positives and alert log parsing (#445) (#448)
erikdarlingdata Mar 6, 2026
7a14a42
For Lite edition, fixed columns that are formatted for either seconds…
Mar 6, 2026
c46cc69
Add TCP port conflict detection for MCP server
HannahVernon Mar 6, 2026
0746f3f
Fix validation save behavior and MCP port checks
HannahVernon Mar 6, 2026
012a061
Add MCP port range validation and enforce minimum port 1024
HannahVernon Mar 6, 2026
b2c8adf
Document MCP port requirements in README
HannahVernon Mar 6, 2026
bf5e056
Add Auto port button and scope all port checks to localhost
HannahVernon Mar 6, 2026
966e72a
Added StopMcpServerAsync(), RestartMcpServerIfNeeded(), cleanup of in…
HannahVernon Mar 6, 2026
478f915
Merge pull request #452 from dphugo/fix/lite-sort-formatted-columns-b…
erikdarlingdata Mar 6, 2026
7b5a759
Merge pull request #444 from HannahVernon/feature/add-cooldown-period…
erikdarlingdata Mar 6, 2026
7c8ff6a
Add post-filter empty check in Dashboard BuildDeadlockContextAsync
erikdarlingdata Mar 6, 2026
57bbe60
Merge origin/dev into feature/add-alert-filter-by-database
erikdarlingdata Mar 6, 2026
fcc94d3
Merge pull request #456 from erikdarlingdata/feature/add-alert-filter…
erikdarlingdata Mar 6, 2026
05b90f3
Fix remaining formatted duration columns sorting alphabetically
erikdarlingdata Mar 6, 2026
99c1327
Merge pull request #457 from erikdarlingdata/fix/remaining-formatted-…
erikdarlingdata Mar 6, 2026
f52245f
Fix nullable dereference in Lite anomalous job alert
erikdarlingdata Mar 7, 2026
90f0650
Merge pull request #458 from erikdarlingdata/fix/nullable-percent-of-…
erikdarlingdata Mar 7, 2026
9d00629
Purge processed XE staging rows in data retention proc
erikdarlingdata Mar 7, 2026
db14906
Merge pull request #461 from erikdarlingdata/feature/purge-processed-…
erikdarlingdata Mar 7, 2026
70b31cf
Fix procedure_stats plan query to use DECOMPRESS after compression mi…
erikdarlingdata Mar 7, 2026
27d4176
Merge pull request #462 from erikdarlingdata/fix/procedure-stats-deco…
erikdarlingdata Mar 7, 2026
cc83cd3
Add named collection presets (Aggressive, Balanced, Low-Impact) — clo…
erikdarlingdata Mar 7, 2026
f71bd58
Merge pull request #463 from erikdarlingdata/feature/collection-presets
erikdarlingdata Mar 7, 2026
4a5b8a9
Add FinOps monitoring: database size tracking, server properties, and…
erikdarlingdata Mar 7, 2026
27dc20a
Merge pull request #464 from erikdarlingdata/feature/finops-monitoring
erikdarlingdata Mar 7, 2026
f68fa71
Fix FinOps CI failures: sql_variant CONCAT and test table count
erikdarlingdata Mar 7, 2026
c1893e4
Merge pull request #465 from erikdarlingdata/fix/finops-ci
erikdarlingdata Mar 7, 2026
48ba759
Fix finops_utilization_efficiency view: separate window function from…
erikdarlingdata Mar 7, 2026
f349dec
Merge pull request #466 from erikdarlingdata/fix/finops-view-aggregate
erikdarlingdata Mar 7, 2026
5c4595a
Fix CI validation: update object checklist for presets and FinOps (#467)
erikdarlingdata Mar 7, 2026
295c9bb
Widen SQL Validation path filter to include validation script and wor…
erikdarlingdata Mar 7, 2026
7aec5f8
Strip XML processing instructions from sql_command/sql_text in Dashbo…
erikdarlingdata Mar 7, 2026
4edf483
Merge pull request #469 from erikdarlingdata/feature/strip-xml-pi-wra…
erikdarlingdata Mar 7, 2026
4c72984
Use user's locale for date/time formatting in WPF bindings — closes #459
erikdarlingdata Mar 8, 2026
2cb3aa6
Merge pull request #470 from erikdarlingdata/fix/locale-date-format
erikdarlingdata Mar 8, 2026
b29944c
Fix database_size_stats InvalidCastException on compatibility_level
erikdarlingdata Mar 8, 2026
35e90ca
Merge pull request #471 from erikdarlingdata/fix/database-size-tinyin…
erikdarlingdata Mar 8, 2026
b8578f1
Enrich database_size_stats with volume-level drive space from dm_os_v…
erikdarlingdata Mar 8, 2026
b050e6e
Merge pull request #472 from erikdarlingdata/feature/drive-space-enri…
erikdarlingdata Mar 8, 2026
30dfd81
Sync PlanAnalyzer rules from PerformanceStudio
erikdarlingdata Mar 8, 2026
8180559
Merge pull request #473 from erikdarlingdata/feature/sync-plananalyze…
erikdarlingdata Mar 8, 2026
523acd1
FinOps estate-level tabs, session_stats collector, archive reconcilia…
erikdarlingdata Mar 8, 2026
6028a2d
Merge pull request #474 from erikdarlingdata/feature/finops-estate-se…
erikdarlingdata Mar 8, 2026
6b1d450
Sync Rule 5 message format and seek predicate parsing from plan-b
erikdarlingdata Mar 8, 2026
90cf850
Merge pull request #475 from erikdarlingdata/feature/sync-plananalyze…
erikdarlingdata Mar 8, 2026
d1f3007
Fix schema test: update table count 26 -> 27 for session_stats
erikdarlingdata Mar 8, 2026
7b189a1
Merge pull request #476 from erikdarlingdata/fix/schema-test-count
erikdarlingdata Mar 8, 2026
1ef5e0e
Port Utilization tab redesign to Dashboard, align metrics between apps
erikdarlingdata Mar 8, 2026
d6ca66c
Merge pull request #478 from erikdarlingdata/feature/utilization-parity
erikdarlingdata Mar 8, 2026
6a355ab
FinOps parity follow-up: CPU count, database sizes filtering, sort order
erikdarlingdata Mar 8, 2026
3ba5689
Merge pull request #479 from erikdarlingdata/feature/finops-parity-fo…
erikdarlingdata Mar 8, 2026
c0f7e26
Sync PlanAnalyzer improvements from PerformanceStudio
erikdarlingdata Mar 9, 2026
9d21a29
Merge pull request #480 from erikdarlingdata/feature/sync-plan-analyz…
erikdarlingdata Mar 9, 2026
ef22ac7
Fix first-collection spike for PerfMon and other cumulative counters …
erikdarlingdata Mar 9, 2026
46b3916
Add Entra ID interactive authentication (MFA) to both installers (#481)
erikdarlingdata Mar 9, 2026
6045aaf
Fix Dashboard UI hang when opening tab for offline server (#477)
erikdarlingdata Mar 9, 2026
ced3df5
Merge pull request #485 from erikdarlingdata/feature/fix-ui-hang-477
erikdarlingdata Mar 9, 2026
92ab03e
Merge pull request #483 from erikdarlingdata/feature/fix-perfmon-spik…
erikdarlingdata Mar 9, 2026
151fa92
Merge pull request #484 from erikdarlingdata/feature/entra-auth-481
erikdarlingdata Mar 9, 2026
1850d70
Add Storage Growth and Index Analysis to FinOps tab in Dashboard and …
erikdarlingdata Mar 9, 2026
46e08d6
Merge pull request #487 from erikdarlingdata/feature/finops-storage-i…
erikdarlingdata Mar 9, 2026
e989f13
Merged with incoming dev branch.
HannahVernon Mar 9, 2026
9975462
Rebase with upstream/dev.
HannahVernon Mar 9, 2026
3c0d7fa
fixes #488
ClaudioESSilva Mar 9, 2026
882a935
Address code review feedback on MCP port validation
HannahVernon Mar 9, 2026
4615f23
fixes #489
ClaudioESSilva Mar 9, 2026
d5e7033
Merge pull request #453 from HannahVernon/feature/mcp-port-validation
erikdarlingdata Mar 9, 2026
bcf85c4
Merge pull request #490 from ClaudioESSilva/fix/minor-ui-cuts
erikdarlingdata Mar 9, 2026
169bc6a
Fix first-collection spike for query and procedure stats charts (#482)
erikdarlingdata Mar 9, 2026
d4261dc
Merge pull request #491 from erikdarlingdata/feature/fix-query-proc-s…
erikdarlingdata Mar 9, 2026
7454b60
Fix FinOps tab server dropdown not updating when servers change (#496)
erikdarlingdata Mar 9, 2026
636115b
Fix Int16 cast error in database_size_stats collector on Azure SQL DB…
erikdarlingdata Mar 9, 2026
594ab6c
Fix query_store and database_scoped_config collectors failing on Azur…
erikdarlingdata Mar 9, 2026
733d1b9
Merge pull request #497 from erikdarlingdata/feature/fix-hadr-azure-494
erikdarlingdata Mar 9, 2026
d62f361
Merge pull request #498 from erikdarlingdata/feature/fix-int16-cast-495
erikdarlingdata Mar 9, 2026
b196195
Merge pull request #499 from erikdarlingdata/feature/fix-finops-dropd…
erikdarlingdata Mar 9, 2026
206ddc8
Add alert muting feature (both editions)
HannahVernon Mar 9, 2026
aae57db
Document alert muting in README
HannahVernon Mar 9, 2026
fb4ec8f
Merged with incoming dev branch.
HannahVernon Mar 9, 2026
ba45359
Add View Details context menu to alert history
HannahVernon Mar 9, 2026
32131ed
Add context-sensitive detail text to alert history
HannahVernon Mar 9, 2026
d4667ff
Document mute options and alert detail window in README
HannahVernon Mar 9, 2026
64e6402
Open alert details on double-click in alert history
HannahVernon Mar 9, 2026
9ea37d8
Fix mute rules checkbox to be interactive
HannahVernon Mar 9, 2026
80f799a
Add Close button to Manage Mute Rules window
HannahVernon Mar 9, 2026
5edacda
Fix mute rule checkbox not persisting across restarts
HannahVernon Mar 9, 2026
f7db04e
v2.2.0 release prep: RDS/cloud fixes, USE removal, README sync, chang…
erikdarlingdata Mar 9, 2026
e6a93aa
Merge pull request #500 from erikdarlingdata/feature/release-prep-2.2.0
erikdarlingdata Mar 9, 2026
4446cf0
Sync PlanAnalyzer and ShowPlanParser changes from Performance Studio …
erikdarlingdata Mar 9, 2026
202bc14
Sync analyzer improvements from Performance Studio (#502)
erikdarlingdata Mar 9, 2026
cd97716
Fix sp_IndexCleanup column mapping and show all result set columns (#…
erikdarlingdata Mar 9, 2026
788cc68
Add SSMS-parity edge tooltips and always show ManyToMany for merge jo…
erikdarlingdata Mar 9, 2026
c2c02de
FinOps tab improvements: 6 features for v2.2.0
erikdarlingdata Mar 10, 2026
7ac9c27
Merge pull request #505 from erikdarlingdata/feature/finops-improvements
erikdarlingdata Mar 10, 2026
fe8bc3c
Add compression ratio stats to 2.2.0 changelog
erikdarlingdata Mar 10, 2026
fb56b5f
Merge pull request #506 from erikdarlingdata/changelog/compression-stats
erikdarlingdata Mar 10, 2026
f024136
Fix ComboBox focus steal in plan viewer + DOP 2 skew false positive (…
erikdarlingdata Mar 10, 2026
f5ba219
Fix checkbox requiring double-click in Manage Mute Rules
HannahVernon Mar 10, 2026
08185a4
Enrich blocking and deadlock alert detail text
HannahVernon Mar 10, 2026
db75fce
Add performance instrumentation, caching, and parallelization
erikdarlingdata Mar 10, 2026
2e51acf
Revert parallelization of FinOps data loads
erikdarlingdata Mar 10, 2026
3a7a98f
Merge pull request #509 from erikdarlingdata/feature/perf-instrumenta…
erikdarlingdata Mar 10, 2026
a7658f5
Context-sensitive pattern fields and focus improvements
HannahVernon Mar 10, 2026
8355b1b
Document all 7 alert metrics and poison wait types in README
HannahVernon Mar 10, 2026
d192188
Add Microsoft Docs links for poison wait types
HannahVernon Mar 10, 2026
9f0e079
Add SignPath code signing to release workflow
erikdarlingdata Mar 10, 2026
f516384
Merge pull request #511 from erikdarlingdata/feature/signpath-signing
erikdarlingdata Mar 10, 2026
bc74c5b
Fix alert history selection and double-click in Lite edition
HannahVernon Mar 10, 2026
de42ce1
Fix three issues from Dashboard vs Lite comparative audit
HannahVernon Mar 10, 2026
dcb79c3
Cache JsonSerializerOptions to fix CA1869 warning
HannahVernon Mar 10, 2026
7dc5744
Address PR review feedback from maintainer
HannahVernon Mar 10, 2026
6004b31
Fix Rule 22 table variable warnings on modification operators (#513)
erikdarlingdata Mar 10, 2026
66334a4
Lite UI responsiveness overhaul + Query Store collector optimization …
erikdarlingdata Mar 11, 2026
f53c7cf
Add ReadOnlyIntent connection option to Lite
erikdarlingdata Mar 11, 2026
757b264
Merge pull request #515 from erikdarlingdata/feature/readonly-intent
erikdarlingdata Mar 11, 2026
f3e4470
Merge upstream/dev into feature/alert-muting
HannahVernon Mar 11, 2026
be17045
Add test to prevent NOT NULL on ALTER TABLE ADD COLUMN
HannahVernon Mar 11, 2026
2cc6afd
Improve migration guard test to detect multi-line violations
HannahVernon Mar 11, 2026
f462320
Merge remote-tracking branch 'upstream/dev' into feature/alert-muting
HannahVernon Mar 11, 2026
cd6e1af
Upgrade DuckDB to 1.5.0 + automatic parquet compaction + monthly rete…
erikdarlingdata Mar 11, 2026
34aed9d
Merge pull request #516 from erikdarlingdata/feature/duckdb-1.5-compa…
erikdarlingdata Mar 11, 2026
1857fc5
Merge remote-tracking branch 'upstream/dev' into feature/alert-muting
HannahVernon Mar 11, 2026
c7fb066
Show used vs file size in Lite status bar
erikdarlingdata Mar 11, 2026
4e783a6
Merge pull request #517 from erikdarlingdata/fix/duckdb-used-size-sta…
erikdarlingdata Mar 11, 2026
fe3172a
Merged with upstream dev.
HannahVernon Mar 11, 2026
1c2d464
Add reader/append/flush timing diagnostic to Query Store collector
erikdarlingdata Mar 11, 2026
c3668ee
Merge pull request #518 from erikdarlingdata/fix/query-store-spike-di…
erikdarlingdata Mar 11, 2026
92b6a1e
Merged with incoming upstreadm dev branch.
HannahVernon Mar 11, 2026
036afea
Update changelog and README for v2.2.0 release
erikdarlingdata Mar 11, 2026
1ec46cb
Merge pull request #519 from erikdarlingdata/docs/changelog-readme-v2…
erikdarlingdata Mar 11, 2026
8b2efd3
Fix DynamicResource on Freezable.Color in MutedBanner
HannahVernon Mar 11, 2026
e97f3b4
Merge branch 'feature/alert-muting' of https://github.com/HannahVerno…
HannahVernon Mar 11, 2026
40e5819
Fix CheckBox Enabled toggle persisting wrong value
HannahVernon Mar 11, 2026
8a20b75
Fix Lite MCP get_alert_history to use archive view and filter dismissed
HannahVernon Mar 11, 2026
5cf7fce
Register UserPreferencesService in Dashboard MCP DI container
HannahVernon Mar 11, 2026
5a543cc
Fix 9 bugs: clone-on-edit, mute-similar mode, persist ordering, write…
HannahVernon Mar 11, 2026
0055b94
Fix lock ordering in LogAlertAsync and add Dashboard CPU detailText
HannahVernon Mar 11, 2026
afe04d2
Fix ReadOnlyIntent connections sharing server_id in DuckDB (#521)
erikdarlingdata Mar 11, 2026
5609d83
Merge PR #512: Feature/alert muting
erikdarlingdata Mar 11, 2026
b21580c
Add alert muting and ReadOnlyIntent fix to changelog for v2.2.0
erikdarlingdata Mar 12, 2026
fe20601
Merge pull request #524 from erikdarlingdata/docs/changelog-alert-muting
erikdarlingdata Mar 12, 2026
2331254
Merge pull request #525 from erikdarlingdata/dev
erikdarlingdata Mar 12, 2026
a995eed
Fix SignPath signing by uploading directories instead of zips
erikdarlingdata Mar 12, 2026
bc0f41b
Merge pull request #526 from erikdarlingdata/fix/signpath-artifact-up…
erikdarlingdata Mar 12, 2026
8ed7a95
Merge pull request #527 from erikdarlingdata/dev
erikdarlingdata Mar 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions .github/sql/ci_validate_installation.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ IF SCHEMA_ID(N'report') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: sche
PRINT '';

/*
Procedures in collect schema (36)
Procedures in collect schema (38)
*/
PRINT 'Checking collect procedures...';

Expand Down Expand Up @@ -70,21 +70,21 @@ IF OBJECT_ID(N'collect.database_configuration_collector', N'P') IS NULL BEGIN SE
IF OBJECT_ID(N'collect.configuration_issues_analyzer', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: collect.configuration_issues_analyzer'; END; SET @checked += 1;
IF OBJECT_ID(N'collect.scheduled_master_collector', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: collect.scheduled_master_collector'; END; SET @checked += 1;
IF OBJECT_ID(N'collect.running_jobs_collector', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: collect.running_jobs_collector'; END; SET @checked += 1;
IF OBJECT_ID(N'collect.database_size_stats_collector', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: collect.database_size_stats_collector'; END; SET @checked += 1;
IF OBJECT_ID(N'collect.server_properties_collector', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: collect.server_properties_collector'; END; SET @checked += 1;

PRINT '';

/*
Procedures in config schema (10)
Procedures in config schema (8)
*/
PRINT 'Checking config procedures...';

IF OBJECT_ID(N'config.ensure_config_tables', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.ensure_config_tables'; END; SET @checked += 1;
IF OBJECT_ID(N'config.ensure_collection_table', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.ensure_collection_table'; END; SET @checked += 1;
IF OBJECT_ID(N'config.update_collector_frequency', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.update_collector_frequency'; END; SET @checked += 1;
IF OBJECT_ID(N'config.set_collector_enabled', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.set_collector_enabled'; END; SET @checked += 1;
IF OBJECT_ID(N'config.enable_realtime_monitoring', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.enable_realtime_monitoring'; END; SET @checked += 1;
IF OBJECT_ID(N'config.enable_consulting_analysis', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.enable_consulting_analysis'; END; SET @checked += 1;
IF OBJECT_ID(N'config.enable_baseline_monitoring', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.enable_baseline_monitoring'; END; SET @checked += 1;
IF OBJECT_ID(N'config.apply_collection_preset', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.apply_collection_preset'; END; SET @checked += 1;
IF OBJECT_ID(N'config.show_collection_schedule', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.show_collection_schedule'; END; SET @checked += 1;
IF OBJECT_ID(N'config.data_retention', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.data_retention'; END; SET @checked += 1;
IF OBJECT_ID(N'config.check_hung_collector_job', N'P') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: config.check_hung_collector_job'; END; SET @checked += 1;
Expand All @@ -102,7 +102,7 @@ IF OBJECT_ID(N'config.server_info', N'V') IS NULL BEGIN SET @missing += 1; P
PRINT '';

/*
Views in report schema (37)
Views in report schema (41)
Note: report.query_snapshots and report.query_snapshots_blocking are created
dynamically by collect.query_snapshots_create_views, so they are not checked here.
*/
Expand Down Expand Up @@ -144,6 +144,10 @@ IF OBJECT_ID(N'report.scheduler_cpu_analysis', N'V') IS NULL BEGIN
IF OBJECT_ID(N'report.critical_issues', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.critical_issues'; END; SET @checked += 1;
IF OBJECT_ID(N'report.memory_usage_trends', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.memory_usage_trends'; END; SET @checked += 1;
IF OBJECT_ID(N'report.running_jobs', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.running_jobs'; END; SET @checked += 1;
IF OBJECT_ID(N'report.finops_database_resource_usage', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.finops_database_resource_usage'; END; SET @checked += 1;
IF OBJECT_ID(N'report.finops_utilization_efficiency', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.finops_utilization_efficiency'; END; SET @checked += 1;
IF OBJECT_ID(N'report.finops_peak_utilization', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.finops_peak_utilization'; END; SET @checked += 1;
IF OBJECT_ID(N'report.finops_application_resource_usage', N'V') IS NULL BEGIN SET @missing += 1; PRINT ' MISSING: report.finops_application_resource_usage'; END; SET @checked += 1;

PRINT '';

Expand Down Expand Up @@ -180,7 +184,7 @@ WHERE OBJECT_SCHEMA_NAME(t.object_id) = N'config';
PRINT ' collect schema tables: ' + CONVERT(varchar(10), @collect_tables);
PRINT ' config schema tables: ' + CONVERT(varchar(10), @config_tables);

IF @collect_tables < 19 BEGIN SET @missing += 1; PRINT ' MISSING: expected >= 20 collect tables, found ' + CONVERT(varchar(10), @collect_tables); END; SET @checked += 1;
IF @collect_tables < 21 BEGIN SET @missing += 1; PRINT ' MISSING: expected >= 21 collect tables, found ' + CONVERT(varchar(10), @collect_tables); END; SET @checked += 1;
IF @config_tables < 5 BEGIN SET @missing += 1; PRINT ' MISSING: expected >= 5 config tables, found ' + CONVERT(varchar(10), @config_tables); END; SET @checked += 1;

PRINT '';
Expand Down
78 changes: 78 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ on:

permissions:
contents: write
id-token: write
actions: read

jobs:
build:
Expand Down Expand Up @@ -78,6 +80,82 @@ jobs:

Compress-Archive -Path 'publish/Installer/*' -DestinationPath "releases/PerformanceMonitorInstaller-$version.zip" -Force

- name: Upload Dashboard for signing
if: github.event_name == 'release'
id: upload-dashboard
uses: actions/upload-artifact@v4
with:
name: Dashboard-unsigned
path: publish/Dashboard/

- name: Upload Lite for signing
if: github.event_name == 'release'
id: upload-lite
uses: actions/upload-artifact@v4
with:
name: Lite-unsigned
path: publish/Lite/

- name: Upload Installer for signing
if: github.event_name == 'release'
id: upload-installer
uses: actions/upload-artifact@v4
with:
name: Installer-unsigned
path: publish/Installer/

- name: Sign Dashboard
if: github.event_name == 'release'
uses: signpath/github-action-submit-signing-request@v1
with:
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
organization-id: '7969f8b6-d946-4a74-9bac-a55856d8b8e0'
project-slug: 'PerformanceMonitor'
signing-policy-slug: 'test-signing'
artifact-configuration-slug: 'Dashboard'
github-artifact-id: '${{ steps.upload-dashboard.outputs.artifact-id }}'
wait-for-completion: true
output-artifact-directory: 'signed/Dashboard'

- name: Sign Lite
if: github.event_name == 'release'
uses: signpath/github-action-submit-signing-request@v1
with:
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
organization-id: '7969f8b6-d946-4a74-9bac-a55856d8b8e0'
project-slug: 'PerformanceMonitor'
signing-policy-slug: 'test-signing'
artifact-configuration-slug: 'Lite'
github-artifact-id: '${{ steps.upload-lite.outputs.artifact-id }}'
wait-for-completion: true
output-artifact-directory: 'signed/Lite'

- name: Sign Installer
if: github.event_name == 'release'
uses: signpath/github-action-submit-signing-request@v1
with:
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
organization-id: '7969f8b6-d946-4a74-9bac-a55856d8b8e0'
project-slug: 'PerformanceMonitor'
signing-policy-slug: 'test-signing'
artifact-configuration-slug: 'Installers'
github-artifact-id: '${{ steps.upload-installer.outputs.artifact-id }}'
wait-for-completion: true
output-artifact-directory: 'signed/Installer'

- name: Replace with signed artifacts
if: github.event_name == 'release'
shell: pwsh
run: |
$version = "${{ steps.version.outputs.VERSION }}"
# Re-zip signed files into release archives
Remove-Item "releases/PerformanceMonitorDashboard-$version.zip" -ErrorAction SilentlyContinue
Compress-Archive -Path 'signed/Dashboard/*' -DestinationPath "releases/PerformanceMonitorDashboard-$version.zip" -Force
Remove-Item "releases/PerformanceMonitorLite-$version.zip" -ErrorAction SilentlyContinue
Compress-Archive -Path 'signed/Lite/*' -DestinationPath "releases/PerformanceMonitorLite-$version.zip" -Force
Remove-Item "releases/PerformanceMonitorInstaller-$version.zip" -ErrorAction SilentlyContinue
Compress-Archive -Path 'signed/Installer/*' -DestinationPath "releases/PerformanceMonitorInstaller-$version.zip" -Force

- name: Generate checksums
if: github.event_name == 'release'
shell: pwsh
Expand Down
48 changes: 48 additions & 0 deletions .github/workflows/check-version-bump.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Check version bump
on:
pull_request:
branches: [main]

jobs:
check-version:
if: github.head_ref == 'dev'
runs-on: ubuntu-latest

steps:
- name: Checkout PR branch
uses: actions/checkout@v4

- name: Get PR version
id: pr
shell: pwsh
run: |
$version = ([xml](Get-Content Dashboard/Dashboard.csproj)).Project.PropertyGroup.Version | Where-Object { $_ }
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
Write-Host "PR version: $version"

- name: Checkout main
uses: actions/checkout@v4
with:
ref: main
path: main-branch

- name: Get main version
id: main
shell: pwsh
run: |
$version = ([xml](Get-Content main-branch/Dashboard/Dashboard.csproj)).Project.PropertyGroup.Version | Where-Object { $_ }
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
Write-Host "Main version: $version"

- name: Compare versions
env:
PR_VERSION: ${{ steps.pr.outputs.VERSION }}
MAIN_VERSION: ${{ steps.main.outputs.VERSION }}
run: |
echo "Main version: $MAIN_VERSION"
echo "PR version: $PR_VERSION"
if [ "$PR_VERSION" == "$MAIN_VERSION" ]; then
echo "::error::Version in Dashboard.csproj ($PR_VERSION) has not changed from main. Bump the version before merging to main."
exit 1
fi
echo "✅ Version bumped: $MAIN_VERSION → $PR_VERSION"
4 changes: 2 additions & 2 deletions .github/workflows/sql-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ name: SQL Validation
on:
push:
branches: [dev]
paths: ['install/**']
paths: ['install/**', '.github/sql/**', '.github/workflows/sql-validation.yml']
pull_request:
branches: [dev]
paths: ['install/**']
paths: ['install/**', '.github/sql/**', '.github/workflows/sql-validation.yml']

jobs:
validate-sql:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,5 @@ nul

# Lite runtime configuration (user-specific)
Lite/config/servers.json
Lite/servers.json
Lite/collection_schedule.json
Loading
Loading