2b8fe77fac
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/21
36 lines
2.3 KiB
C#
36 lines
2.3 KiB
C#
using Hangfire;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace Tnsu.ApprovalRoute.Application.Approvals;
|
|
|
|
/// <summary>
|
|
/// Рекуррентная задача автосогласования — тонкая обёртка над
|
|
/// <see cref="AutoApproveService"/>: всё, что она добавляет сверху, — расписание,
|
|
/// защита от наложения запусков и одна строка в логе с итогом.
|
|
///
|
|
/// Повторы отключены (Attempts = 0) намеренно, в отличие от
|
|
/// CreateNextListPartitionJob: там повтор нужен, потому что пропуск задачи ломает
|
|
/// сценарий целиком (список не создан — писать некуда). Здесь же следующий запуск
|
|
/// придёт сам, через час, и сделает ровно ту же работу с актуальным состоянием —
|
|
/// уже согласованные строки в выборку не попадут. Повторять упавший проход раньше
|
|
/// этого смысла нет, а висящие в очереди повторы только прятали бы настоящую
|
|
/// причину сбоя.
|
|
/// </summary>
|
|
[AutomaticRetry(Attempts = 0)]
|
|
[DisableConcurrentExecution(timeoutInSeconds: 5 * 60)]
|
|
public sealed class AutoApproveJob(AutoApproveService service, ILogger<AutoApproveJob> logger)
|
|
{
|
|
/// <summary>
|
|
/// Идентификатор рекуррентной задачи в Hangfire. Константой — по нему задача и
|
|
/// заводится, и снимается при выключении настройки (см. Program.cs): разъехавшись,
|
|
/// эти два имени оставили бы в дашборде задачу, которую уже некому снять.
|
|
/// </summary>
|
|
public const string RecurringJobId = "auto-approve";
|
|
|
|
public async Task RunAsync(CancellationToken cancellationToken)
|
|
{
|
|
var approved = await service.RunAsync(cancellationToken);
|
|
logger.LogInformation("Автосогласование: строк согласовано автоматически — {Count}", approved);
|
|
}
|
|
}
|