< Summary

Information
Class: ProjectTemplate.Infrastructure.Data.Auditing.ApplicationAuditReconciliationCandidate
Assembly: ProjectTemplate.Infrastructure
File(s): /home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Infrastructure/Data/Auditing/ApplicationAuditReconciliationContracts.cs
Line coverage
100%
Covered lines: 7
Uncovered lines: 0
Coverable lines: 7
Total lines: 125
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_FindingKey()100%11100%
get_ReasonCode()100%11100%
get_Severity()100%11100%
get_MutationBatchId()100%11100%
get_Destination()100%11100%
get_Guidance()100%11100%

File(s)

/home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Infrastructure/Data/Auditing/ApplicationAuditReconciliationContracts.cs

#LineLine coverage
 1namespace ProjectTemplate.Infrastructure.Data.Auditing;
 2
 3public static class ApplicationAuditReconciliationReasonCodes
 4{
 5    public const string MissingCompletion = "MissingCompletion";
 6    public const string MissingAuditBatch = "MissingAuditBatch";
 7    public const string AuditRecordCountMismatch = "AuditRecordCountMismatch";
 8    public const string ManifestVerificationFailed = "ManifestVerificationFailed";
 9    public const string IncompleteGeneratedValues = "IncompleteGeneratedValues";
 10    public const string MalformedCorrelation = "MalformedCorrelation";
 11    public const string DuplicateCompletion = "DuplicateCompletion";
 12    public const string StalePending = "StalePending";
 13    public const string StaleRetryReady = "StaleRetryReady";
 14    public const string DeliveryFailed = "DeliveryFailed";
 15    public const string DeadLettered = "DeadLettered";
 16}
 17
 18public static class ApplicationAuditReconciliationSeverities
 19{
 20    public const string Information = "Information";
 21    public const string Warning = "Warning";
 22    public const string Error = "Error";
 23    public const string Critical = "Critical";
 24}
 25
 26public static class ApplicationAuditReconciliationRemediationStatuses
 27{
 28    public const string Open = "Open";
 29    public const string Acknowledged = "Acknowledged";
 30    public const string Resolved = "Resolved";
 31}
 32
 33public sealed class ApplicationAuditReconciliationOptions
 34{
 35    public bool Enabled { get; set; } = true;
 36
 37    public bool RunWorker { get; set; } = true;
 38
 39    public TimeSpan Interval { get; set; } = TimeSpan.FromMinutes(5);
 40
 41    public TimeSpan CompletionGracePeriod { get; set; } = TimeSpan.FromMinutes(2);
 42
 43    public TimeSpan StalePendingThreshold { get; set; } = TimeSpan.FromMinutes(15);
 44
 45    public TimeSpan StaleRetryReadyThreshold { get; set; } = TimeSpan.FromMinutes(15);
 46
 47    public int MaximumBatchesPerRun { get; set; } = 1_000;
 48
 49    public int HealthWarningFindingCount { get; set; } = 1;
 50
 51    public int HealthUnhealthyFindingCount { get; set; } = 10;
 52}
 53
 54public interface IApplicationAuditReconciler
 55{
 56    Task<ApplicationAuditReconciliationSummary> ReconcileAsync(
 57        CancellationToken cancellationToken = default);
 58
 59    Task<ApplicationAuditReconciliationSummary> GetSummaryAsync(
 60        CancellationToken cancellationToken = default);
 61
 62    Task<IReadOnlyList<ApplicationAuditReconciliationFindingItem>> QueryFindingsAsync(
 63        ApplicationAuditReconciliationQuery request,
 64        CancellationToken cancellationToken = default);
 65
 66    Task<ApplicationAuditReconciliationRemediationItem> RecordRemediationAsync(
 67        Guid findingId,
 68        ApplicationAuditReconciliationRemediationRequest request,
 69        CancellationToken cancellationToken = default);
 70}
 71
 72public sealed record ApplicationAuditReconciliationSummary(
 73    bool Enabled,
 74    DateTime? LastRunUtc,
 75    long OpenFindingCount,
 76    long ErrorFindingCount,
 77    long CriticalFindingCount,
 78    long ManifestVerificationFailureCount,
 79    long MissingCompletionCount,
 80    long StaleDeliveryCount,
 81    long DeadLetterCount);
 82
 83public sealed record ApplicationAuditReconciliationQuery(
 84    string? ReasonCode = null,
 85    string? Severity = null,
 86    string? MutationBatchId = null,
 87    string? RemediationStatus = null,
 88    int MaximumResults = 100);
 89
 90public sealed record ApplicationAuditReconciliationFindingItem(
 91    Guid Id,
 92    string SchemaVersion,
 93    string FindingKey,
 94    string ReasonCode,
 95    string Severity,
 96    string MutationBatchId,
 97    string? Destination,
 98    string Guidance,
 99    string RemediationStatus,
 100    DateTime FirstObservedUtc,
 101    DateTime LastObservedUtc,
 102    DateTime? ResolvedUtc);
 103
 104public sealed record ApplicationAuditReconciliationRemediationRequest(
 105    string ActionCode,
 106    string ActorId,
 107    string? EvidenceReference = null,
 108    bool ResolveFinding = false);
 109
 110public sealed record ApplicationAuditReconciliationRemediationItem(
 111    Guid Id,
 112    Guid FindingId,
 113    string MutationBatchId,
 114    string ActionCode,
 115    string ActorId,
 116    string? EvidenceReference,
 117    DateTime RecordedUtc);
 118
 16119internal sealed record ApplicationAuditReconciliationCandidate(
 62120    string FindingKey,
 14121    string ReasonCode,
 16122    string Severity,
 14123    string MutationBatchId,
 14124    string? Destination,
 32125    string Guidance);