sprints and audit work

This commit is contained in:
StellaOps Bot
2026-01-07 09:36:16 +02:00
parent 05833e0af2
commit ab364c6032
377 changed files with 64534 additions and 1627 deletions

View File

@@ -0,0 +1,49 @@
// -----------------------------------------------------------------------------
// IScanMetricsCollector.cs
// Sprint: SPRINT_20260106_003_002_SCANNER_vex_gate_service
// Task: T017
// Description: Interface for scan metrics collection.
// -----------------------------------------------------------------------------
namespace StellaOps.Scanner.Worker.Metrics;
/// <summary>
/// Interface for collecting scan metrics during execution.
/// </summary>
public interface IScanMetricsCollector
{
/// <summary>
/// Gets the metrics ID for this scan.
/// </summary>
Guid MetricsId { get; }
/// <summary>
/// Start tracking a phase.
/// </summary>
IDisposable StartPhase(string phaseName);
/// <summary>
/// Complete a phase with success.
/// </summary>
void CompletePhase(string phaseName, Dictionary<string, object>? metrics = null);
/// <summary>
/// Complete a phase with failure.
/// </summary>
void FailPhase(string phaseName, string errorCode, string? errorMessage = null);
/// <summary>
/// Set artifact counts.
/// </summary>
void SetCounts(int? packageCount = null, int? findingCount = null, int? vexDecisionCount = null);
/// <summary>
/// Records VEX gate metrics.
/// </summary>
void RecordVexGateMetrics(
int totalFindings,
int passedCount,
int warnedCount,
int blockedCount,
TimeSpan elapsed);
}

View File

@@ -17,7 +17,7 @@ namespace StellaOps.Scanner.Worker.Metrics;
/// Collects and persists scan metrics during execution.
/// Thread-safe for concurrent phase tracking.
/// </summary>
public sealed class ScanMetricsCollector : IDisposable
public sealed class ScanMetricsCollector : IScanMetricsCollector, IDisposable
{
private readonly IScanMetricsRepository _repository;
private readonly ILogger<ScanMetricsCollector> _logger;
@@ -200,6 +200,22 @@ public sealed class ScanMetricsCollector : IDisposable
_vexDecisionCount = vexDecisionCount;
}
/// <summary>
/// Records VEX gate metrics.
/// </summary>
public void RecordVexGateMetrics(
int totalFindings,
int passedCount,
int warnedCount,
int blockedCount,
TimeSpan elapsed)
{
_vexDecisionCount = passedCount + warnedCount + blockedCount;
_logger.LogDebug(
"VEX gate metrics: total={Total}, passed={Passed}, warned={Warned}, blocked={Blocked}, elapsed={ElapsedMs}ms",
totalFindings, passedCount, warnedCount, blockedCount, elapsed.TotalMilliseconds);
}
/// <summary>
/// Set additional metadata.
/// </summary>
@@ -250,11 +266,7 @@ public sealed class ScanMetricsCollector : IDisposable
ScannerVersion = _scannerVersion,
ScannerImageDigest = _scannerImageDigest,
IsReplay = _isReplay,
<<<<<<< HEAD
CreatedAt = finishedAt
=======
CreatedAt = _timeProvider.GetUtcNow()
>>>>>>> 47890273170663b2236a1eb995d218fe5de6b11a
};
try