sprints enhancements
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// -----------------------------------------------------------------------------
|
||||
// MergeHashBackfillJob.cs
|
||||
// Sprint: SPRINT_8200_0012_0001_CONCEL_merge_hash_library
|
||||
// Task: MHASH-8200-020
|
||||
// Description: Job to backfill merge hashes for existing advisories
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
using StellaOps.Concelier.Core.Jobs;
|
||||
using StellaOps.Concelier.Merge.Identity;
|
||||
|
||||
namespace StellaOps.Concelier.Merge.Jobs;
|
||||
|
||||
/// <summary>
|
||||
/// Job to backfill merge hashes for existing advisories during migration.
|
||||
/// Can target all advisories or a specific advisory key.
|
||||
/// </summary>
|
||||
public sealed class MergeHashBackfillJob : IJob
|
||||
{
|
||||
private readonly MergeHashShadowWriteService _shadowWriteService;
|
||||
private readonly ILogger<MergeHashBackfillJob> _logger;
|
||||
|
||||
public MergeHashBackfillJob(
|
||||
MergeHashShadowWriteService shadowWriteService,
|
||||
ILogger<MergeHashBackfillJob> logger)
|
||||
{
|
||||
_shadowWriteService = shadowWriteService ?? throw new ArgumentNullException(nameof(shadowWriteService));
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Executes the backfill job.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Parameters:
|
||||
/// - "seed" (optional): Specific advisory key to backfill. If empty, backfills all.
|
||||
/// - "force" (optional): If "true", recomputes hash even for advisories that have one.
|
||||
/// </remarks>
|
||||
public async Task ExecuteAsync(JobExecutionContext context, CancellationToken cancellationToken)
|
||||
{
|
||||
var hasSeed = context.Parameters.TryGetValue("seed", out var seedValue);
|
||||
var seed = seedValue as string;
|
||||
var force = context.Parameters.TryGetValue("force", out var forceValue)
|
||||
&& forceValue is string forceStr
|
||||
&& string.Equals(forceStr, "true", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
if (hasSeed && !string.IsNullOrWhiteSpace(seed))
|
||||
{
|
||||
_logger.LogInformation("Starting merge hash backfill for single advisory: {AdvisoryKey}, force={Force}", seed, force);
|
||||
var updated = await _shadowWriteService.BackfillOneAsync(seed, force, cancellationToken).ConfigureAwait(false);
|
||||
_logger.LogInformation(
|
||||
"Merge hash backfill for {AdvisoryKey} complete: updated={Updated}",
|
||||
seed,
|
||||
updated);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogInformation("Starting merge hash backfill for all advisories");
|
||||
var result = await _shadowWriteService.BackfillAllAsync(cancellationToken).ConfigureAwait(false);
|
||||
_logger.LogInformation(
|
||||
"Merge hash backfill complete: processed={Processed}, updated={Updated}, skipped={Skipped}, failed={Failed}",
|
||||
result.Processed,
|
||||
result.Updated,
|
||||
result.Skipped,
|
||||
result.Failed);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,5 @@ namespace StellaOps.Concelier.Merge.Jobs;
|
||||
internal static class MergeJobKinds
|
||||
{
|
||||
public const string Reconcile = "merge:reconcile";
|
||||
public const string HashBackfill = "merge:hash-backfill";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user