Agrega Quartz.Extensions.Hosting 3.13.1 al catálogo central.
SIGCM2.Infrastructure/Audit/Jobs/:
- AuditPartitionManagerJob — mensual (cron '0 0 2 1 * ?', UTC). Extiende
pf_AuditEvent_Monthly y pf_SecurityEvent_Monthly con SPLIT RANGE para el
mes+2 (mantiene +1 de buffer). Idempotente: verifica existencia antes.
- AuditRetentionEnforcerJob — anual (cron '0 0 3 1 1 ?', UTC). DELETE rows
> 10 años en AuditEvent y > 5 años en SecurityEvent. Temporal history se
purga solo vía HISTORY_RETENTION_PERIOD del engine.
- AuditIntegrityCheckJob — semanal domingos (cron '0 0 1 ? * SUN', UTC).
Valida SYSTEM_VERSIONING=ON + partitions próximos 3 meses. Emite
SecurityEvent 'system.integrity_alert' failure via ISecurityEventLogger
cuando detecta inconsistencias.
AuditMaintenanceRegistration.cs:
- services.AddAuditMaintenance(configuration) wraps AddQuartz + AddQuartzHostedService
con los 3 triggers crónicos.
Program.cs:
- builder.Services.AddAuditMaintenance(configuration) wired ONLY en entornos
productivos — skipeado en 'Testing' para que los integration tests no
disparen los triggers cron durante el ciclo de vida del TestWebAppFactory.
Row-based DELETE en RetentionEnforcerJob es la opción conservadora para la
primera generación — cuando los volúmenes lo justifiquen (>200M filas), se
upgradea a SWITCH OUT + DROP para partition-level drop. Documentado en
comentario de la clase.
Tests (Strict TDD, integration):
- AuditJobsTests (3): PartitionManager crea target boundary + idempotencia,
RetentionEnforcer purga > threshold (10y audit, 5y security), IntegrityCheck
all-OK no emite alert.
Suite: 381/381 Application.Tests + 147/147 Api.Tests = 528/528 passing.
Refs: sdd/udt-010-auditoria-trazabilidad/{spec#REQ-AUD-6 #REQ-SEC-5, design, tasks#B11}
32 lines
1.8 KiB
XML
32 lines
1.8 KiB
XML
<Project>
|
|
<PropertyGroup>
|
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
|
</PropertyGroup>
|
|
<!-- Production dependencies -->
|
|
<ItemGroup>
|
|
<PackageVersion Include="Dapper" Version="2.1.35" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.5" />
|
|
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
|
|
<PackageVersion Include="BCrypt.Net-Next" Version="4.0.3" />
|
|
<PackageVersion Include="FluentValidation.AspNetCore" Version="11.3.0" />
|
|
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
|
|
<PackageVersion Include="Serilog.Sinks.Seq" Version="8.0.0" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.0-preview.3.25172.1" />
|
|
<PackageVersion Include="Scalar.AspNetCore" Version="2.5.6" />
|
|
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.9.0" />
|
|
<PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.9.0" />
|
|
<PackageVersion Include="Quartz.Extensions.Hosting" Version="3.13.1" />
|
|
</ItemGroup>
|
|
<!-- Test dependencies -->
|
|
<ItemGroup>
|
|
<PackageVersion Include="xunit" Version="2.9.3" />
|
|
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.4" />
|
|
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
|
<PackageVersion Include="NSubstitute" Version="5.3.0" />
|
|
<PackageVersion Include="FluentAssertions" Version="6.12.2" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.0-preview.3.25172.1" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.0-preview.3.25172.1" />
|
|
<PackageVersion Include="Respawn" Version="6.2.1" />
|
|
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
|
|
</ItemGroup>
|
|
</Project> |