feat(core): WorkloadCacheService - логика

This commit is contained in:
Mikhail Trubnikov
2026-04-30 15:10:35 +10:00
parent eb78dfd6a8
commit 238244790b
17 changed files with 59 additions and 35 deletions

View File

@@ -5,8 +5,8 @@ using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base;
using PARR.API.Services.Interfaces;
using PARR.API.Settings;
using PARR.Core.Services.Task.Interfaces;
using PARR.Core.Services.Task.Providers;
using PARR.Core.Services.TaskServices.Interfaces;
using PARR.Core.Services.TaskServices.Providers;
using PARR.Domain.Common.Roles;
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Enums;

View File

@@ -3,12 +3,12 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using PARR.Core.Common.Implementations;
using PARR.Core.Common.Interfaces;
using PARR.Core.Services.Task.Handlers;
using PARR.Core.Services.Task.Handlers.Factory;
using PARR.Core.Services.Task.Implementations;
using PARR.Core.Services.Task.Interfaces;
using PARR.Core.Services.Task.Providers;
using PARR.Core.Services.Task.ReconciliationHosted;
using PARR.Core.Services.TaskServices.Handlers;
using PARR.Core.Services.TaskServices.Handlers.Factory;
using PARR.Core.Services.TaskServices.Implementations;
using PARR.Core.Services.TaskServices.Interfaces;
using PARR.Core.Services.TaskServices.Providers;
using PARR.Core.Services.TaskServices.ReconciliationHosted;
using PARR.Core.Services.Workload.Implementations;
using PARR.Core.Services.Workload.Interfaces;
using PARR.Domain.Enums;
@@ -67,6 +67,7 @@ namespace PARR.Core
//services.AddScoped<IUserService, UserService>();
//services.AddTransient<IShortcodesService, ShortcodesService>();
#endregion

View File

@@ -4,7 +4,7 @@ using PARR.Core.Repositories.Interfaces.TaskRepositories;
using PARR.Domain.Entities.TaskEntities;
using PARR.Domain.Enums;
namespace PARR.Core.Services.Task.Handlers
namespace PARR.Core.Services.TaskServices.Handlers
{
/// <summary>
/// Базовый класс для всех обработчиков задач.

View File

@@ -1,6 +1,7 @@
using PARR.Domain.Enums;
using PARR.Core.Services.TaskServices.Handlers;
using PARR.Domain.Enums;
namespace PARR.Core.Services.Task.Handlers.Factory
namespace PARR.Core.Services.TaskServices.Handlers.Factory
{
/// <summary>
/// Фабрика обработчиков

View File

@@ -1,7 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using PARR.Domain.Enums;
namespace PARR.Core.Services.Task.Handlers.Factory
namespace PARR.Core.Services.TaskServices.Handlers.Factory
{
public class TaskHandlerFactory : ITaskHandlerFactory
{

View File

@@ -1,4 +1,4 @@
namespace PARR.Core.Services.Task.Handlers
namespace PARR.Core.Services.TaskServices.Handlers
{
/// <summary>
/// Результат выполнения задачи обработчиком.

View File

@@ -3,7 +3,7 @@ using PARR.Core.Repositories.Interfaces.TaskRepositories;
using PARR.Domain.Entities.TaskEntities;
using PARR.Domain.Enums;
namespace PARR.Core.Services.Task.Handlers
namespace PARR.Core.Services.TaskServices.Handlers
{
/// <summary>
/// Обработчик задачаи формирования отчета по загруженности (формирование КЭШ).

View File

@@ -2,7 +2,7 @@
using Microsoft.Extensions.Logging;
using PARR.Core.Common.Interfaces.RabbitServices;
using PARR.Core.Repositories.Interfaces.TaskRepositories;
using PARR.Core.Services.Task.Interfaces;
using PARR.Core.Services.TaskServices.Interfaces;
using PARR.Domain.Common.Rabbit.Messages;
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Entities.TaskEntities;
@@ -11,7 +11,7 @@ using PARR.Domain.Settings;
using System.Text.Encodings.Web;
using System.Text.Json;
namespace PARR.Core.Services.Task.Implementations
namespace PARR.Core.Services.TaskServices.Implementations
{
internal class TaskManagementService : ITaskManagementService
{

View File

@@ -2,15 +2,15 @@
using Microsoft.Extensions.Logging;
using PARR.Core.Common.Interfaces.RabbitServices;
using PARR.Core.Repositories.Interfaces.TaskRepositories;
using PARR.Core.Services.Task.Interfaces;
using PARR.Core.Services.Task.Models;
using PARR.Core.Services.Task.Providers;
using PARR.Core.Services.TaskServices.Interfaces;
using PARR.Core.Services.TaskServices.Models;
using PARR.Core.Services.TaskServices.Providers;
using PARR.Domain.Common.Rabbit.Messages;
using PARR.Domain.Entities.TaskEntities;
using PARR.Domain.Enums;
using PARR.Domain.Settings;
namespace PARR.Core.Services.Task.Implementations
namespace PARR.Core.Services.TaskServices.Implementations
{
internal class TaskReconciliationService : ITaskReconciliationService
{

View File

@@ -2,7 +2,7 @@
using PARR.Domain.Enums;
using PARR.Domain.Settings;
namespace PARR.Core.Services.Task.Interfaces
namespace PARR.Core.Services.TaskServices.Interfaces
{
/// <summary>
/// Управления задачами (очередями)

View File

@@ -1,6 +1,6 @@
using PARR.Core.Services.Task.Models;
using PARR.Core.Services.TaskServices.Models;
namespace PARR.Core.Services.Task.Interfaces
namespace PARR.Core.Services.TaskServices.Interfaces
{
/// <summary>
/// Сервис для проверки и исправления зависших задач.

View File

@@ -1,4 +1,4 @@
namespace PARR.Core.Services.Task.Models
namespace PARR.Core.Services.TaskServices.Models
{
/// <summary>
/// Отчет о выполнении Reconciliation Job.

View File

@@ -1,7 +1,7 @@
using PARR.Domain.Enums;
using PARR.Domain.Settings;
namespace PARR.Core.Services.Task.Providers
namespace PARR.Core.Services.TaskServices.Providers
{
/// <summary>
/// Провайдер настроек очереди для задач Tasks

View File

@@ -1,7 +1,7 @@
using PARR.Domain.Enums;
using PARR.Domain.Settings;
namespace PARR.Core.Services.Task.Providers
namespace PARR.Core.Services.TaskServices.Providers
{
internal class TaskMqSettingsProvider : ITaskMqSettingsProvider
{

View File

@@ -2,10 +2,10 @@
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using PARR.Core.Common.Interfaces;
using PARR.Core.Services.Task.Interfaces;
using PARR.Core.Services.TaskServices.Interfaces;
using PARR.Domain.Settings;
namespace PARR.Core.Services.Task.ReconciliationHosted
namespace PARR.Core.Services.TaskServices.ReconciliationHosted
{
/// <summary>
/// Фоновая задача для периодического запуска Reconciliation Job.
@@ -33,7 +33,7 @@ namespace PARR.Core.Services.Task.ReconciliationHosted
this.intervalService = intervalService;
}
protected override async System.Threading.Tasks.Task ExecuteAsync(CancellationToken stoppingToken)
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
await intervalService.IntervalInitAsync(async () =>
{

View File

@@ -2,7 +2,7 @@
using Microsoft.Extensions.Logging;
using PARR.Core.Common.Interfaces;
using PARR.Core.Common.Interfaces.RabbitServices;
using PARR.Core.Services.Task.Handlers.Factory;
using PARR.Core.Services.TaskServices.Handlers.Factory;
using PARR.Core.Services.Workload.Interfaces;
using PARR.Domain.Common.Rabbit.Messages;
using PARR.Domain.Enums;

View File

@@ -1,5 +1,8 @@
using Microsoft.Extensions.Logging;
using InfluxDB.Client.Api.Service;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using PARR.Core.Common.Interfaces;
using PARR.Core.Repositories.Interfaces;
namespace PARR.Core.Services.Workload.Implementations
{
@@ -10,15 +13,18 @@ namespace PARR.Core.Services.Workload.Implementations
{
private readonly ILogger<WorkloadCacheService> logger;
private readonly IRedisCacheService redisCacheService;
private readonly ITemplateRepository templateRepository;
public WorkloadCacheService(
ILogger<WorkloadCacheService> logger,
IRedisCacheService redisCacheService
IRedisCacheService redisCacheService,
ITemplateRepository templateRepository
//IShortcodeService
)
{
this.logger = logger;
this.redisCacheService = redisCacheService;
this.templateRepository = templateRepository;
}
@@ -27,11 +33,18 @@ namespace PARR.Core.Services.Workload.Implementations
/// КЭШ рабочих групп и зон ответственности
/// </summary>
/// <returns></returns>
public async System.Threading.Tasks.Task CreateTemplateCacheAsync()
public async Task CreateTemplateCacheAsync()
{
await DeleteTemplateCacheAsync();
await DeleteWorkloadCacheAsync();
//1. Получить из БД все шаблоны (тяжелый запрос, тянет вообще все данные, 8 сек)
var templates = await templateRepository.Get()
.AsNoTracking()
.Include(t=>t.Job)
.ToListAsync();
//1. Получить из БД все шаблоны - НЕТ РЕПЫ
//2. Получить по каждому шаблону ЗО и РГ
//3. Сохранить в Redis
@@ -42,7 +55,16 @@ namespace PARR.Core.Services.Workload.Implementations
/// Удалить КЭШ шаблонов.
/// </summary>
/// <returns></returns>
private async System.Threading.Tasks.Task DeleteTemplateCacheAsync()
public async Task DeleteTemplateCacheAsync()
{
}
/// <summary>
/// Удалить КЭШ отчетов
/// </summary>
/// <returns></returns>
public async Task DeleteWorkloadCacheAsync()
{
}