feat(api, core): Workload - статус формирования отчетности. RedisCacheService - получить первую запись из кэш типа Hash.
This commit is contained in:
@@ -94,6 +94,14 @@
|
||||
/// <returns></returns>
|
||||
Task<T?> GetHashFieldAsync<T>(string hashKey, string field);
|
||||
|
||||
/// <summary>
|
||||
/// Получить случайную первую запись из Hash
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="hashKey"></param>
|
||||
/// <returns></returns>
|
||||
Task<(string Field, T? Value)?> GetFirstHashFieldAsync<T>(string hashKey);
|
||||
|
||||
/// <summary>
|
||||
/// Получить все значения из Hash
|
||||
/// </summary>
|
||||
|
||||
@@ -328,6 +328,18 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Вернуть первую запись из TamplateCache если есть
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<TemplateCache?> GetFirstTemplateCacheAsync()
|
||||
{
|
||||
var cache = await redisCacheService.GetFirstHashFieldAsync<TemplateCache>(redisCacheService.GetKey(cacheTemplateKey));
|
||||
|
||||
return cache?.Value;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Формирует ключ для отчета Workload
|
||||
/// </summary>
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.Core.Services.NextRunServices;
|
||||
using PARR.Core.Services.TaskServices.Interfaces;
|
||||
using PARR.Core.Services.Workload.Interfaces;
|
||||
using PARR.Core.Services.Workload.Models;
|
||||
using PARR.Domain.DTOs.TaskDTO;
|
||||
using PARR.Domain.DTOs.Workload;
|
||||
using PARR.Domain.Enums;
|
||||
|
||||
@@ -12,16 +14,19 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
private readonly ILogger<WorkloadService> logger;
|
||||
private readonly WorkloadCacheService workloadCacheService;
|
||||
private readonly INextRunService nextRunService;
|
||||
private readonly ITaskManagementService taskManagementService;
|
||||
|
||||
public WorkloadService(
|
||||
ILogger<WorkloadService> logger,
|
||||
WorkloadCacheService workloadCacheService,
|
||||
INextRunService nextRunService
|
||||
INextRunService nextRunService,
|
||||
ITaskManagementService taskManagementService
|
||||
)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.workloadCacheService = workloadCacheService;
|
||||
this.nextRunService = nextRunService;
|
||||
this.taskManagementService = taskManagementService;
|
||||
}
|
||||
|
||||
|
||||
@@ -107,6 +112,39 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
return report;
|
||||
}
|
||||
|
||||
|
||||
public async Task<WorkloadCacheInfo> GetReportInfoAsync()
|
||||
{
|
||||
// может быть три статуса
|
||||
// 1 - отчет сейчас формируется (дата начала формирования отчета)
|
||||
// 2 - отчет сформирован (вернуть дату формирования кэш)
|
||||
// 3 - отчет сейчас не формируется, кэша нет (date = null)
|
||||
|
||||
|
||||
// 1. проверить что выполнились все задания на обновление кэш
|
||||
var activeTasks = await taskManagementService.GetActiveTasksAsync(TaskTypeEnum.Workload);
|
||||
if (activeTasks.Count > 0)
|
||||
{
|
||||
// идет формирование отчета
|
||||
// задача может быт только одна, так как у нее такой тип
|
||||
var task = activeTasks.First();
|
||||
|
||||
return new WorkloadCacheInfo { Status = WorkloadCacheInfo.StatusEnum.Processing, Date = task.DateCreated };
|
||||
}
|
||||
|
||||
// 2. получить дату кэш
|
||||
// Если нет активных задач, значит может быть кэш существует, пробуем получить дату из кэш
|
||||
var templateCache = await workloadCacheService.GetFirstTemplateCacheAsync();
|
||||
if (templateCache != null)
|
||||
{
|
||||
return new WorkloadCacheInfo { Status = WorkloadCacheInfo.StatusEnum.Generated, Date = templateCache.Timestamp };
|
||||
}
|
||||
|
||||
// Если кэш нет, то возвращаем null
|
||||
return new WorkloadCacheInfo { Status = WorkloadCacheInfo.StatusEnum.NotFound };
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Получить список дней для отчета, с отметкой выходной/рабочий
|
||||
/// </summary>
|
||||
|
||||
@@ -8,6 +8,12 @@ namespace PARR.Core.Services.Workload.Interfaces
|
||||
/// </summary>
|
||||
public interface IWorkloadService
|
||||
{
|
||||
/// <summary>
|
||||
/// Получить статус кэш/отчета
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<WorkloadCacheInfo> GetReportInfoAsync();
|
||||
|
||||
/// <summary>
|
||||
/// Получить отчет о загруженности
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user