< Summary

Information
Class: Services.SearchServices.OrderSearch.OrderSearchDriftCheckJob
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/SearchServices/OrderSearch/OrderSearchDriftCheckJob.cs
Line coverage
82%
Covered lines: 19
Uncovered lines: 4
Coverable lines: 23
Total lines: 62
Line coverage: 82.6%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ExecuteAsync()87.5%9873.33%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/SearchServices/OrderSearch/OrderSearchDriftCheckJob.cs

#LineLine coverage
 1using Hangfire;
 2using Services.SignalRServices;
 3using Services.HangfireService;
 4
 5namespace Services.SearchServices.OrderSearch;
 6
 7/// <summary>
 8/// Раз в минуту сверяет ES с БД и сразу точечно исправляет любое расхождение.
 9/// </summary>
 10public class OrderSearchDriftCheckJob
 11{
 12    public const string JobId = "OrderSearchDriftCheckJob";
 13    public const string DefaultCron = "* * * * *";
 14    public const string QueueName = HangfireQueueNames.OrderSearch;
 15
 16    private readonly IOrderSearchDriftChecker _driftChecker;
 17    private readonly IOrderSearchSyncService _syncService;
 18    private readonly IOrderSearchIndexOperationLock _indexOperationLock;
 19
 320    public OrderSearchDriftCheckJob(
 321        IOrderSearchDriftChecker driftChecker,
 322        IOrderSearchSyncService syncService,
 323        IOrderSearchIndexOperationLock indexOperationLock)
 24    {
 325        _driftChecker = driftChecker;
 326        _syncService = syncService;
 327        _indexOperationLock = indexOperationLock;
 328    }
 29
 30    [Queue(QueueName)]
 31    public async Task<string> ExecuteAsync()
 32    {
 333        var operationLock = _indexOperationLock.TryAcquire();
 334        if (operationLock == null)
 35        {
 136            return "Проверка расхождения ES пропущена: выполняется полная переиндексация.";
 37        }
 38
 239        using (operationLock)
 40        {
 241            var result = await _driftChecker.CheckAsync("Scheduled");
 42
 243            if (!result.Skipped && result.AbsoluteDrift > 0)
 44            {
 145                var repair = await _syncService.RepairDriftAsync("Scheduled");
 146                if (repair.AbsoluteDriftAfter > 0)
 47                {
 48                    try
 49                    {
 050                        await NotificationService.NotifyAsync(
 051                            "ES Индекс", "#EF4444", repair.Message, "fa-triangle-exclamation");
 052                    }
 053                    catch { /* не роняем джоб */ }
 54                }
 55
 156                return repair.Message;
 57            }
 58
 159            return result.Message;
 60        }
 361    }
 62}