2022-02-09 18:49:52 +00:00
|
|
|
|
namespace ASC.Data.Backup;
|
|
|
|
|
|
|
|
|
|
[Scope]
|
|
|
|
|
public class Schedule
|
2021-08-31 09:40:28 +00:00
|
|
|
|
{
|
2022-02-09 18:49:52 +00:00
|
|
|
|
private readonly TenantManager _tenantManager;
|
|
|
|
|
private readonly IOptionsMonitor<ILog> _options;
|
|
|
|
|
private readonly TenantUtil _tenantUtil;
|
2020-06-08 10:40:26 +00:00
|
|
|
|
|
2022-02-09 18:49:52 +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
|
|
|
|
|
2022-02-09 18:49:52 +00:00
|
|
|
|
public bool IsToBeProcessed(BackupSchedule backupSchedule)
|
|
|
|
|
{
|
|
|
|
|
try
|
2020-06-08 10:40:26 +00:00
|
|
|
|
{
|
2022-02-09 18:49:52 +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
|
|
|
|
|
2022-02-09 18:49:52 +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
|
|
|
|
|
2022-02-09 18:49:52 +00:00
|
|
|
|
var nextBackupTime = cron.GetTimeAfter(lastBackupTime);
|
2022-02-09 16:46:09 +00:00
|
|
|
|
|
2022-02-09 18:49:52 +00:00
|
|
|
|
if (!nextBackupTime.HasValue)
|
2020-06-08 10:40:26 +00:00
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2022-02-09 18:49:52 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|