105 lines
3.2 KiB
C#
105 lines
3.2 KiB
C#
|
//using Microsoft.EntityFrameworkCore;
|
|||
|
//using DD.Persistence.Models.Common;
|
|||
|
//using DD.Persistence.ModelsAbstractions;
|
|||
|
//using DD.Persistence.Database.EntityAbstractions;
|
|||
|
|
|||
|
//namespace DD.Persistence.Repository.Repositories;
|
|||
|
|
|||
|
//public class TimestampedValuesCachedRepository<TEntity, TDto> : TimeSeriesDataRepository<TEntity, TDto>
|
|||
|
// where TEntity : class, ITimestampedItem, new()
|
|||
|
// where TDto : class, ITimestampAbstractDto, new()
|
|||
|
//{
|
|||
|
// public static TDto? FirstByDate { get; private set; }
|
|||
|
// public static CyclicArray<TDto> LastData { get; } = new CyclicArray<TDto>(CacheItemsCount);
|
|||
|
|
|||
|
// private const int CacheItemsCount = 3600;
|
|||
|
|
|||
|
// public TimestampedValuesCachedRepository(DbContext db) : base(db)
|
|||
|
// {
|
|||
|
// Task.Run(async () =>
|
|||
|
// {
|
|||
|
// var firstDateItem = await base.GetFirstAsync(CancellationToken.None);
|
|||
|
// if (firstDateItem == null)
|
|||
|
// {
|
|||
|
// return;
|
|||
|
// }
|
|||
|
|
|||
|
// FirstByDate = firstDateItem;
|
|||
|
|
|||
|
// var dtos = await base.GetLastAsync(CacheItemsCount, CancellationToken.None);
|
|||
|
// dtos = dtos.OrderBy(d => d.Timestamp);
|
|||
|
// LastData.AddRange(dtos);
|
|||
|
// }).Wait();
|
|||
|
// }
|
|||
|
|
|||
|
// public override async Task<IEnumerable<TDto>> GetGtDate(DateTimeOffset dateBegin, CancellationToken token)
|
|||
|
// {
|
|||
|
|
|||
|
// if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin)
|
|||
|
// {
|
|||
|
// var dtos = await base.GetGtDate(dateBegin, token);
|
|||
|
// return dtos;
|
|||
|
// }
|
|||
|
|
|||
|
// var items = LastData
|
|||
|
// .Where(i => i.Timestamp >= dateBegin);
|
|||
|
|
|||
|
// return items;
|
|||
|
// }
|
|||
|
|
|||
|
// public override async Task<int> AddRange(IEnumerable<TDto> dtos, CancellationToken token)
|
|||
|
// {
|
|||
|
// var result = await base.AddRange(dtos, token);
|
|||
|
// if (result > 0)
|
|||
|
// {
|
|||
|
|
|||
|
// dtos = dtos.OrderBy(x => x.Timestamp);
|
|||
|
|
|||
|
// FirstByDate = dtos.First();
|
|||
|
// LastData.AddRange(dtos);
|
|||
|
// }
|
|||
|
|
|||
|
// return result;
|
|||
|
// }
|
|||
|
|
|||
|
// public override async Task<DatesRangeDto?> GetDatesRange(CancellationToken token)
|
|||
|
// {
|
|||
|
// if (FirstByDate == null)
|
|||
|
// return null;
|
|||
|
|
|||
|
// return await Task.Run(() =>
|
|||
|
// {
|
|||
|
// return new DatesRangeDto
|
|||
|
// {
|
|||
|
// From = FirstByDate.Timestamp,
|
|||
|
// To = LastData[^1].Timestamp
|
|||
|
// };
|
|||
|
// });
|
|||
|
// }
|
|||
|
|
|||
|
// public override async Task<IEnumerable<TDto>> GetResampledData(
|
|||
|
// DateTimeOffset dateBegin,
|
|||
|
// double intervalSec = 600d,
|
|||
|
// int approxPointsCount = 1024,
|
|||
|
// CancellationToken token = default)
|
|||
|
// {
|
|||
|
// var dtos = LastData.Where(i => i.Timestamp >= dateBegin);
|
|||
|
// if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin)
|
|||
|
// {
|
|||
|
// dtos = await base.GetGtDate(dateBegin, token);
|
|||
|
// }
|
|||
|
|
|||
|
// var dateEnd = dateBegin.AddSeconds(intervalSec);
|
|||
|
// dtos = dtos
|
|||
|
// .Where(i => i.Timestamp <= dateEnd);
|
|||
|
|
|||
|
// var ratio = dtos.Count() / approxPointsCount;
|
|||
|
// if (ratio > 1)
|
|||
|
// dtos = dtos
|
|||
|
// .Where((_, index) => index % ratio == 0);
|
|||
|
|
|||
|
// return dtos;
|
|||
|
// }
|
|||
|
//}
|
|||
|
|