DocSpace-client/common/ASC.Data.Backup.Core/Core/Schedule.cs

51 lines
1.5 KiB
C#
Raw Normal View History

namespace ASC.Data.Backup;
[Scope]
public class Schedule
2021-08-31 09:40:28 +00:00
{
private readonly TenantManager _tenantManager;
private readonly IOptionsMonitor<ILog> _options;
private readonly TenantUtil _tenantUtil;
2020-06-08 10:40:26 +00:00
public Schedule(IOptionsMonitor<ILog> options, TenantManager tenantManager, TenantUtil tenantUtil)
{
_options = options;
_tenantManager = tenantManager;
_tenantUtil = tenantUtil;
}
2020-06-08 10:40:26 +00:00
public bool IsToBeProcessed(BackupSchedule backupSchedule)
{
try
2020-06-08 10:40:26 +00:00
{
var cron = new CronExpression(backupSchedule.Cron);
var tenant = _tenantManager.GetTenant(backupSchedule.TenantId);
var tenantTimeZone = tenant.TimeZone;
var culture = tenant.GetCulture();
Thread.CurrentThread.CurrentCulture = culture;
2020-06-08 10:40:26 +00:00
var lastBackupTime = backupSchedule.LastBackupTime.Equals(default)
? DateTime.UtcNow.Date.AddSeconds(-1)
: _tenantUtil.DateTimeFromUtc(tenantTimeZone, backupSchedule.LastBackupTime);
2020-06-08 10:40:26 +00:00
var nextBackupTime = cron.GetTimeAfter(lastBackupTime);
2022-02-09 16:46:09 +00:00
if (!nextBackupTime.HasValue)
2020-06-08 10:40:26 +00:00
{
return false;
}
var now = _tenantUtil.DateTimeFromUtc(tenantTimeZone, DateTime.UtcNow);
return nextBackupTime <= now;
}
catch (Exception e)
{
var log = _options.CurrentValue;
log.Error("Schedule " + backupSchedule.TenantId, e);
return false;
2020-06-08 10:40:26 +00:00
}
}
}