forked from ddrilling/AsbCloudServer
Merge pull request 'Фоновое удаление файлов (тех, дата загрузки которых составляет более 30 дней от текущей даты)' (#152) from feature/#23919905-drop-all-old-reports into dev
Reviewed-on: http://test.digitaldrilling.ru:8080/DDrilling/AsbCloudServer/pulls/152
This commit is contained in:
commit
b282dbedd2
@ -57,5 +57,13 @@ namespace AsbCloudApp.Services
|
|||||||
/// <param name="token"></param>
|
/// <param name="token"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<IEnumerable<ReportPropertiesDto>> GetAllReportsByWellAsync(int idWell, CancellationToken token);
|
Task<IEnumerable<ReportPropertiesDto>> GetAllReportsByWellAsync(int idWell, CancellationToken token);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удаление отчетов, если превышен их период хранения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="lifetime">период хранения отчетов</param>
|
||||||
|
/// <param name="token"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<int> DeleteAllOldReportsAsync(TimeSpan lifetime, CancellationToken token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
34
AsbCloudInfrastructure/Background/WorkToDeleteOldReports.cs
Normal file
34
AsbCloudInfrastructure/Background/WorkToDeleteOldReports.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using AsbCloudApp.Services;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace AsbCloudInfrastructure.Background
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Задача по удалению загруженных отчетов
|
||||||
|
/// </summary>
|
||||||
|
public class WorkToDeleteOldReports : Work
|
||||||
|
{
|
||||||
|
public WorkToDeleteOldReports()
|
||||||
|
: base("work to delete reports older than 30 days")
|
||||||
|
{
|
||||||
|
Timeout = TimeSpan.FromMinutes(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удаление отчетов, загруженных ранее 30 дней от текущей даты
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <param name="services"></param>
|
||||||
|
/// <param name="onProgressCallback"></param>
|
||||||
|
/// <param name="token"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected override async Task Action(string id, IServiceProvider services, Action<string, double?> onProgressCallback, CancellationToken token)
|
||||||
|
{
|
||||||
|
var reportService = services.GetRequiredService<IReportService>();
|
||||||
|
await reportService.DeleteAllOldReportsAsync(TimeSpan.FromDays(30), token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -147,7 +147,7 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
public async Task<IEnumerable<FileInfoDto>> DeleteAsync(IEnumerable<int> ids, CancellationToken token)
|
public async Task<IEnumerable<FileInfoDto>> DeleteAsync(IEnumerable<int> ids, CancellationToken token)
|
||||||
{
|
{
|
||||||
var query = dbSetConfigured
|
var query = dbSetConfigured
|
||||||
.Where(f => ids.Contains(f.Id) && f.IsDeleted);
|
.Where(f => ids.Contains(f.Id));
|
||||||
|
|
||||||
var files = await query.ToListAsync(token);
|
var files = await query.ToListAsync(token);
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
{
|
{
|
||||||
private readonly IAsbCloudDbContext db;
|
private readonly IAsbCloudDbContext db;
|
||||||
private readonly ITelemetryService telemetryService;
|
private readonly ITelemetryService telemetryService;
|
||||||
|
private readonly FileService fileService;
|
||||||
private readonly IWellService wellService;
|
private readonly IWellService wellService;
|
||||||
private readonly BackgroundWorker backgroundWorkerService;
|
private readonly BackgroundWorker backgroundWorkerService;
|
||||||
|
|
||||||
@ -28,12 +29,14 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
public ReportService(IAsbCloudDbContext db,
|
public ReportService(IAsbCloudDbContext db,
|
||||||
ITelemetryService telemetryService,
|
ITelemetryService telemetryService,
|
||||||
IWellService wellService,
|
IWellService wellService,
|
||||||
|
FileService fileService,
|
||||||
BackgroundWorker backgroundWorkerService)
|
BackgroundWorker backgroundWorkerService)
|
||||||
{
|
{
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.wellService = wellService;
|
this.wellService = wellService;
|
||||||
this.backgroundWorkerService = backgroundWorkerService;
|
this.backgroundWorkerService = backgroundWorkerService;
|
||||||
this.telemetryService = telemetryService;
|
this.telemetryService = telemetryService;
|
||||||
|
this.fileService = fileService;
|
||||||
ReportCategoryId = db.FileCategories
|
ReportCategoryId = db.FileCategories
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.First(c => c.Name.Equals("Рапорт"))
|
.First(c => c.Name.Equals("Рапорт"))
|
||||||
@ -186,6 +189,16 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
|
|
||||||
return generator;
|
return generator;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public async Task<int> DeleteAllOldReportsAsync(TimeSpan lifetime, CancellationToken token)
|
||||||
|
{
|
||||||
|
var lifeTimeStartDate = DateTime.UtcNow.Date - lifetime;
|
||||||
|
var fileIds = await db.ReportProperties
|
||||||
|
.Where(r => r.File.UploadDate.Date < lifeTimeStartDate)
|
||||||
|
.Select(r => r.IdFile)
|
||||||
|
.ToArrayAsync(token);
|
||||||
|
|
||||||
|
return await fileService.DeleteAsync(fileIds, token);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ namespace AsbCloudInfrastructure
|
|||||||
_ = provider.GetRequiredService<ITelemetryDataCache<TelemetryDataSpinDto>>();
|
_ = provider.GetRequiredService<ITelemetryDataCache<TelemetryDataSpinDto>>();
|
||||||
|
|
||||||
var backgroundWorker = provider.GetRequiredService<PeriodicBackgroundWorker>();
|
var backgroundWorker = provider.GetRequiredService<PeriodicBackgroundWorker>();
|
||||||
|
backgroundWorker.Add<WorkToDeleteOldReports>(TimeSpan.FromDays(1));
|
||||||
backgroundWorker.Add<WellInfoService.WorkWellInfoUpdate>(TimeSpan.FromMinutes(30));
|
backgroundWorker.Add<WellInfoService.WorkWellInfoUpdate>(TimeSpan.FromMinutes(30));
|
||||||
backgroundWorker.Add<WorkOperationDetection>(TimeSpan.FromMinutes(15));
|
backgroundWorker.Add<WorkOperationDetection>(TimeSpan.FromMinutes(15));
|
||||||
backgroundWorker.Add<WorkSubsystemOperationTimeCalc>(TimeSpan.FromMinutes(30));
|
backgroundWorker.Add<WorkSubsystemOperationTimeCalc>(TimeSpan.FromMinutes(30));
|
||||||
|
Loading…
Reference in New Issue
Block a user