- Long operations: a one-minute collector reads operations with progress from sys.dm_exec_requests (BACKUP, RESTORE, DBCC, REORGANIZE, SHRINK, ROLLBACK): command, database, start, percent, expected end, login. Stored in insight.LongOperations (migration 0011, RawDays), shown on the instance page, in the time window analysis and its PDF. The last 10 durations per command and database survive restarts; SQLI-OPS-001 flags a backup/restore running over twice the median. - Full-text community rules COM-FT-001..005 (metadata only, 2005 syntax): disk-full or paused/throttled catalogs, stale manual/off change tracking indexes and disabled indexes. - Statement activity (CPU time / time in plan cache): column in top SQL and SQLI-CPU-002 when above SQLInsight:TopSql:ActivityThresholdPercent (default 50) for at least an hour. Never clears the plan cache. - BuiltInCollectors.Create takes a CollectorSettings record. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
23 lines
676 B
C#
23 lines
676 B
C#
using SQLInsight.Rules.Engine;
|
|
|
|
namespace SQLInsight.Rules.Tests;
|
|
|
|
public class RuleCatalogTests
|
|
{
|
|
[Fact]
|
|
public void Every_rule_has_a_unique_well_formed_id()
|
|
{
|
|
var rules = BuiltInRules.Create();
|
|
|
|
Assert.Equal(rules.Count, rules.Select(r => r.Id).Distinct(StringComparer.OrdinalIgnoreCase).Count());
|
|
Assert.All(rules, r => Assert.Matches("^SQLI-[A-Z]+-[0-9]{3}$", r.Id));
|
|
Assert.All(rules, r => Assert.False(string.IsNullOrWhiteSpace(r.Title)));
|
|
}
|
|
|
|
/// <summary>Keeps the rule count in the README honest.</summary>
|
|
[Fact]
|
|
public void Rule_count()
|
|
{
|
|
Assert.Equal(66, BuiltInRules.Create().Count);
|
|
}
|
|
}
|