2020-06-15 08:19:40 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
using ASC.Common;
|
2020-05-28 13:28:51 +00:00
|
|
|
|
using ASC.Core;
|
2020-05-20 15:14:44 +00:00
|
|
|
|
using ASC.Core.Tenants;
|
2020-06-15 08:19:40 +00:00
|
|
|
|
using ASC.Web.Studio.UserControls.Statistics;
|
2020-05-20 15:14:44 +00:00
|
|
|
|
|
|
|
|
|
namespace ASC.Data.Backup
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public class BackupHelper
|
|
|
|
|
{
|
|
|
|
|
public const long AvailableZipSize = 10 * 1024 * 1024 * 1024L;
|
2020-06-15 08:19:40 +00:00
|
|
|
|
private readonly Guid mailStorageTag = new Guid("666ceac1-4532-4f8c-9cba-8f510eca2fd1");
|
|
|
|
|
|
|
|
|
|
private TenantManager TenantManager { get; set; }
|
|
|
|
|
private CoreBaseSettings CoreBaseSettings { get; set; }
|
|
|
|
|
private TenantStatisticsProvider TenantStatisticsProvider { get; set; }
|
|
|
|
|
|
2020-05-20 15:14:44 +00:00
|
|
|
|
public BackupHelper(TenantManager tenantManager, CoreBaseSettings coreBaseSettings, TenantStatisticsProvider tenantStatisticsProvider)
|
|
|
|
|
{
|
2020-06-15 08:19:40 +00:00
|
|
|
|
TenantManager = tenantManager;
|
|
|
|
|
CoreBaseSettings = coreBaseSettings;
|
|
|
|
|
TenantStatisticsProvider = tenantStatisticsProvider;
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-20 15:14:44 +00:00
|
|
|
|
public BackupAvailableSize GetAvailableSize(int tenantId)
|
|
|
|
|
{
|
2020-06-15 08:19:40 +00:00
|
|
|
|
if (CoreBaseSettings.Standalone)
|
2020-05-20 15:14:44 +00:00
|
|
|
|
return BackupAvailableSize.Available;
|
|
|
|
|
|
2020-06-15 08:19:40 +00:00
|
|
|
|
var size = TenantManager.FindTenantQuotaRows(new TenantQuotaRowQuery(tenantId))
|
2020-05-20 15:14:44 +00:00
|
|
|
|
.Where(r => !string.IsNullOrEmpty(r.Tag) && new Guid(r.Tag) != Guid.Empty && !new Guid(r.Tag).Equals(mailStorageTag))
|
|
|
|
|
.Sum(r => r.Counter);
|
|
|
|
|
if (size > AvailableZipSize)
|
|
|
|
|
{
|
|
|
|
|
return BackupAvailableSize.NotAvailable;
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-15 08:19:40 +00:00
|
|
|
|
size = TenantStatisticsProvider.GetUsedSize(tenantId);
|
2020-05-20 15:14:44 +00:00
|
|
|
|
if (size > AvailableZipSize)
|
|
|
|
|
{
|
|
|
|
|
return BackupAvailableSize.WithoutMail;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return BackupAvailableSize.Available;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool ExceedsMaxAvailableSize(int tenantId)
|
|
|
|
|
{
|
|
|
|
|
return GetAvailableSize(tenantId) != BackupAvailableSize.Available;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum BackupAvailableSize
|
|
|
|
|
{
|
|
|
|
|
Available,
|
|
|
|
|
WithoutMail,
|
|
|
|
|
NotAvailable,
|
2020-06-15 08:19:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-28 13:28:51 +00:00
|
|
|
|
public static class BackupHelperExtension
|
|
|
|
|
{
|
|
|
|
|
public static DIHelper AddBackupHelperService(this DIHelper services)
|
|
|
|
|
{
|
2020-07-17 10:52:28 +00:00
|
|
|
|
if (services.TryAddScoped<BackupHelper>())
|
|
|
|
|
{
|
|
|
|
|
return services
|
|
|
|
|
.AddTenantManagerService()
|
|
|
|
|
.AddCoreBaseSettingsService()
|
|
|
|
|
.AddTenantStatisticsProviderService();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return services;
|
2020-05-28 13:28:51 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-05-20 15:14:44 +00:00
|
|
|
|
}
|