feat(core,dal,domain,snapshotWorker): Воркер по управлению снапшотами. Создание сгапшотов для таблицы RobotConfigurations

This commit is contained in:
Mikhail Trubnikov
2026-07-13 15:29:48 +10:00
parent 9194d127d2
commit 50556ef605
28 changed files with 4953 additions and 26 deletions

View File

@@ -0,0 +1,31 @@
namespace PARR.Core.Services.Snapshots.Interfaces
{
/// <summary>
/// Общий снапшот провайдер.
/// Используется для реализации паттерна "Стратегия"
/// </summary>
public interface ISnapshotProvider
{
/// <summary>
/// Периодичность создания снапшота (не меньше 1 минуты).
/// </summary>
TimeSpan Interval { get; }
/// <summary>
/// Срок хранения снапшотов (например, 30 дней). Всё, что старше — удаляется.
/// </summary>
TimeSpan RetentionPeriod { get; }
/// <summary>
/// Метод сбора метрик и записи их в базу данных.
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task TakeSnapshotAsync(CancellationToken cancellationToken);
/// <summary>
/// Метод очистки устаревших снапшотов.
/// </summary>
Task CleanUpOldSnapshotsAsync(CancellationToken cancellationToken);
}
}

View File

@@ -0,0 +1,35 @@
namespace PARR.Core.Services.Snapshots.Interfaces
{
/// <summary>
/// Настройки снапшотов
/// </summary>
public interface ISnapshotSettings
{
/// <summary>
/// Интервал создания снапшотов для таблицы RobotConfiguration
/// </summary>
TimeSpan RobotConfigurationSnapshotInterval { get; }
/// <summary>
/// Длительность хранения снапшотов для RobotConfiguration в таблице ConfigurationShapshots
/// </summary>
TimeSpan RobotConfigurationSnapshotRetentionPeriod { get; }
/// <summary>
/// Длительность хранения снапшотов работы роботов в таблице Shapshots
/// </summary>
TimeSpan RobotSnapshotRetentionPeriod { get; }
}
/// <summary>
/// Настройки по умолчанию для ISnapshotSettings
/// </summary>
internal record DefaultSnapshotSettings : ISnapshotSettings
{
public TimeSpan RobotConfigurationSnapshotInterval => TimeSpan.FromMinutes(2);
public TimeSpan RobotConfigurationSnapshotRetentionPeriod => TimeSpan.FromDays(60);
public TimeSpan RobotSnapshotRetentionPeriod => TimeSpan.FromDays(60);
}
}