Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
607 commits
Select commit Hold shift + click to select a range
3bba153
Merge pull request #2547 from erikdarlingdata/feat/2530-web-pg-tabs
erikdarlingdata Aug 22, 2026
9a56278
Give Lite's Overview lanes the same shared gutter as the Darling view…
erikdarlingdata Aug 22, 2026
29cc79d
Serialize the PostgreSQL int8 identities as strings, not JSON numbers…
erikdarlingdata Aug 22, 2026
f838b2b
Merge pull request #2551 from erikdarlingdata/fix/2535-lite-lane-gutt…
erikdarlingdata Aug 22, 2026
e51870c
Move the nine PostgreSQL reads into the shared store layer (#2530)
erikdarlingdata Aug 22, 2026
e1a33bc
Give a PostgreSQL target PostgreSQL tabs in the WPF viewer (#2530)
erikdarlingdata Aug 22, 2026
a1b621a
Make get_pg_top_queries parse at all, and let a throw reach the capab…
erikdarlingdata Aug 22, 2026
663a2bd
Merge pull request #2553 from erikdarlingdata/fix/2548-queryid-string
erikdarlingdata Aug 22, 2026
8a98618
Address review: a dropped stored field is a category, not two columns
erikdarlingdata Aug 22, 2026
9b91b9a
Merge branch 'dev' of https://github.com/erikdarlingdata/PerformanceM…
erikdarlingdata Aug 22, 2026
1193861
Merge dev: point #2548's new pins at the readers' new home
erikdarlingdata Aug 22, 2026
5aa0dcf
Look a tab's framing note up by id, not by position
erikdarlingdata Aug 22, 2026
c590977
Drop an engine-name fallback that cannot be reached
erikdarlingdata Aug 22, 2026
1ff1595
Give the statement grid the height its role implies, and trim the badge
erikdarlingdata Aug 22, 2026
1f41186
Fix the CI red, and two more review findings
erikdarlingdata Aug 22, 2026
8ec9e8c
Merge pull request #2555 from erikdarlingdata/feat/2530-viewer-pg-tabs
erikdarlingdata Aug 22, 2026
246ec1e
Report when darling.json disagrees with a REGISTERED server's registr…
erikdarlingdata Aug 23, 2026
e3eeb6d
Add a runtime-precondition miss vocabulary, evaluated at read time (#…
erikdarlingdata Aug 23, 2026
0d5124c
Remove the files an upgrade's new build no longer ships (#2529)
erikdarlingdata Aug 23, 2026
1317c0b
A paused server gets its own sentence, and the covered field set is d…
erikdarlingdata Aug 23, 2026
fc4b20d
Reflow the credential paragraph so the engine gate gets its own sentence
erikdarlingdata Aug 23, 2026
1ec0737
Give Query Store's ERROR state its own remedy (review)
erikdarlingdata Aug 23, 2026
e12b92d
Make the shipped PowerShell ASCII-only: 5.1 could not parse it (#2529)
erikdarlingdata Aug 23, 2026
bd258a7
Four folds are not the same fold on both engines
erikdarlingdata Aug 23, 2026
a3c5e8f
Ask whether a manifest path is rooted BEFORE normalization strips it …
erikdarlingdata Aug 23, 2026
8ec84f9
Merge pull request #2557 from erikdarlingdata/feature/2546-runtime-pr…
erikdarlingdata Aug 23, 2026
8373e1c
Merge remote-tracking branch 'origin/dev' into fix/2552-server-settin…
erikdarlingdata Aug 23, 2026
375a8e0
Collect PostgreSQL index usage and table bloat (#2541, #2542)
erikdarlingdata Aug 23, 2026
28f2a69
Merge remote-tracking branch 'origin/dev' into feature/2541-2542-pg-i…
erikdarlingdata Aug 23, 2026
d5826d5
Merge remote-tracking branch 'origin/dev' into fix/2529-stale-file-re…
erikdarlingdata Aug 23, 2026
cc7120b
Merge pull request #2556 from erikdarlingdata/fix/2552-server-setting…
erikdarlingdata Aug 23, 2026
7d6f34c
Fix the five CI reds: two stale registry pins, one unranked highlight…
erikdarlingdata Aug 23, 2026
3a995df
Make the two surfaces share the suppression rule instead of matching …
erikdarlingdata Aug 23, 2026
d7fdd95
Merge remote-tracking branch 'origin/dev' into feature/2541-2542-pg-i…
erikdarlingdata Aug 23, 2026
8ca15ab
Refuse an absolute path where the raw text is, not in the predicate (…
erikdarlingdata Aug 23, 2026
6d26d14
Merge remote-tracking branch 'origin/dev' into fix/2529-stale-file-re…
erikdarlingdata Aug 23, 2026
da1e90c
Drain both PowerShell streams concurrently, in both probe harnesses (…
erikdarlingdata Aug 23, 2026
6b7be5a
Address all six review findings; two were real suppression bugs
erikdarlingdata Aug 23, 2026
c1010cd
Read the previous manifest before the copy, not after it (#2529)
erikdarlingdata Aug 23, 2026
7682afc
Re-pin the sort test on the compound key the review fix introduced
erikdarlingdata Aug 23, 2026
2443499
Merge pull request #2560 from erikdarlingdata/feature/2541-2542-pg-in…
erikdarlingdata Aug 23, 2026
68f0671
Hand the exclusion rule raw text at the two callers that normalized f…
erikdarlingdata Aug 23, 2026
7bb7054
Merge remote-tracking branch 'origin/dev' into fix/2529-stale-file-re…
erikdarlingdata Aug 23, 2026
f9fdfc6
Let the kill filter catch NotSupportedException too (#2529)
erikdarlingdata Aug 23, 2026
eac89f9
Collect the session states behind a pinned xmin horizon (#2540)
erikdarlingdata Aug 23, 2026
dc717a3
Read and expose the session states, with the causal claim gated on th…
erikdarlingdata Aug 23, 2026
e4f887e
Merge pull request #2558 from erikdarlingdata/fix/2529-stale-file-rem…
erikdarlingdata Aug 23, 2026
a582c5f
Pin the session-states collector and read, including the claim it mus…
erikdarlingdata Aug 23, 2026
4098a8e
Document the session-states surface, and correct four stale counts #2…
erikdarlingdata Aug 23, 2026
de924a1
Say what total_sessions counts, and why it is not filtered to client …
erikdarlingdata Aug 23, 2026
ef3ecbc
Put the sessions panel on the Vacuum tab of both UIs, first in the ca…
erikdarlingdata Aug 23, 2026
a89aebd
Measure the redacted column set instead of enumerating it, and make a…
erikdarlingdata Aug 23, 2026
24ebd39
Fix the red build, a cross-surface band disagreement, and a stored co…
erikdarlingdata Aug 23, 2026
6083b62
Merge pull request #2563 from erikdarlingdata/feature/2540-pg-session…
erikdarlingdata Aug 23, 2026
785f692
Serve the web dashboard over HTTPS, so its token stops crossing the L…
erikdarlingdata Aug 23, 2026
7856a88
Carry the intermediate chain, and warn on a stray PFX password (#2562…
erikdarlingdata Aug 23, 2026
7b472f0
Identify the PKCS#12 leaf as the terminal node, not the first cert wi…
erikdarlingdata Aug 23, 2026
77d456c
Release the certificate on the one bail path that kept it (#2562 revi…
erikdarlingdata Aug 23, 2026
cc33583
Merge pull request #2568 from erikdarlingdata/feature/2562-web-https-…
erikdarlingdata Aug 23, 2026
2865627
Let a wildcard listen accept any IP literal, so a LAN client stops ge…
erikdarlingdata Aug 24, 2026
8d4798b
Merge pull request #2570 from erikdarlingdata/fix/2569-wildcard-host-…
erikdarlingdata Aug 24, 2026
2c62087
Report a gated-off collector honestly, instead of asserting nothing i…
erikdarlingdata Aug 24, 2026
9139097
Land the gated-off arm on Lite too, and fix my own pin's false positi…
erikdarlingdata Aug 24, 2026
05b8e57
Point the upgrade-path gate at a store users actually have, and guard…
erikdarlingdata Aug 24, 2026
325792e
Merge pull request #2571 from erikdarlingdata/fix/2559-gated-collecto…
erikdarlingdata Aug 24, 2026
1a71e21
Give each ladder fixture its own scratch database (#2572)
erikdarlingdata Aug 24, 2026
a0a4104
Merge remote-tracking branch 'origin/dev' into fix/2572-ladder-fixtur…
erikdarlingdata Aug 24, 2026
672155a
Fold the Unreleased Fixed sections back into one (#2572)
erikdarlingdata Aug 24, 2026
61b4017
Fail loudly when the fixture set is empty, instead of vanishing (#257…
erikdarlingdata Aug 24, 2026
9cce131
Merge pull request #2573 from erikdarlingdata/fix/2572-ladder-fixture…
erikdarlingdata Aug 24, 2026
b11c209
Restrict the darling.json copy the rollback backup takes (#2574)
erikdarlingdata Aug 24, 2026
5ac2735
Stop stranding ExtractFunction's doc comment (#2574 review)
erikdarlingdata Aug 24, 2026
219fe98
Correct the changelog entry's account of where the backups came from …
erikdarlingdata Aug 24, 2026
90baad0
Verify the ACL landed, and stop the harden skipping silently (#2574 r…
erikdarlingdata Aug 24, 2026
240297c
Merge pull request #2576 from erikdarlingdata/fix/2574-harden-rollbac…
erikdarlingdata Aug 24, 2026
a1fe968
Skip a gated-off collector before dispatch on every engine, not just …
erikdarlingdata Aug 24, 2026
b8be783
Probe the connection string startup opens, not the raw one (#2578)
erikdarlingdata Aug 24, 2026
0d962fa
Add the changelog entry for the self-test fix (#2578)
erikdarlingdata Aug 24, 2026
982f12e
Fix the other two dispatch loops, not just the scheduled sweep (#2579…
erikdarlingdata Aug 24, 2026
4f18300
Move the self-test pin to the class that owns that surface (#2578 rev…
erikdarlingdata Aug 24, 2026
c9682b9
Merge pull request #2580 from erikdarlingdata/fix/2579-predispatch-sk…
erikdarlingdata Aug 24, 2026
5a8b6d9
Merge remote-tracking branch 'origin/dev' into fix/2578-selftest-effe…
erikdarlingdata Aug 24, 2026
5989962
Merge pull request #2581 from erikdarlingdata/fix/2578-selftest-effec…
erikdarlingdata Aug 24, 2026
cf2760a
Say whether a PostgreSQL target can capture plans at all (#2564)
erikdarlingdata Aug 24, 2026
2786d8a
Finish the registration the collector needed, and take both review fi…
erikdarlingdata Aug 24, 2026
9c3841d
Give the readiness collector its panel, and bump the catalog count (#…
erikdarlingdata Aug 24, 2026
d69796e
Merge pull request #2582 from erikdarlingdata/feature/2564-pg-plan-ca…
erikdarlingdata Aug 24, 2026
581d90c
Carry an authenticated subject in the web session cookie (#2550)
erikdarlingdata Aug 24, 2026
85e3b2d
Merge pull request #2583 from erikdarlingdata/feature/2550-session-co…
erikdarlingdata Aug 24, 2026
fb4533a
Check log_line_prefix for %Q, and stop claiming auto_explain is unava…
erikdarlingdata Aug 24, 2026
193f4f8
Derive the facet-row assertion from the roster instead of a literal
erikdarlingdata Aug 24, 2026
aa2c636
Merge pull request #2584 from erikdarlingdata/feature/2538-plan-attri…
erikdarlingdata Aug 24, 2026
06c14a1
Stop gating SQL-Agent collection on msdb access (#2559)
erikdarlingdata Aug 24, 2026
0e1e150
Stop recommending log_min_duration = 0 (#2565)
erikdarlingdata Aug 24, 2026
077883a
Rederive needsMsdb, and stop naming msdb as a gate in the gated-off m…
erikdarlingdata Aug 24, 2026
c892624
Merge pull request #2586 from erikdarlingdata/feature/2565-threshold-…
erikdarlingdata Aug 24, 2026
63341eb
Compare needsMsdb against the msdb tables that have measures
erikdarlingdata Aug 25, 2026
4034ac4
Pin a parity fragment that fits inside one literal
erikdarlingdata Aug 25, 2026
45bfce0
Merge pull request #2585 from erikdarlingdata/feature/2559-msdb-dispatch
erikdarlingdata Aug 25, 2026
223feb2
Collect the PostgreSQL write side: checkpoints, bgwriter and WAL (#2544)
erikdarlingdata Aug 25, 2026
4ce41fd
List the V88 rung in the generated-schema parity pin
erikdarlingdata Aug 25, 2026
9daf04e
Merge pull request #2587 from erikdarlingdata/feature/2544-pg-write-s…
erikdarlingdata Aug 25, 2026
0579451
Collect PostgreSQL extension availability, the third capability axis …
erikdarlingdata Aug 25, 2026
4a7104b
Merge pull request #2588 from erikdarlingdata/feature/2545-extension-…
erikdarlingdata Aug 25, 2026
27724d6
Collect PostgreSQL lock state by mode, type and relation (#2544)
erikdarlingdata Aug 25, 2026
f432270
Merge pull request #2589 from erikdarlingdata/feature/2544-pg-lock-stats
erikdarlingdata Aug 25, 2026
11085b5
Collect PostgreSQL column statistics, without the customer data (#2543)
erikdarlingdata Aug 25, 2026
556597e
Merge pull request #2590 from erikdarlingdata/feature/2543-pg-column-…
erikdarlingdata Aug 25, 2026
a4f9353
Collect PostgreSQL replication connections (#2544)
erikdarlingdata Aug 25, 2026
645fc7e
Merge pull request #2591 from erikdarlingdata/feature/2544-pg-replica…
erikdarlingdata Aug 25, 2026
87f822d
Collect what is resident in PostgreSQL shared buffers (#2544)
erikdarlingdata Aug 25, 2026
e2971c7
Merge pull request #2592 from erikdarlingdata/feature/2544-pg-buffer-…
erikdarlingdata Aug 25, 2026
19b34df
Give tag management a sidebar entry point in the Viewer (#2595)
erikdarlingdata Aug 25, 2026
2e64244
Merge pull request #2596 from erikdarlingdata/fix/2595-manage-tags-en…
erikdarlingdata Aug 25, 2026
51818c0
Say which builds actually contain upgrade-darling.ps1 (#2593)
erikdarlingdata Aug 25, 2026
ed4e157
Merge pull request #2597 from erikdarlingdata/docs/2593-upgrade-from-…
erikdarlingdata Aug 25, 2026
d01af3c
Measure PostgreSQL index bloat instead of estimating it (#2561)
erikdarlingdata Aug 25, 2026
fdfa361
Merge pull request #2598 from erikdarlingdata/feature/2561-pg-index-b…
erikdarlingdata Aug 25, 2026
4e8c665
Attribute per-database PostgreSQL rows to their database (#2599)
erikdarlingdata Aug 25, 2026
d82c125
Runbook: pg_read_all_data gates two collectors, not one
erikdarlingdata Aug 25, 2026
d0cee5c
Strip SQL comments before counting probe select items
erikdarlingdata Aug 25, 2026
b794b76
Merge pull request #2600 from erikdarlingdata/fix/2599-per-database-a…
erikdarlingdata Aug 25, 2026
d64ac32
Add failing pin: status-bar size read ignores the database lock
erikdarlingdata Aug 25, 2026
0cf0392
README: document PostgreSQL schema rungs V87-V95
erikdarlingdata Aug 25, 2026
56305f9
Take a bounded read lock for the status-bar size read
erikdarlingdata Aug 25, 2026
8771966
Merge pull request #2601 from erikdarlingdata/fix/2594-statusbar-unlo…
erikdarlingdata Aug 25, 2026
77c1413
Merge pull request #2602 from erikdarlingdata/docs/readme-postgres-rungs
erikdarlingdata Aug 25, 2026
ccdb2bf
Runbook: document the helper-function route, not just the grant
erikdarlingdata Aug 25, 2026
3069711
Merge pull request #2604 from erikdarlingdata/docs/2543-pg-stats-gran…
erikdarlingdata Aug 25, 2026
a7c5638
Derive "auto_explain is loaded" once, so no facet can contradict it
erikdarlingdata Aug 25, 2026
c99a362
Anchor the remedy test on the threshold column, not the GUC read
erikdarlingdata Aug 25, 2026
1ccac1b
Merge pull request #2606 from erikdarlingdata/fix/plan-readiness-plac…
erikdarlingdata Aug 25, 2026
eebf626
Stop the size-triggered reset deleting the store under a collection
erikdarlingdata Aug 25, 2026
9410ad6
Merge pull request #2607 from erikdarlingdata/fix/2594-no-reset-mid-c…
erikdarlingdata Aug 25, 2026
4fefb5f
Log a denied XE session at Warn, not Error
erikdarlingdata Aug 25, 2026
2dcbca4
Merge pull request #2608 from erikdarlingdata/fix/2594-xe-permission-…
erikdarlingdata Aug 25, 2026
41a3fd0
Attribute PostgreSQL waits to the query that waited
erikdarlingdata Aug 25, 2026
f07d3a5
Put wait sampling on the Waits tab and register it
erikdarlingdata Aug 25, 2026
843d662
Merge pull request #2609 from erikdarlingdata/feature/2603-pg-wait-sa…
erikdarlingdata Aug 25, 2026
7f915b8
Collect the kernel's own CPU and disk per query
erikdarlingdata Aug 25, 2026
7e19b32
Merge pull request #2610 from erikdarlingdata/feature/2603-pg-stat-kc…
erikdarlingdata Aug 25, 2026
ff3c8fb
Record which columns are filtered on, and where the planner is wrong
erikdarlingdata Aug 25, 2026
aa62f05
Merge pull request #2611 from erikdarlingdata/feature/2603-pg-qualstats
erikdarlingdata Aug 25, 2026
dd5a00c
Capture PostgreSQL execution plans, without capturing customer data
erikdarlingdata Aug 25, 2026
56345a5
Stop the panel rename from clobbering the readiness loader
erikdarlingdata Aug 25, 2026
58b5efc
Merge pull request #2613 from erikdarlingdata/feature/2566-pg-plan-ca…
erikdarlingdata Aug 25, 2026
7a48955
Answer with the plan, not a pointer to one
erikdarlingdata Aug 25, 2026
85614e3
Give get_pg_plans a web endpoint and a capability noun phrase
erikdarlingdata Aug 25, 2026
69dc705
Show captured plans on the web Activity tab
erikdarlingdata Aug 25, 2026
8c32d2c
Account for get_pg_plans in the cross-SKU tool census
erikdarlingdata Aug 25, 2026
410d288
Merge pull request #2614 from erikdarlingdata/feature/2567-pg-plan-mcp
erikdarlingdata Aug 25, 2026
cebfb81
Run the extension-dependent PostgreSQL collectors hourly
erikdarlingdata Aug 25, 2026
138ffe1
Give plan parsing one home before it gets a second caller
erikdarlingdata Aug 25, 2026
4fc6844
Merge pull request #2615 from erikdarlingdata/fix/dark-collector-cadence
erikdarlingdata Aug 25, 2026
e25e751
Build the log fixture with real tabs, not a raw string literal
erikdarlingdata Aug 25, 2026
e29e9f7
Merge pull request #2616 from erikdarlingdata/refactor/2538-shared-pl…
erikdarlingdata Aug 25, 2026
ef8b42e
Bound the cycle, not just the index, in pg_index_bloat
erikdarlingdata Aug 25, 2026
3e5a24a
Merge pull request #2618 from erikdarlingdata/fix/2617-index-bloat-wo…
erikdarlingdata Aug 25, 2026
b583cce
Bound the other two PostgreSQL collectors that had no ceiling
erikdarlingdata Aug 25, 2026
dca6fa0
Merge pull request #2619 from erikdarlingdata/fix/unbounded-pg-collec…
erikdarlingdata Aug 25, 2026
9953f8d
Fetch PostgreSQL server logs from the RDS API
erikdarlingdata Aug 25, 2026
6e2d120
Commit the lock file the AWS SDK reference changed
erikdarlingdata Aug 25, 2026
27e4ba6
Merge pull request #2620 from erikdarlingdata/feature/2538-rds-log-so…
erikdarlingdata Aug 25, 2026
65f9e0d
Capture plans on Aurora and RDS through the log API
erikdarlingdata Aug 25, 2026
17a8571
Choose the plan route at dispatch, not by gating the collector
erikdarlingdata Aug 25, 2026
17dde31
Clear the doc block and test my own revert stranded
erikdarlingdata Aug 25, 2026
a218281
Merge pull request #2621 from erikdarlingdata/feature/2538-rds-plan-i…
erikdarlingdata Aug 25, 2026
f99b29e
Write the database_name column three collectors declared but never wrote
erikdarlingdata Aug 25, 2026
77a7933
Merge pull request #2622 from erikdarlingdata/fix/2599-extension-payl…
erikdarlingdata Aug 26, 2026
24cff85
Say which databases a per-database cycle skipped
erikdarlingdata Aug 26, 2026
72b5d7b
Merge pull request #2624 from erikdarlingdata/fix/2623-partial-databa…
erikdarlingdata Aug 26, 2026
3753152
Tell a non-Windows operator how to turn the dashboard on
erikdarlingdata Aug 26, 2026
3ab5034
Reattach VerbName's summary that the insertion stranded
erikdarlingdata Aug 26, 2026
16d3531
Merge pull request #2627 from erikdarlingdata/fix/2626-byo-endpoint-t…
erikdarlingdata Aug 26, 2026
762b8b4
Read pg_stat_statements on PostgreSQL that is not Aurora
erikdarlingdata Aug 26, 2026
5ec0a84
Show not-applicable, not zero, for the Aurora-only viewer columns
erikdarlingdata Aug 26, 2026
71b4eab
Pre-flight must no longer list pg_statement_stats as skipped
erikdarlingdata Aug 26, 2026
bb295a6
Merge pull request #2628 from erikdarlingdata/feat/2625-vanilla-pg-st…
erikdarlingdata Aug 26, 2026
341c48f
Make sampled waits and per-query OS CPU readable outside the Viewer
erikdarlingdata Aug 26, 2026
03a7dec
Register the two new reads at the three points that watch for them
erikdarlingdata Aug 26, 2026
a352079
Merge pull request #2631 from erikdarlingdata/feat/2629-pg-wait-sampl…
erikdarlingdata Aug 26, 2026
7a25381
Serve the last eight PostgreSQL collectors
erikdarlingdata Aug 26, 2026
a42b138
Put four panels on the PostgreSQL tabs, not the SQL Server ones
erikdarlingdata Aug 26, 2026
38cea56
Merge pull request #2632 from erikdarlingdata/feat/2629-remaining-pg-…
erikdarlingdata Aug 26, 2026
17742c4
Say the RDS log was refused, instead of that it held no plans
erikdarlingdata Aug 26, 2026
725da9c
Merge pull request #2634 from erikdarlingdata/fix/2633-rds-plan-captu…
erikdarlingdata Aug 26, 2026
a5220d2
Test a PostgreSQL index without building it
erikdarlingdata Aug 26, 2026
31a208a
Reattach the doc block my insertion pushed off its method
erikdarlingdata Aug 26, 2026
cddff9b
Merge pull request #2635 from erikdarlingdata/feat/2612-hypothetical-…
erikdarlingdata Aug 26, 2026
6e6cdbc
Let get_index_usage say what it did not return
erikdarlingdata Aug 26, 2026
4438415
Move get_index_usage off the server-name-only param contract
erikdarlingdata Aug 26, 2026
f8429c0
Merge pull request #2637 from erikdarlingdata/fix/2636-index-usage-tr…
erikdarlingdata Aug 26, 2026
be8c63e
Name the database the extension is missing from
erikdarlingdata Aug 26, 2026
8d9a94a
Reattach PostgresFaultOutcome's summary, again
erikdarlingdata Aug 26, 2026
e6ae29c
Merge pull request #2639 from erikdarlingdata/fix/2638-name-the-database
erikdarlingdata Aug 26, 2026
c1efe22
Remember the time range, and say what the Azure size grid can see
erikdarlingdata Aug 26, 2026
03d9d2c
Merge pull request #2642 from erikdarlingdata/fix/2640-lite-azure-rep…
erikdarlingdata Aug 26, 2026
2cb7295
Read Azure's durable deadlock telemetry, from master
erikdarlingdata Aug 26, 2026
fcc4efb
Read the new column by ordinal, not by name
erikdarlingdata Aug 26, 2026
2cd7baa
Merge pull request #2644 from erikdarlingdata/fix/2641-azure-deadlock…
erikdarlingdata Aug 26, 2026
af8873a
Let an operator mark rows Done, To Do, or Do Not Do
erikdarlingdata Aug 26, 2026
fdf2e5b
Merge pull request #2646 from erikdarlingdata/feat/2645-row-marks
erikdarlingdata Aug 26, 2026
daddc9d
Report every Azure database's size, not just the connected one
erikdarlingdata Aug 26, 2026
506983c
Merge pull request #2648 from erikdarlingdata/feat/2643-azure-sibling…
erikdarlingdata Aug 26, 2026
76767e6
Pin the plan parser against a real auto_explain block
erikdarlingdata Aug 26, 2026
f10a449
Ship the fixture the test reads
erikdarlingdata Aug 26, 2026
9b2786f
Make the PostgreSQL verification rig reproducible
erikdarlingdata Aug 26, 2026
35c267a
Keep the rig's files LF: they run inside Linux
erikdarlingdata Aug 26, 2026
28be075
Read statement text from the vanilla view too
erikdarlingdata Aug 26, 2026
13e08ea
Merge pull request #2650 from erikdarlingdata/tools/pg-verification-rig
erikdarlingdata Aug 26, 2026
4ee5d3e
Merge dev
erikdarlingdata Aug 26, 2026
d223684
Re-trigger CI
erikdarlingdata Aug 26, 2026
72861e6
Account for every Aurora-only SQL surface in the tree
erikdarlingdata Aug 26, 2026
3aa45bf
Match the aurora flag case-insensitively
erikdarlingdata Aug 26, 2026
abaaaaa
Give the hypothetical-index command a caller
erikdarlingdata Aug 26, 2026
9f7d631
Merge pull request #2652 from erikdarlingdata/fix/2651-statement-text…
erikdarlingdata Aug 26, 2026
b2ae20d
Persist the PostgreSQL major so a read can explain a version-absent c…
erikdarlingdata Aug 26, 2026
1ef3445
Give V100 its viewer sentinel and map arm, and un-literal the V82 ups…
erikdarlingdata Aug 26, 2026
a400088
Merge pull request #2654 from erikdarlingdata/fix/2653-persist-postgr…
erikdarlingdata Aug 26, 2026
61f1a0a
Collect and serve PostgreSQL 18's measured I/O byte totals (#2655)
erikdarlingdata Aug 26, 2026
4aee968
Match the generated schema, extend the pins, and surface volume in th…
erikdarlingdata Aug 26, 2026
0d75601
Add the byte columns to the pg_io_stats CREATE TABLE rung as well (#2…
erikdarlingdata Aug 26, 2026
37570fd
Merge pull request #2656 from erikdarlingdata/fix/2655-pg18-io-bytes
erikdarlingdata Aug 26, 2026
90766db
Add an opt-in PostgreSQL 18 target to the verification rig
erikdarlingdata Aug 26, 2026
abeb9b8
Merge pull request #2657 from erikdarlingdata/feat/rig-pg18-target
erikdarlingdata Aug 26, 2026
c661bb2
Collect PostgreSQL configuration and what changed in it (#2658), and …
erikdarlingdata Aug 26, 2026
3bbd5ce
Wire the new collector through the guards a new collector moves (#2658)
erikdarlingdata Aug 26, 2026
dc2b94c
Make the config reads real SQL, so parse analysis can check them (#2658)
erikdarlingdata Aug 26, 2026
7024387
Merge pull request #2660 from erikdarlingdata/feat/2658-pg-server-config
erikdarlingdata Aug 26, 2026
99e64fb
Collect PostgreSQL deadlock reports from the server log (#2661)
erikdarlingdata Aug 26, 2026
a6deb0b
Split the deadlock index into its own rung, and make the graph read r…
erikdarlingdata Aug 26, 2026
ffcf1ab
Merge pull request #2662 from erikdarlingdata/feat/2661-pg-deadlocks
erikdarlingdata Aug 27, 2026
8b56da5
Add the first PostgreSQL trend reads (#2663)
erikdarlingdata Aug 27, 2026
be82a73
Move the wait trend panel into the PostgreSQL registry, where it belo…
erikdarlingdata Aug 27, 2026
440677f
Merge pull request #2664 from erikdarlingdata/feat/2663-pg-trends
erikdarlingdata Aug 27, 2026
42dc6be
feat: add opt-in GCF output format for MCP tool results
blackwell-systems Aug 15, 2026
5e4e5da
fix(gcf): verify losslessness against the input; decline inexact numbers
blackwell-systems Aug 16, 2026
b9df48f
fix(gcf): harden numeric equality guard and test the input round-trip
blackwell-systems Aug 20, 2026
01739c0
fix(gcf): make the double-precision guard exact via shortest round-trip
blackwell-systems Aug 27, 2026
0c719f0
test(gcf): re-baseline sample payloads against the server's compact o…
blackwell-systems Aug 27, 2026
32723f5
WIP #2665: postgres.network.role accepts a list, one hostssl line per…
erikdarlingdata Aug 27, 2026
5b6c57e
Update the network test call sites for the role list (#2665)
erikdarlingdata Aug 27, 2026
dc89d4a
Verify every admitted role and hand out one connection string per sea…
erikdarlingdata Aug 27, 2026
b22898e
Merge pull request #2286 from blackwell-systems/feat/gcf-output-format
erikdarlingdata Aug 27, 2026
ce1ba61
Merge pull request #2666 from erikdarlingdata/feat/2665-multi-role-ex…
erikdarlingdata Aug 27, 2026
2953b6f
Add the PostgreSQL I/O and database-stats trends (#2663)
erikdarlingdata Aug 27, 2026
e93b0da
Pin the trend decisions, and stop a cached server having no I/O trend…
erikdarlingdata Aug 27, 2026
0fcf8ba
Merge pull request #2667 from erikdarlingdata/feat/2663-pg-io-dbstats…
erikdarlingdata Aug 27, 2026
cf585b4
Release 3.6.0: version bump
erikdarlingdata Aug 27, 2026
157c4d7
Merge pull request #2668 from erikdarlingdata/release/3.6.0
erikdarlingdata Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,14 @@
*.parquet binary
*.zip binary
*.duckdb binary

# A captured PostgreSQL log is a FIXTURE of real bytes: the parser keys on the exact line endings
# and the tab-indented continuation, so line-ending normalisation would change what it is evidence of.
Darling/Darling.Tests/Fixtures/auto_explain_real_block.txt -text

# The PostgreSQL verification rig runs INSIDE Linux containers. A Dockerfile whose RUN lines carry a
# trailing CR breaks the shell that executes them, and the seed is fed to psql in the container the same
# way - so these keep LF regardless of the repo-wide eol=crlf default.
tools/pg-verification-rig/Dockerfile text eol=lf
tools/pg-verification-rig/*.yml text eol=lf
tools/pg-verification-rig/*.sql text eol=lf
1,802 changes: 926 additions & 876 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

1,011 changes: 524 additions & 487 deletions .github/workflows/nightly.yml

Large diffs are not rendered by default.

186 changes: 179 additions & 7 deletions CHANGELOG.md

Large diffs are not rendered by default.

97 changes: 97 additions & 0 deletions Darling/Darling.Tests/AgAlertPolicyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* Licensed under the MIT License. See LICENSE file in the project root for full license information.
*/

using System;
using PerformanceMonitor.Common;
using Xunit;

Expand Down Expand Up @@ -81,6 +82,102 @@ public void DecideConnection_AlreadyDisconnectedAtFirstSighting_StaysSilent_ButI
Assert.Equal(AgConnectionDecision.Reconnected, AgAlertPolicy.DecideConnection("DISCONNECTED", "CONNECTED"));
}

/* ---------------- #2426: the disconnect re-fire ---------------- */

private static readonly DateTime Noon = new(2026, 8, 20, 12, 0, 0, DateTimeKind.Utc);

[Theory]
[InlineData("CONNECTED", "DISCONNECTED", AgConnectionDecision.Disconnected)]
[InlineData("DISCONNECTED", "CONNECTED", AgConnectionDecision.Reconnected)]
[InlineData("DISCONNECTED", "DISCONNECTED", AgConnectionDecision.None)]
[InlineData("CONNECTED", "CONNECTED", AgConnectionDecision.None)]
[InlineData(null, "DISCONNECTED", AgConnectionDecision.None)]
[InlineData("CONNECTED", null, AgConnectionDecision.None)]
public void DecideConnection_RefireOff_IsTheEdgeOnlyOverloadExactly(
string? previous, string? current, AgConnectionDecision expected)
{
/* The shipped default, and the whole matrix rather than one case: null, zero and a negative all
mean OFF, and off has to be byte-for-byte the two-argument behavior or an upgrade would start
re-alerting on a knob nobody set. */
Assert.Equal(expected, AgAlertPolicy.DecideConnection(previous, current, null, null, Noon));
Assert.Equal(expected, AgAlertPolicy.DecideConnection(previous, current, TimeSpan.Zero, null, Noon));
Assert.Equal(expected, AgAlertPolicy.DecideConnection(previous, current, TimeSpan.FromMinutes(-5), null, Noon));
}

[Fact]
public void DecideConnection_StillDisconnected_WaitsOutTheWindow_ThenSaysItAgain()
{
var refire = TimeSpan.FromMinutes(10);

/* Announced at noon: inside the window there is nothing new to say. */
Assert.Equal(
AgConnectionDecision.None,
AgAlertPolicy.DecideConnection("DISCONNECTED", "DISCONNECTED", refire, Noon, Noon.AddMinutes(9)));

/* At the boundary, and still hours later — the point of the knob is that a week-long outage does
not read like a blip. */
Assert.Equal(
AgConnectionDecision.StillDisconnected,
AgAlertPolicy.DecideConnection("DISCONNECTED", "DISCONNECTED", refire, Noon, Noon.AddMinutes(10)));
Assert.Equal(
AgConnectionDecision.StillDisconnected,
AgAlertPolicy.DecideConnection("DISCONNECTED", "DISCONNECTED", refire, Noon, Noon.AddHours(8)));
}

[Fact]
public void DecideConnection_ARealEdgeOutranksARefire()
{
var refire = TimeSpan.FromMinutes(10);

/* The edge that OPENS the outage announces as Disconnected even though the window is trivially due
on it, or the caller would have two reasons to announce the same sweep. */
Assert.Equal(
AgConnectionDecision.Disconnected,
AgAlertPolicy.DecideConnection("CONNECTED", "DISCONNECTED", refire, null, Noon));

/* And a recovery is a recovery whatever the clock says. */
Assert.Equal(
AgConnectionDecision.Reconnected,
AgAlertPolicy.DecideConnection("DISCONNECTED", "CONNECTED", refire, Noon.AddHours(-9), Noon));
}

[Fact]
public void DecideConnection_NoStampIsDueNow_SoARestartMidOutageStillReAnnounces()
{
var refire = TimeSpan.FromMinutes(10);

/* Both apps hold this edge state in memory, so a restart during a week-long outage sees a replica
already DISCONNECTED with no record of it ever having been announced. Rule 1's silent baseline
would make that silence permanent, which is the exact failure the knob exists to prevent — so
with re-fire ON, and only then, a first sighting announces. */
Assert.Equal(
AgConnectionDecision.StillDisconnected,
AgAlertPolicy.DecideConnection(null, "DISCONNECTED", refire, null, Noon));
Assert.Equal(
AgConnectionDecision.StillDisconnected,
AgAlertPolicy.DecideConnection("DISCONNECTED", "DISCONNECTED", refire, null, Noon));

/* With it off, rule 1 governs unchanged. */
Assert.Equal(
AgConnectionDecision.None,
AgAlertPolicy.DecideConnection(null, "DISCONNECTED", null, null, Noon));
}

[Fact]
public void DecideConnection_ARefireStillNeedsAnExactDisconnected()
{
var refire = TimeSpan.FromMinutes(10);

/* Same rule the edge follows, and it matters more here: a re-fire pages repeatedly, so a state
string the product never learned to interpret must not become a standing page. */
Assert.Equal(
AgConnectionDecision.None,
AgAlertPolicy.DecideConnection("SOMETHING_NEW", "SOMETHING_NEW", refire, null, Noon));
Assert.Equal(
AgConnectionDecision.None,
AgAlertPolicy.DecideConnection("CONNECTED", null, refire, null, Noon));
}

/* ---------------- suspension ---------------- */

[Theory]
Expand Down
36 changes: 36 additions & 0 deletions Darling/Darling.Tests/AlertEngineTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1052,6 +1052,12 @@ public async Task TempDb_FiresAtThreshold_AndResolutionCarriesTheCurrentPercent(
h.Settings.TempDbSpaceEnabled = true;
var engine = h.Build();

/* #2515: 1000 MB total and NO MaxSizeMb, which is deliberate and stays that way. The fixture predates
the ceiling, so it describes a tempdb whose cap was never measured — and that is exactly the case
where the denominator remains the allocation. It does NOT imply a 1000 MB cap; if it did, this pin
would have to move, and the fact that it does not is the guarantee that no existing on-prem or RDS
target with an unlimited (or uncollected) tempdb sees its number change. The capped case gets its
own test below rather than being folded in here. */
h.Adapter.TempDb = new TempDbSpaceInfo { TotalReservedMb = 800, UnallocatedMb = 200 }; /* 80% used */
await engine.EvaluateServerAsync(Harness.Snapshot());
var fired = Assert.Single(h.Deliverer.Outcomes);
Expand All @@ -1066,6 +1072,36 @@ public async Task TempDb_FiresAtThreshold_AndResolutionCarriesTheCurrentPercent(
Assert.Equal("SRV-A: tempdb usage back to 20%", resolution.Message); /* :461,:464 */
}

/// <summary>
/// #2515, through the ENGINE rather than the arithmetic: the Azure shape from the issue must not fire, and
/// the same allocation without a ceiling must. Same 59.75 MB of reserved tempdb in both, same 80% default —
/// the only difference is whether the collector could see how far the files are allowed to grow.
///
/// <para>This is the assertion the whole change exists for. <see cref="TempDbCeilingStoreTests"/> proves
/// the arithmetic and the store round-trip; this proves the alert engine's decision follows it, which is
/// what actually pages someone.</para>
/// </summary>
[Fact]
public async Task TempDb_TheAzureCeiling_SuppressesTheAlert_ThatTheAllocationWouldFire()
{
var h = new Harness();
h.Settings.TempDbSpaceEnabled = true;
Assert.Equal(80, h.Settings.TempDbSpaceThresholdPercent);
var engine = h.Build();

/* GP_S_Gen5_2 with one ~57 MB #temp table: 62.44 MB allocated, 65,536 MB of headroom behind it. */
h.Adapter.TempDb = new TempDbSpaceInfo { TotalReservedMb = 59.75, UnallocatedMb = 2.69, MaxSizeMb = 65_536 };
await engine.EvaluateServerAsync(Harness.Snapshot());
Assert.Empty(h.Deliverer.Outcomes);

/* The identical snapshot with the ceiling unmeasured is the pre-#2515 reading, and it pages. */
h.Adapter.TempDb = new TempDbSpaceInfo { TotalReservedMb = 59.75, UnallocatedMb = 2.69 };
await engine.EvaluateServerAsync(Harness.Snapshot());
var fired = Assert.Single(h.Deliverer.Outcomes);
Assert.Equal("tempdb Space", fired.MetricName);
Assert.Equal("96% used (60 MB)", fired.CurrentValue);
}

/* ---------------- low disk ---------------- */

[Fact]
Expand Down
Loading
Loading