// 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;
}
}
}