// Copyright (c) Umbraco. // See LICENSE for more details. using System; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Core; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Sync; namespace Umbraco.Infrastructure.HostedServices.ServerRegistration { /// /// Implements periodic database instruction processing as a hosted service. /// public class InstructionProcessTask : RecurringHostedServiceBase { private readonly IRuntimeState _runtimeState; private readonly IServerMessenger _messenger; private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// /// Representation of the state of the Umbraco runtime. /// Service broadcasting cache notifications to registered servers. /// The typed logger. /// The configuration for global settings. public InstructionProcessTask(IRuntimeState runtimeState, IServerMessenger messenger, ILogger logger, IOptions globalSettings) : base(globalSettings.Value.DatabaseServerMessenger.TimeBetweenSyncOperations, TimeSpan.FromMinutes(1)) { _runtimeState = runtimeState; _messenger = messenger; _logger = logger; } internal override Task PerformExecuteAsync(object state) { if (_runtimeState.Level != RuntimeLevel.Run) { return Task.CompletedTask; } try { _messenger.Sync(); } catch (Exception e) { _logger.LogError(e, "Failed (will repeat)."); } return Task.CompletedTask; } } }