sprints and audit work
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user