Merge branch 'dev' of http://gitlab.dvgd.oao.rzd/devptk/parr/parr_api into dev
This commit is contained in:
@@ -4,6 +4,7 @@ using PARR.Core.Common.Interfaces;
|
||||
using PARR.Core.Repositories.Interfaces;
|
||||
using PARR.Core.Services.Shortcodes;
|
||||
using PARR.Core.Services.Workload.Models;
|
||||
using PARR.Domain.Cache;
|
||||
using PARR.Domain.Cache.Models;
|
||||
using PARR.Domain.DTOs.Workload;
|
||||
using PARR.Domain.Entities;
|
||||
@@ -36,10 +37,10 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
|
||||
|
||||
//todo:----------- Настройки, вынести -----------
|
||||
/// <summary>
|
||||
/// Ключ КЭШ шаблонов
|
||||
/// </summary>
|
||||
private readonly string[] cacheTemplateKey = { "template", "report", "params" };
|
||||
///// <summary>
|
||||
///// Ключ КЭШ шаблонов
|
||||
///// </summary>
|
||||
//private readonly string[] cacheTemplateKey = { "template", "report", "params" };
|
||||
|
||||
/// <summary>
|
||||
/// TTL кэша шаблонов
|
||||
@@ -51,25 +52,25 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
/// </summary>
|
||||
private readonly int maxCacheDiff = 1000;
|
||||
|
||||
/// <summary>
|
||||
/// Ключ КЭШ, отчет о загруженности, все ЗО
|
||||
/// </summary>
|
||||
private readonly string[] cacheWorkloadResponseAreaAllKey = { "workload", "response area", "all" };
|
||||
///// <summary>
|
||||
///// Ключ КЭШ, отчет о загруженности, все ЗО
|
||||
///// </summary>
|
||||
//private readonly string[] cacheWorkloadResponseAreaAllKey = { "workload", "response area", "all" };
|
||||
|
||||
/// <summary>
|
||||
/// Ключ КЭШ, отчет о загруженности, одна ЗО
|
||||
/// </summary>
|
||||
private readonly string[] cacheWorkloadResponseAreaItemKey = { "workload", "response area", "item" };
|
||||
///// <summary>
|
||||
///// Ключ КЭШ, отчет о загруженности, одна ЗО
|
||||
///// </summary>
|
||||
//private readonly string[] cacheWorkloadResponseAreaItemKey = { "workload", "response area", "item" };
|
||||
|
||||
/// <summary>
|
||||
/// Ключ КЭШ, отчет о загруженности, все РГ
|
||||
/// </summary>
|
||||
private readonly string[] cacheWorkloadWorkGroupAllKey = { "workload", "work group", "all" };
|
||||
///// <summary>
|
||||
///// Ключ КЭШ, отчет о загруженности, все РГ
|
||||
///// </summary>
|
||||
//private readonly string[] cacheWorkloadWorkGroupAllKey = { "workload", "work group", "all" };
|
||||
|
||||
/// <summary>
|
||||
/// Ключ КЭШ, отчет о загруженности, одна РГ
|
||||
/// </summary>
|
||||
private readonly string[] cacheWorkloadWorkGroupItemKey = { "workload", "work group", "item" };
|
||||
///// <summary>
|
||||
///// Ключ КЭШ, отчет о загруженности, одна РГ
|
||||
///// </summary>
|
||||
//private readonly string[] cacheWorkloadWorkGroupItemKey = { "workload", "work group", "item" };
|
||||
|
||||
/// <summary>
|
||||
/// TTL кэша отчетов workload
|
||||
@@ -132,7 +133,7 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
|
||||
templateCount++;
|
||||
|
||||
#region Расчет и отрпавка прогресса
|
||||
#region Расчет и отправка прогресса
|
||||
// Считаем текущий процент(0 - 100). Этап идёт от 5% до 95%
|
||||
var currentPercent = 5 + (int)((templateCount * 90.0) / totalTemplates);
|
||||
|
||||
@@ -153,11 +154,14 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
|
||||
//3. Сохранить в Redis
|
||||
logger.LogDebug("Для сохранения в Redis подготовлен массив из {Count} строк", cacheData.Count);
|
||||
var hashKey = redisCacheService.GetKey(cacheTemplateKey);
|
||||
//var hashKey = redisCacheService.GetKey(cacheTemplateKey);
|
||||
var hashKey = redisCacheService.GetKey(CacheKeys.Workload.TemplateHash());
|
||||
|
||||
foreach (var item in cacheData)
|
||||
{
|
||||
await redisCacheService.SetHashFieldAsync(hashKey, item.Data.TemplateId.ToString(), item, cacheTemplateTtl);
|
||||
var templateKey = redisCacheService.GetKey(CacheKeys.Workload.Template(item.Data.TemplateId));
|
||||
//await redisCacheService.SetHashFieldAsync(hashKey, item.Data.TemplateId.ToString(), item, cacheTemplateTtl);
|
||||
await redisCacheService.SetHashFieldAsync(hashKey, templateKey, item, cacheTemplateTtl);
|
||||
}
|
||||
|
||||
await progress.ReportAsync(100);
|
||||
@@ -172,8 +176,9 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
/// <returns></returns>
|
||||
public async Task DeleteTemplateCacheAsync()
|
||||
{
|
||||
var hashKey = redisCacheService.GetKey(cacheTemplateKey);
|
||||
logger.LogDebug("Удаляю кэш шаблонов, {HashKey}", redisCacheService.GetKey(cacheTemplateKey));
|
||||
//var hashKey = redisCacheService.GetKey(cacheTemplateKey);
|
||||
var hashKey = redisCacheService.GetKey(CacheKeys.Workload.TemplateHash());
|
||||
logger.LogDebug("Удаляю кэш шаблонов, {HashKey}", hashKey);
|
||||
|
||||
await redisCacheService.DeleteHashAsync(hashKey);
|
||||
}
|
||||
@@ -186,11 +191,12 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
{
|
||||
logger.LogDebug("Удаляю кэш отчетов");
|
||||
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(cacheWorkloadResponseAreaAllKey) + "*");
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(cacheWorkloadResponseAreaItemKey) + "*");
|
||||
//await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(cacheWorkloadResponseAreaAllKey) + "*");
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(CacheKeys.Workload.WorkloadResponseAreaAll()) + "*");
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(CacheKeys.Workload.WorkloadResponseAreaItem()) + "*");
|
||||
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(cacheWorkloadWorkGroupAllKey) + "*");
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(cacheWorkloadWorkGroupItemKey) + "*");
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(CacheKeys.Workload.WorkloadWorkGroupAll()) + "*");
|
||||
await redisCacheService.DeleteKeysByPatternAsync(redisCacheService.GetKey(CacheKeys.Workload.WorkloadWorkGroupItem()) + "*");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -207,7 +213,8 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
logger.LogDebug("Получаю данные для формирования отчета. DateStart {DateStart}, DurationDays {DurationDays}, Offset {Offset}", dateStart, durationDays, offset);
|
||||
|
||||
// Получим кэш целиком
|
||||
var cacheData = await redisCacheService.GetAllHashFieldsAsync<TemplateCache>(redisCacheService.GetKey(cacheTemplateKey));
|
||||
//var cacheData = await redisCacheService.GetAllHashFieldsAsync<TemplateCache>(redisCacheService.GetKey(cacheTemplateKey));
|
||||
var cacheData = await redisCacheService.GetAllHashFieldsAsync<TemplateCache>(redisCacheService.GetKey(CacheKeys.Workload.TemplateHash()));
|
||||
if (cacheData.Count == 0)
|
||||
{
|
||||
logger.LogDebug("Записей в кэш 0. Конец.");
|
||||
@@ -245,7 +252,9 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
|
||||
foreach (var template in templates)
|
||||
{
|
||||
cacheData.TryGetValue(template.Id.ToString(), out var cache);
|
||||
//cacheData.TryGetValue(template.Id.ToString(), out var cache);
|
||||
var templateKey = redisCacheService.GetKey(CacheKeys.Workload.Template(template.Id));
|
||||
cacheData.TryGetValue(templateKey, out var cache);
|
||||
|
||||
var (workGroup, responseArea) = ("", "");
|
||||
var cacheDate = DateTimeOffset.UtcNow;
|
||||
@@ -309,7 +318,12 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
Timestamp = DateTimeOffset.UtcNow
|
||||
};
|
||||
|
||||
await redisCacheService.SetHashFieldAsync(redisCacheService.GetKey(cacheTemplateKey), templateId.ToString(), cacheItem);
|
||||
//await redisCacheService.SetHashFieldAsync(redisCacheService.GetKey(cacheTemplateKey), templateId.ToString(), cacheItem);
|
||||
await redisCacheService.SetHashFieldAsync(
|
||||
redisCacheService.GetKey(CacheKeys.Workload.TemplateHash()),
|
||||
redisCacheService.GetKey(CacheKeys.Workload.Template(templateId)),
|
||||
cacheItem
|
||||
);
|
||||
logger.LogDebug("Добавлена недостающая запись в кэш. {TemplateId}, '{WorkGroup}', '{ResponseArea}'", templateId, workGroup, responseArea);
|
||||
|
||||
return (workGroup, responseArea);
|
||||
@@ -369,7 +383,8 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
/// <returns></returns>
|
||||
public async Task<TemplateCache?> GetFirstTemplateCacheAsync()
|
||||
{
|
||||
var cache = await redisCacheService.GetFirstHashFieldAsync<TemplateCache>(redisCacheService.GetKey(cacheTemplateKey));
|
||||
//var cache = await redisCacheService.GetFirstHashFieldAsync<TemplateCache>(redisCacheService.GetKey(cacheTemplateKey));
|
||||
var cache = await redisCacheService.GetFirstHashFieldAsync<TemplateCache>(redisCacheService.GetKey(CacheKeys.Workload.TemplateHash()));
|
||||
|
||||
return cache?.Value;
|
||||
}
|
||||
@@ -394,23 +409,24 @@ namespace PARR.Core.Services.Workload.Implementations
|
||||
switch (reportType)
|
||||
{
|
||||
case WorkloadReportType.ResponseAreaAll:
|
||||
keyList.AddRange(cacheWorkloadResponseAreaAllKey);
|
||||
//keyList.AddRange(cacheWorkloadResponseAreaAllKey);
|
||||
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaAll());
|
||||
break;
|
||||
case WorkloadReportType.ResponseAreaItem:
|
||||
keyList.AddRange(cacheWorkloadResponseAreaItemKey);
|
||||
keyList.AddRange(CacheKeys.Workload.WorkloadResponseAreaItem());
|
||||
break;
|
||||
case WorkloadReportType.WorkGroupAll:
|
||||
keyList.AddRange(cacheWorkloadWorkGroupAllKey);
|
||||
keyList.AddRange(CacheKeys.Workload.WorkloadWorkGroupAll());
|
||||
break;
|
||||
case WorkloadReportType.WorkGroupItem:
|
||||
keyList.AddRange(cacheWorkloadWorkGroupItemKey);
|
||||
keyList.AddRange(CacheKeys.Workload.WorkloadWorkGroupItem());
|
||||
break;
|
||||
default:
|
||||
logger.LogError("Недопустимое значение тип отчета '{ReportType}'", reportType);
|
||||
throw new ArgumentException("Недопустимое значение тип отчета", nameof(reportType));
|
||||
}
|
||||
|
||||
keyList.AddRange(new string[] { dateStart.ToString(), durationDays.ToString(), offset.ToString() });
|
||||
keyList.AddRange(new string[] { dateStart.ToString("yyyy-MM-dd"), durationDays.ToString(), offset.ToString() });
|
||||
|
||||
var keyStr = string.Empty;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user